Остался от старого принтера Epson шаговик, решил попробовать управлять им.
Детали (в моем случае):
- Arduino UNO R3
- Adafruit motor shield
- Шаговый двигатель униполярный EM-210 от принтера Epson
- Блок питания на 12В (пробовал крону - не хватает тока)
- Соединительные провода
Порядок действий:
- Скачал AFMotor.zip, распаковал в папку libraries (которая внутри Arduino IDE)
- Подключил Ардуино к компьютеру и загрузил следующий скетч, чтобы было только движение вперед:
#include <AFMotor.h> AF_Stepper motor(48, 2); void setup() { Serial.begin(9600); // скорость порта в 9600 bps Serial.println("Stepper test!"); motor.setSpeed(3); // 3 оборота в минуту } void loop() { motor.step(100, FORWARD, SINGLE); //100 шагов вперед delay(100); }
- Убрал пермычку с шилда и подключил к нему отдельное питание 12В. Перемычку убрал, чтобы разделить питание шилда от Ардуины.
- Сединил как на фото, к выходу М3М4 провода оранжевый-синий-коричневый-красный-белый. На моторе два одинаковых коричневых провода соединил вместе и к земле подключил. Остальные провода экпериментально подбирал: в программе оставил только движение вперед и скорость поменьше поставил (motor.setSpeed(3);) Повороты были хаотичные, и только при такой последовательности движение стало последовательно.
- Загрузил дополеннный скетч (крутит обычным шагом вперед и назад, затем микрошагом вперед и назад):
#include <AFMotor.h> AF_Stepper motor(48, 2); //скорость мотора 48 шагов за оборот, подключение к порту №2 (M3 и M4) void setup() { Serial.begin(9600); // скорость порта Serial.println("Stepper test!"); motor.setSpeed(40); // 40 rpm } void loop() { Serial.println("Single coil steps"); Serial.println(" FORWARD, SINGLE"); motor.step(96, FORWARD, SINGLE); //вперед delay(1000); Serial.println(" BACKWARD, SINGLE"); motor.step(96, BACKWARD, SINGLE); //назад delay(1000); Serial.println("Micrsostep steps"); Serial.println(" FORWARD"); motor.step(96, FORWARD, MICROSTEP); delay(1000); //микрошагами вперед Serial.println(" BACKWARD"); motor.step(96, BACKWARD, MICROSTEP); delay(1000); //микро назад }
- Если необходимо отключиться от компьютера, то перемычку вернуть на место, чтоб внешнее питание распространялось и на Ардуину.
P.S. Вариант программы, позволяющей менять скороть двигателя, посылая значение скорости через компьютер. Для открытия управлящего терминала в Arduino IDE нажать CTRL-SHIFT-M
#include <AFMotor.h> AF_Stepper motor(48, 2); int mspeed = 1; //Переменная void setup() { Serial.begin(4800); // set up Serial library at 9600 bps Serial.println("Stepper test! input 1-9 speed of motor."); motor.setSpeed(40); //RPM скорость } void loop() { if (Serial.available() > 0) { //если есть доступные данные mspeed = Serial.read() - 48; // считываем байт и переводим в число } motor.step(1, FORWARD, MICROSTEP); Serial.println(mspeed); motor.setSpeed(mspeed * 10); }
Полезные ссылки: