В заметке Мой первый радиоуправляемый робот на 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 . На сайте arduino-kit.ru подается тот же MeArm, но это более поздняя версия, чем у меня. Есть предложения и на AliExpress .
На сайте продавца инструкция по сборки, к сожалению, оказалась не полной. В итоге собирал по этой инструкции . Если у вас немного другая версия MeArm, уверен, вы без труда найдете инструкцию по сборке и для нее. Робо-рука собирается за один, максимум два вечера. Потребуется только крестовая отвертка и немного терпения.
Плата, что идет в комплекте, эффективно представляет собой тестер серводвигателей. Будьте осторожны, при подключении серводвигателей не перепутайте пины. Где плюс, а где минус, проще всего посмотреть по дорожкам на плате, идущим от клеммника, а затем перепроверить мультиметром.
В моей робо-руке MeArm используются серво-двигатели Tower Pro 9g SG90. Их угол поворота ограничен диапазоном от 0 до 180 градусов. Информация в сети о том, на какое напряжение они рассчитаны, весьма противоречива. По своему опыту могу сказать, что при напряжении 9 В они работают исправно.
Пример прошивки для Arduino:
#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 , и управлять робо-рукой удаленно. А еще можно поставить робо-руку на нашего гусеничного робота . Признаю, польза от такого робота будет все еще весьма сомнительной. Зато смотреться такая конструкция будет просто потрясающе, поражая юные умы будущих изобретателей роботов своей неземной крутизной 🙂
Полную версию исходников к этой заметке вы найдете на GitHub .
Дополнение: Как я собирал свой первый квадрокоптер на базе PixHawk