Подключаем шаговый двигатель к Arduino
Итак, в наличие имеются Arduino Mega 2560, униполярный шаговый двигатель 28BYJ-48, контроллер для него(ULN2003), куча проводов и желание все это попробовать.
Для начала подключаем все это. Белый разъем от шагового двигателя вставляем в такой-же разъем на контроллере. Перепутать сложно. Далее самое интересное. Подключаем контроллер шаговика к плате arduino:
Для тестов +5 и -5 из драйвера можно подключить к выходам ардуино (как на схеме выше). Но в реальной работе нужно подключить внешний источник. Входы In1, In2, In3, In4 подключаем в последовательности 1-3-2-4 (3 5 4 6 контакты ардуино), либо можно поменять эти пины в коде при инициализации двигателя. Все этого достаточно.
Далее пишем простенький пример:
Для микроконтроллеров вполне подходит и C++
Заливаем скетч на плату и мотор начинает вращаться, задорно мигая светодиодами контроллера.
Следует учесть, что метод step() стандартной ардуиновской библиотеки Stepper блокирует поток управления. Так что просто вращать несколькими моторами одновременно не получится.
Где это можно применить?
Шаговый двигатель 28BYJ-48 и контроллер ULN2003 |
Для начала подключаем все это. Белый разъем от шагового двигателя вставляем в такой-же разъем на контроллере. Перепутать сложно. Далее самое интересное. Подключаем контроллер шаговика к плате arduino:
Для тестов +5 и -5 из драйвера можно подключить к выходам ардуино (как на схеме выше). Но в реальной работе нужно подключить внешний источник. Входы In1, In2, In3, In4 подключаем в последовательности 1-3-2-4 (3 5 4 6 контакты ардуино), либо можно поменять эти пины в коде при инициализации двигателя. Все этого достаточно.
Далее пишем простенький пример:
Для микроконтроллеров вполне подходит и C++
#include <Stepper.h>
const int StepsPerRevolution = 64;
const int VariationRatio = 32;
const int TotalSteps = StepsPerRevolution * VariationRatio;
Stepper stepper(TotalSteps, 3, 4, 5, 6);
void setup()
{
stepper.setSpeed(10);
}
void loop()
{
int stepsForward = TotalSteps / 2;
stepper.step(stepsForward);
delay(500);
int stepsBackward = - TotalSteps / 2;
stepper.step(stepsBackward);
delay(500);
}
Тут мы просто вращаем двигателем на пол-оборота по часовой стрелке (положительные числа в методе step), а после этого - против часовой стрелки (отрицательные числа).Заливаем скетч на плату и мотор начинает вращаться, задорно мигая светодиодами контроллера.
Где это можно применить?
Подскажите. Возможно ли заставить этот двигатель вращать круглую платформу допустим на 10градусов. останавливаться. потом замыкать кнопку спуска на вотоаппарате... делать паузу и сново вращаться. и повторять действия до полного поворота платформы?
ОтветитьУдалитьКонечно можно. Но стоит учитывать, что у любого редуктора есть люфт. Так что если конкретный угол критичен, то стоит взять сервомотор подороже с высокой угловой разрешающей способностью. В принципе кое как можно устранить люфт с помощью пружины. Тогда редуктор всегда будет в "натянутом" положении
ОтветитьУдалитьА как применить пружину?
ОтветитьУдалитьА как управлять двумя шаговыми двигателями?
ОтветитьУдалить