Управление серводвигателями на примере робо-руки MeArm
В заметке Мой первый радиоуправляемый робот на Arduino мы познакомились с электродвигателями и научились управлять ими при помощи микроконтроллера. Серводвигатель (он же сервопривод, сервомотор или сервомашинка) – не менее полезное механическое устройство. В отличие от электродвигателя, который постоянно крутится, или, если питание не подано, не крутится, серводвигатель умеет поворачивается на заданный угол (часто от 0 до 180 градусов) и оставаться в таком положении. Просто так управлять одним серводвигателем не очень-то интересно, поэтому давайте сразу рассмотрим пример использования четырех серводвигателей в робо-руке MeArm.
Немного теории
Серводвигатели имеют три провода:
- Черный или коричневый – земля;
- Красный – питание;
- Белый или желтый – управляющий сигнал;
Питаются серводвигатели от отдельного источника питания, часто на 7-9 В, в зависимости от серводвигателя. Управление осуществляется очень просто – раз в 20 мс микроконтроллер посылает логическую единицу, длительность которой определяет угол, на который должен повернуться серводвигатель. Сигнал длительностью 0.5 мс означает крайнее левое положение, 2.5 мс означает крайнее правое, а все что посередине – промежуточные состояния. Зависимость угла поворота от длительности сигнала линейная. То есть, например, сигнал длительностью 1.5 мс соответствует прямому углу, если серводвигатель умеет поворачиваться на угол от 0 до 180 градусов.
В мире Arduino, как обычно, есть готовая библиотека под названием Servo, которая делает все описанное выше за нас. Больше теории и иллюстраций вы можете найти в Википедии.
Практика
Вернемся к робо-руке MeArm. Вот как она выглядит в собранном состоянии:
MeArm является открытым проектом (KickStarter, GitHub) и потому его можно как изготовить самостоятельно, так и купить готовый набор для сборки. В России комплект для сборки MeArm можно купить, например, на lartmaster.ru, а также chipdip.ru. Также есть предложения на AliExpress.
На сайте продавца инструкция по сборки, к сожалению, оказалась не полной. В итоге собирал по этой инструкции. Если у вас немного другая версия MeArm, уверен, вы без труда найдете инструкцию по сборке и для нее. Робо-рука собирается за один, максимум два вечера. Потребуется только крестовая отвертка и немного терпения.
Плата, что идет в комплекте, эффективно представляет собой тестер серводвигателей. Будьте осторожны, при подключении серводвигателей не перепутайте пины. Где плюс, а где минус, проще всего посмотреть по дорожкам на плате, идущим от клеммника, а затем перепроверить мультиметром.
В моей робо-руке MeArm используются серво-двигатели Tower Pro 9g SG90. Их угол поворота ограничен диапазоном от 0 до 180 градусов. Информация в сети о том, на какое напряжение они рассчитаны, весьма противоречива. По своему опыту могу сказать, что при напряжении 9 В они работают исправно.
Пример прошивки для Arduino:
#include <Arduino.h>
#include "Servo.h"
#define DELAY_MS 20
Servo s1;
Servo s2;
Servo s3;
Servo s4;
int last_report = 0;
int loop_counter = 0;
void setup()
{
s1.attach(2);
s2.attach(3);
s3.attach(4);
s4.attach(5);
}
void loop()
{
int p1val = analogRead(A0);
int p2val = analogRead(A1);
int p3val = analogRead(A2);
int p4val = analogRead(A3);
loop_counter++;
if(loop_counter >= 1000 / DELAY_MS)
{
/* Skipped: print some debug info */
loop_counter = 0;
}
s1.write(map(p1val, 0, 1023, 0, 179));
s2.write(map(p2val, 0, 1023, 85, 179));
s3.write(map(p3val, 0, 1023, 50, 155));
s4.write(map(p4val, 0, 1023, 4, 23));
delay(DELAY_MS);
}
Здесь считывается текущее положение четырех потенциометров, затем четыре серводвигателя поворачиваются на соответствующий угол. Угол поворота серводвигателей ограничивается при помощи процедуры map в соответствии с физическими ограничениями MeArm. Серводвигатели лишний раз лучше не перегружать, иначе могут лопнуть зубчики у используемых в них пластиковых шестеренок. В этом случае серводвигатель придет в негодность.
Заключение
Как видите, все очень просто. При желании можно взять пару радиомодулей, например, NRF24L01, и управлять робо-рукой удаленно. А еще можно поставить робо-руку на нашего гусеничного робота. Признаю, польза от такого робота будет сомнительной. Зато смотреться конструкция будет просто потрясающе, поражая юные умы будущих изобретателей своей неземной крутизной.
Полную версию исходников к посту вы найдете в этом архиве.
Дополнение: Также вас могут заинтересовать посты Как я собирал свой первый квадрокоптер на базе PixHawk и Микроконтроллеры STM32: управление шаговым двигателем.