← На главную

Управление серводвигателями на примере робо-руки MeArm

В заметке Мой первый радиоуправляемый робот на Arduino мы познакомились с электродвигателями и научились управлять ими при помощи микроконтроллера. Серводвигатель (он же сервопривод, сервомотор или сервомашинка) – не менее полезное механическое устройство. В отличие от электродвигателя, который постоянно крутится, или, если питание не подано, не крутится, серводвигатель умеет поворачивается на заданный угол (часто от 0 до 180 градусов) и оставаться в таком положении. Просто так управлять одним серводвигателем не очень-то интересно, поэтому давайте сразу рассмотрим пример использования четырех серводвигателей в робо-руке MeArm.

Немного теории

Серводвигатели имеют три провода:

  • Черный или коричневый – земля;
  • Красный – питание;
  • Белый или желтый – управляющий сигнал;

Питаются серводвигатели от отдельного источника питания, часто на 7-9 В, в зависимости от серводвигателя. Управление осуществляется очень просто – раз в 20 мс микроконтроллер посылает логическую единицу, длительность которой определяет угол, на который должен повернуться серводвигатель. Сигнал длительностью 0.5 мс означает крайнее левое положение, 2.5 мс означает крайнее правое, а все что посередине – промежуточные состояния. Зависимость угла поворота от длительности сигнала линейная. То есть, например, сигнал длительностью 1.5 мс соответствует прямому углу, если серводвигатель умеет поворачиваться на угол от 0 до 180 градусов.

В мире Arduino, как обычно, есть готовая библиотека под названием Servo, которая делает все описанное выше за нас. Больше теории и иллюстраций вы можете найти в Википедии.

Практика

Вернемся к робо-руке MeArm. Вот как она выглядит в собранном состоянии:

Робо-рука MeArm на базе Arduino

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: управление шаговым двигателем.