// Шаговый двигатель: четыре фазы, полный шаг.
//
// Выводы платы не умеют питать обмотки. В симуляторе фазы идут
// на плату напрямую ради наглядности; в железе между ними стоит драйвер
// (ULN2003 для 28BYJ-48, L298N, A4988).
//
// Две обмотки под током одновременно дают больший момент, чем одна.
const int PINS[4] = {8, 9, 10, 11};
const int SEQ[4][4] = {
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1},
};
void step(int phase) {
for (int i = 0; i < 4; i++) digitalWrite(PINS[i], SEQ[phase][i]);
}
void setup() {
for (int i = 0; i < 4; i++) pinMode(PINS[i], OUTPUT);
}
void loop() {
for (int i = 0; i < 200; i++) { step(i % 4); delay(5); } // оборот вперёд
delay(500);
for (int i = 200; i > 0; i--) { step(i % 4); delay(5); } // и назад
delay(500);
}
Arduino Uno: шаговый двигатель без библиотеки
Полношаговая последовательность на четырёх выводах: две обмотки под током одновременно. Скорость ограничена паузой между шагами.
Что на схеме
Плата Arduino Uno, к ней подключены:
- Шаговый двигатель —
st1
Задействованы выводы платы: D8, D9, D10, D11. Всего соединений на схеме: 4.
Библиотеки
Дополнительных библиотек не нужно: всё делается ядром Arduino AVR, которое уже стоит в сборочном окружении.
Как это устроено в коде
Основное, чем пользуется скетч:
digitalWrite()— выставляет на выводе высокий или низкий уровеньpinMode()— назначает выводу режим: выход, вход или вход с подтяжкойdelay()— пауза, на время которой ядро занято ожиданием
В скетче 31 строка; свои функции: step(). Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.
Что попробовать изменить
- Замените
delay()на счёт поmillis()— иloop()освободится для всего остального, что должно происходить одновременно. - Перенесите деталь на другой вывод — на схеме и в коде — и убедитесь, что пример работает так же.
- Нажмите «Форкнуть»: копия станет вашим проектом, и в ней можно менять что угодно.
Смотрите также
- Подключение шагового двигателя — Биполярный шаговый двигатель
- Arduino Uno: датчик движения HC-SR501 — Выход датчика цифровой: движение — высокий уровень. Свет включается по движению и гаснет через несколько секунд тишины…
- Arduino Uno: сенсорная кнопка TTP223 — Пока палец на площадке, выход высокий. Скетч ловит момент касания и каждым касанием переключает светодиод.
- Arduino Uno: датчик влажности почвы — Чем влажнее почва, тем ниже напряжение на AO. Скетч переводит отсчёты АЦП в проценты и зажигает светодиод, когда горшок…
- Arduino Uno: датчик газа MQ-2 — Чем больше газа, тем выше напряжение на AO. Сигнал включается при высоком пороге и выключается только при заметно более…
- Arduino Uno: термометр LM35 — 10 мВ на градус: напряжение на выходе, делённое на 0,01 В, и есть температура. Восемь замеров усредняются.
- Arduino Uno: джойстик KY-023 — Две оси на аналоговых входах и кнопка с внутренней подтяжкой. Вокруг центра оставлена мёртвая зона.
схема проекта в виде текста — сюда же вставляется схема из Wokwi
Справка ↗
Схема
Сборка ещё не запускалась.
Печатайте в Serial числа — они станут графиком.
Serial.println(t); — один ряд,
Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями.
Формат тот же, что понимает плоттер Arduino IDE.