Шаговый двигатель Arduino предназначен для точного позиционирования или перемещения объекта за определенное количество шагов вала. Плата Ардуино может управлять шаговым двигателем с помощью драйвера и библиотеки stepper.h. Рассмотрим принцип работы stepper motor, схему подключения шагового двигателя к Arduino, разберем управление шаговым двигателем 28BYJ-48 с помощью модуля UNL2003.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- шаговый двигатель 28BYJ-48
- драйвер шагового двигателя ULN2003
- коннекторы
- библиотека Stepper.h
Дополнительные материалы на эту тему:
Двигатель 28BYJ-48 с модулем UNL2003 — это бесщеточный синхронный двигатель. Как и все двигатели, он преобразует электрическую энергию в механическую. В отличие от двигателя постоянного тока, в котором вращается вал, вал шагового двигателя совершает дискретные движения, т.е. вращается не непрерывно, а пошагово. Каждый шаг вала (ротора) у stepper motor представляет собой часть полного оборота.
Шаговый двигатель принцип работы, устройство

шаговый мотор 28BYJ-48 характеристики
- Напряжение питания: 5В или 12В
- Число фаз: 4
- Номинальная скорость вращения: 15 оборот/мин
- Коэффициент редукции: 1/63.68395
- Количество шагов ротора: 64
- Крутящий момент: 450 г*см
- Размеры (диаметр,высота): 25×18 мм
В зависимости от конструкции используются три типа двигателей: с постоянными магнитами, с переменными магнитами и гибридные. В двигателях с постоянными магнитами количество шагов на один оборот вала достигает 48, т.е. один шаг соответствует повороту вала на 7,5°. Гибридные двигатели обеспечивают 400 шагов, подсчитав количество сделанных шагов, можно определить угол поворота ротора.
Вал двигателя вращается под действием сигнала, который управляет магнитным полем катушек статора двигателя. Сигнал генерируется драйвером шагового двигателя 28BYJ-48 (stepper motor). Магнитное поле, создаваемое электрическим током в обмотках статора, вращает вал, на котором установлены магниты. Количество шагов определяется в программе с помощью команд библиотеки Stepper.h.
Как подключить шаговый двигатель к Ардуино

Шаговый двигатель 28BYJ-48 с модулем UNL2003 управляется от Ардуино путем подачи импульсов на обмотки двигателя в определенной последовательности. Для облегчения управления шаговыми двигателями были созданы специальные библиотеки, но вращать вал двигателя можно и без библиотек. Подключите шаговый двигатель к микроконтроллеру, как показано на схеме выше, и загрузите следующую программу в плату.
Скетч управление шаговым двигателем Ардуино
#define in1 8
#define in2 9
#define in3 10
#define in4 11
// пауза между шагами, минимум 10 мс
int dl = 20;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(dl);
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(dl);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(dl);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, HIGH);
delay(dl);
}
Библиотека Stepper.h для шагового двигателя

Рассмотрим управление шаговыми двигателями с помощью стандартной библиотеки Stepper.h, в которой реализовано множество дополнительных команд и функций. Схема подключения двигателя остается прежней. Основные характеристики двигателя 28BYJ-48: питание 5 или 12 вольт, 4-фазный двигатель, угол шага 5,625°. Порты драйвера IN1 — IN4 подключаются к любому цифровому выводу микроконтроллера Arduino.
Скетч управление 28BYJ-48 stepper motor Ардуино
#include "Stepper.h"
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup() {
myStepper.setSpeed(60);
}
void loop() {
myStepper.step(stepsPerRevolution);
delay(500);
myStepper.step(-stepsPerRevolution);
delay(500);
myStepper.step(200);
delay(2000);
myStepper.step(-300);
delay(2000);
}
Команды библиотеки Stepper.h Arduino
AccelStepper mystepper(DRIVER, step, direction); // Шаговый двигатель, управляемый платой
AccelStepper mystepper(FULL2WIRE, pinA, pinB); // Шаговый двигатель с Н-мостом
AccelStepper mystepper(FULL4WIRE, pinA1, pinA2, pinB1, pinB2); // Униполярный двигатель
mystepper.setMaxSpeed(stepsPerSecond); // Установка скорости оборотов в минуту
mystepper.setSpeed(stepsPerSecond); // Установка скорости в шагах за секунду
mystepper.setAcceleration(stepsPerSecondSquared); // Установка ускорения
mystepper.currentPosition(); // Возвращает текущее положение в шагах
mystepper.setCurrentPosition (long position); // Обнуляет текущую позицию до нуля
mystepper.targetPosition(); // Конечное положение в шагах
mystepper.distanceToGo(); // Вернуть расстояние до указанного положения
mystepper.moveTo(long absolute); // Переместиться в абсолютно указанное положение
mystepper.move(long relative); // Переместиться в относительно указанное положение
mystepper.run(); // Начать движение с ускорением, функцию следует вызывать повторно
mystepper.runToPosition(); // Начать движение до указанной точки
mystepper.runToNewPosition(); // Начать движение с ускорением до заданной позиции
mystepper.stop(); // Максимально быстрая остановка (без замедления)
mystepper.runSpeed(); // Начать движение с заданной скоростью без ускорения
mystepper.runSpeedToPosition(); // Начать движение без ускорения, до позиции
mystepper.disableOutputs(); // Деактивирует зарезервированные пины и устанавливает их в режим LOW. Снимает напряжение с обмоток двигателя, экономя энергию
mystepper.enableOutputs(); // Активирует зарезервированные пины и устанавливает их в режим OUTPUT. Вызывается автоматически при запуске двигателя
Заключение. Шаговый двигатель является идеальным приводом в 3D-принтерах, станках с ЧПУ и другом оборудовании. Соединение между модулем контроллера и двигателем 28BYJ-48 является простым, поскольку имеется разъем, который служит для направления соединения между устройствами. Модуль UNL2003 Arduino имеет четыре диода, которые показывают, какая катушка у stepper motor активна в каждый момент времени.
FAQ (часто задаваемые вопросы)
Какая используется библиотека для 28BYJ-48 ?
Для шагового двигателя 28BYJ-48 с модулем UNL2003 используется библиотека Stepper.h, ссылка на скачивание архива с библиотекой размещена в начале статьи.
Ошибка fatal error Stepper.h No such file or directory ?
Если при компиляции скетча появляется ошибка «Stepper.h No such file or directory», то это значит, что отсутствует библиотека Stepper.h в Arduino IDE. Следует скачать и установить библиотеку для двигателя, которая используется в программе.
Почему шаговый двигатель греется в состоянии покоя ?
При выключении двигателя с помощью команды mystepper.stop(); не все катушки двигателя отключаются от питания (на модуле UNL2003 будут гореть диоды). При остановке включается режим удержания положения ротора — это штатный режим работы библиотеки, но при этом шаговый двигатель будет греться и тратить энергию. Чтобы полностью отключить питание, следует перевести все пины Ардуино в режим LOW.

В уроке допущена неточность.
Как понимаю, библиотека stepper.h — стандартная из arduino ide, базовая. Со скудным функционалом команд.
Библиотека accelstepper.h куда богаче по возможностям, но базовой не является, и её нужно устанавливать дополнительно.