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

20 марта 2017

В заметке Мой первый радиоуправляемый робот на 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. На сайте arduino-kit.ru подается тот же MeArm, но это более поздняя версия, чем у меня. Есть предложения и на 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, и управлять робо-рукой удаленно. А еще можно поставить робо-руку на нашего гусеничного робота. Признаю, польза от такого робота будет все еще весьма сомнительной. Зато смотреться такая конструкция будет просто потрясающе, поражая юные умы будущих изобретателей роботов своей неземной крутизной :)

Полную версию исходников к этой заметке вы найдете на GitHub.

Дополнение: Как я собирал свой первый квадрокоптер на базе PixHawk

Метки: , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.