ELECTRONICS

Библиотека Stepper

менеджер: StepperArduinoверсия 1.1.3

Самая простая библиотека шаговых моторов: задать скорость, шагнуть на 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) на всех четырёх.

Где используется на сайте

Что дальше