Сервопривод обладает тремя контактами, которые окрашены в разные цвета. Коричневый провод ведет к земле, красный – к питанию +5В, провод оранжевого или желтого цвета – сигнальный. К Ардуино устройство подключается через макетную указанным на рисунке образом. Оранжевый провод (сигнальный) подключается к цифровому пину, черный и красный – к земле и питанию соответственно. Для управления серводигателем не требуется подключение именно к шим-пинам – принцип управления серво мы уже описывали ранее.
Не рекомендуется подключать мощные серво напрямую к плате , т.к. они создают для схемы питания Arduino ток, не совместимый с жизнью – повезет, если сработает защита. Чаще всего симптомы перегрузки и неправильного питания сервопривода заключаются в “дергании” серво, неприятному звуку и перезагрузке платы. Для питания лучше использовать внешние источники, обязательно объединяя земли двух контуров.
Управление сервоприводом напрямую через изменение в скетче длительности импульсов – достаточно нетривиальная задача, но у нас, к счастью, есть отличная библиотека Servo, встроенная в среду разработки Arduino. Все нюансы программирования и работы с сервоприводами мы рассмотрим в отдельной статье. Здесь же приведем простейший пример использования Servo.
Алгоритм работы прост:
Для начала мы подключаем Servo.h
Создаем объект класса Servo
В блоке setup указываем, к какому пину подключен серво
Используем методы объекта обычным для C++ способом. Самым популярным является метод write, которому мы подаем целочисленное значение в градусах (для сервопривода 360 эти значения будут интерпретироваться по-другому).
Пример проекта, в котором мы сразу сначала устанавливаем серводвигатель на нулевой угол, а затем поворачиваем на 90 градусов.
#include <Servo.h>
Servo servo; // Создаем объект
void setup() {
servo.attach(9); // Указываем объекту класса Servo, что серво присоединен к пину 9
servo1.write(0); // Выставляем начальное положение
}
void loop() {
servo.write(90); // Поворачиваем серво на 90 градусов
delay(1000);
servo.write(1800);
delay(100);
servo.write(90);
delay(1000);
servo.write(0);
delay(1000);
}
А в этом примере мы работаем сразу с двумя сервоприводами:
#include <Servo.h>
Servo servo1; // Первый сервопривод
Servo servo2; // Второй сервопривод
void setup() {
servo1.attach(9); // Указваем объекту класса Servo, что серво присоединен к пину 9
servo2.attach(10); // А этот servo присоединен к 10 пину
}
void loop() {
// Выставялем положения
servo1.write(0);
servo2.write(180);
delay(20);
// Меняем положения
servo2.write(0);
servo1.write(180);
}
В этом примере поворачиваем серво в зависимости от значения, полученное от потенциометра. Считываем значение и преобразовываем его в угол с помощи функции map:
//Фрагмент стандартного примера использования библиотеки Servo
void loop() {
val = analogRead(A0); // Считываем значение с пина, к которому подключен потенциометр
val = map(val, 0, 1023, 0, 180); // Преобразуем число в диапазоне от 0 до 1023 в новый диапазон - от 0 до 180.
servo.write(val);
delay(15);
}