Подключаем сервопривод к Arduino

Серия-статей: Программирование Arduino с нуля #4

Серия-статей: Arduino, использование сервоприводов #1

Маломощный сервопривод на 3,2 кг⋅см Одним из самых распространнных деталей для создания роботов является сервопривод. Фактически это небольшой электродвигатель с редуктором и встроенным потенциометром. Потенциометр подключен к выходному валу, и вместе с его поворотом меняет свое сопротивление – соответственно в любой момен времени можно узнать о положении вала. В отличие от обычного двигателя встроенная электроника приводит в движение мотор таким образом, чтобы его положение соответствовало заданному значению

Обычно сервоприводы не расчитаны на полный оборот, вал может поворачиваться на ограниченный угол (чащевсего 180 градусов). Этого вполне достаточно, чтобы управлять рулевыми колесами или магипулятором. Поэтому и примеяют сервоприводы чаще всего для шарниров. Основным показателем мощности сервопривода является крутящий момент, обычно выражается в кг⋅см. Для длинных манипуляторов, которые должны подымать приличный вес, уже потребуются сервоприводы с крутящим моментом 30-40 кг⋅см и больше. Если же мы хотим с помощью нашего сервопривода совершать не очень тяжелую работу, то вполне достаточно самых простейших, на 1,8 или 3,2 кг⋅см.

Схема вычислениякрутящего момента сервопривода Вообще, крутящий момент выражается в Н⋅м. Но для большей простоты вычислений его часто приводят к в кг⋅см (1 кг⋅см ~ 0.01 кг⋅м ~ 0.098 Н⋅м) Это усилие, которое может обеспечить сервопривод на определенном расстоянии от оси вращения. Т.е, например сервопривод с моментом 4 кг⋅см может поднять груз в 4 кг, в 1см от оси, или 400 грамм, но уже на расстоянии 10 см от оси. Если мы хоти сделать манипулятор, то нужно прикинуть вес движущихся частей и подбирать соответствующие сервоприводы для каждого сустава.

Подключается сервопривод с помощью трех проводов – стандартной пары из питания и заземления и одного управляющего. Для маломощных сервоприводов все три можно подключать к контроллеру напрямую. Но если мы используем много сервоприводов или несколько, но мощных, то возможностей контоллера будет уже не хватать. Нужно подключать к контроллеру только управляющий вывод, а питание на остальные подавать независимо.

Для более удобного подключения большго количества сервоприводов есть специальные платы расширения, на которых контакты для каждого сервопривода уже собраны в группы по три, что сильно упрощает подключение. Но это для сложных проектов, например паукообразных роботов, где каждый сустав ног управляется отдельно. Мы же рассмотрим простейший вариант с одним сервоприводом, подключенным напрямую к контроллеру.

Запитываем сервопривод от пина “5V” (красный провод), землю подключаем к пину “Gnd” (черный провод). Управление (белый провод) можно подключить к любому из свободных выходов, например к пину номер 2 (выходов контроллера 0 и 1 используются для связи по последовательному интерфейсу, поэтому использовать их не рекомендуется)

Схема подключения сервопривода к Arduino

Для управления сервоприводом используется стандартынй класс Servo. Нам требуется процедура attach(), которая служит для инициализации сервопривода и write(), для управления его движением:

#include // Подключаем библиотеку для работы с сервоприводом

Servo servo1; // Создаем один объект типа «сервопривод»

void setup()

{

servo1.attach(2); // Объясняем контроллеру, что управляющий провод сервопривода подключен к пину 2

servo1.write(90); // Даем команду сервоприводу принять положение в 90 градусов,которое соответствует среднему положению

}

void loop()

{

}

При запуске нашей программы подключнный сервопривод примет положение в 90 градусов. Если он уже в нем, то ничего не произойдет. Попробуем плавно поменять положение от минимального к максимальному:

Servo servo1; // Создаем один объект типа «сервопривод»

void setup()

int angle = 0; // Переменная,в которой хранится положение сервопривода

{

servo1.attach(2); // Объясняем контроллеру, что управляющий провод сервопривода подключен к пину 2

}

void loop()

{

For (angle = 0; angle <= 180; angle += 1) // Начинаем движение с 0 до 180 градусов

{

servo1.write(pos); // Даем команду сервоприводу принять новое положение

delay(10); // Делаем паузу перед следующим перемещением

}

}

Задержка в 10 мс дает поворот на 1 градус за 10 мс, т.е за 1 секунду мы повернем на 1000/10=100 градусов, а есь цикл займет 1.8 секунды.

Зкроме того нам необходимо иметь отдельную переменную, в которой будет храниться текущее положение сервопривода. Дело в том, что контроллер не может знать, в каком положении сейчас находится сервопривод. Несмотря на наличие потенциометра, который измеряет текущий угол поворота, эти данные используются только внутренней электроникой самого сервопривода. Мы можем только подать команду занять нужное положение. Поэтому нужно отдельно записвать каждое изменение положения в соответствующую переменную, которую будем использовать, если нам необходимо что-то вычислить исходя из текущего положения сервопривода

Еще:

Программирование контроллеров – с чего начать (Программирование Arduino с нуля #1)
Подключение периферии, платы расширения (Программирование Arduino с нуля #2)
Организация питания для Arduino (Программирование Arduino с нуля #3)
Программное ограничение перемещения сервопривода (Arduino, использование сервоприводов #4)
Подключение шагового двигателя. Контроллер L298 (Программирование Arduino с нуля #8)
Подключаем сервопривод к Arduino (Программирование Arduino с нуля #4)
Создаем класс для управления сервоприводом (Программирование Arduino с нуля #6)