Arduino и серводвигатели - основы
В данном примере мы рассмотрим основы управления серводвигателями с помощью Arduino.
Сфера применения серводвигателей в моделировании и производстве очень обширна. В основном они используются для приводов позиционирования, так как обеспечивают высокую точность поворота ротора и его выхода в позицию. Естественно, практически ни один «живой» робототехнический проект без серводвигателей не обойдется.
Необходимые материалы
- Плата Arduino Uno R3
- Макетная плата
- Переходники
- 2 микро-серводвигателя (вал поворачивается на 180 градусов). Можно и один. Это не принципиально.
- 2 серводвигателя с возможностью вращения ротора на 260 градусов. Также достаточно одного.
- Потенциометр
Подключение потенциометра
Советую более детально ознакомиться с этим примером, если вы подключаете потенциометр к Arduino впервые. Впрочем, в его подключении ничего сложного нет.
Средний контакт потенциометра подключается к аналоговому пину A0 (синий), два боковых контакта – к земле (черный) и питанию 5 вольт (красный).
Подключение серводвигателей
Обратите внимание, что никакой разницы между подключением серводвигателей с поворотом ротора на 360 градусов и на 180 нет. Вообще, любой серводвигатель имеет три выхода – земля (в данном случае, на схеме – черный, на приводах может быть коричневым), питание (красный, но может быть и оранжевым) и сигнал (белый или желтый на сервах, на схеме обозначен синим).
Единственное, на что стоит обратить внимание: подключаются сервы только к ШИМ-выходам. На плате Arduino Uno их шесть: пины 3, 5, 6, 9, 10, 11. В нашем примере и скетче прописаны пины 3, 5, 10, 11/
Программирование платы
Можете просто скопировать и вставить этот кусок кода в оболочку Arduino IDE. С помощью данной программы вы сможете управлять вращением ротора серводвигателя, подключенного к 10 пину вашей платы. Обратите внимание, что в скетче использована встроенная библиотека Servo.h.
#include <Servo.h>
Servo myservo;
int potpin = 0;
int val;
void setup()
{
myservo.attach(10); // меняем это значение для управления двигателями,
которые подключены к другим пинам
}
void loop()
{
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 179);
myservo.write(val);
delay(15);
}
Аналогичным образом мы можем реализовать управление остальными приводами. Учтите, что если вы захотите запустить их одновременно, вам может не хватить силы тока и привода просто не сдвинутся. Ну или вообще может сгореть плата (что, впрочем, маловероятно ;)). Для одновременного запуска всех приводов необходим дополнительный источник питания, который выдаст больше, чем 1 A, который максимально пропускает плата Arduino.