Библиотека Stepper
Самая простая библиотека шаговых моторов: задать скорость, шагнуть на N шагов. Блокирует скетч на время движения.
Stepper крутит мотор через драйвер с четырьмя входами, вроде ULN2003 для 28BYJ-48 или L298N для биполярного мотора. Вызов step(n) делает n шагов и возвращается только когда они сделаны — всё это время скетч ничего больше не делает.
Для одного мотора и простых задач этого хватает. Если нужно разгоняться плавно, двигать два мотора одновременно или крутить, не останавливая остальной скетч, — берите AccelStepper. Драйверы со входами STEP и DIR, как A4988, библиотекой Stepper не управляются.
Установка и подключение
В менеджере библиотек ищите Stepper автора Arduino. Если менеджер предложит поставить зависимости — соглашайтесь. Как открыть менеджер и что делать, если библиотека не находится, — в общей статье про библиотеки.
#include <Stepper.h>Создание объекта — обычно до setup():
const int STEPS = 2048; // шагов на оборот: 28BYJ-48 с редуктором — 2048
Stepper motor(STEPS, 8, 10, 9, 11); // выводы к IN1, IN3, IN2, IN4 — именно в таком порядке
motor.setSpeed(10); // в setup(): оборотов в минутуМетоды
Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.1.3.
Stepper(int steps, int p1, int p2, int p3, int p4)- Конструктор: шагов на оборот и четыре вывода. Есть вариант с двумя выводами для драйверов с DIR и STEP-подобным управлением.
setSpeed(long rpm)- Скорость в оборотах в минуту. Для 28BYJ-48 больше 15 мотор не тянет и пропускает шаги.
step(int n)- Сделать n шагов; отрицательное — в обратную сторону. Блокирует выполнение до конца движения.
Пример
#include <Stepper.h>
const int STEPS = 2048; // 28BYJ-48 в полношаговом режиме
Stepper motor(STEPS, 8, 10, 9, 11); // IN1, IN3, IN2, IN4 драйвера ULN2003
void setup() {
motor.setSpeed(12);
}
void loop() {
motor.step(STEPS); // оборот вперёд
delay(500);
motor.step(-STEPS / 2); // пол-оборота назад
delay(500);
}Порядок выводов 8, 10, 9, 11 — не опечатка: у ULN2003 с 28BYJ-48 обмотки надо чередовать, иначе мотор дрожит на месте.
На чём попадаются
Дрожит и не крутится
Неверный порядок выводов. Для 28BYJ-48 перечисляют IN1, IN3, IN2, IN4.
Крутится, но пропускает шаги
Слишком высокая скорость или слабое питание. 28BYJ-48 питают от 5 В отдельно, не с вывода платы, и держат до 15 об/мин.
Кнопка не реагирует во время движения
step() блокирует. Дробите на короткие вызовы по нескольку шагов и проверяйте кнопку между ними — или переходите на AccelStepper.
Мотор греется в покое
Обмотки остаются под током. После движения отключайте выводы драйвера digitalWrite(LOW) на всех четырёх.