Ардуино: управление сервоприводом

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

В этом уроке мы будем работать с одним из таких актуаторов, который называется сервоприводом (или сервомашинкой). В отличие от обычного электромотора, сервопривод представляет собой сложное составное устройство, состоящее из двигателя постоянного тока, шестеренного редуктора, потенциометра и электронной схемы. Всё это позволяет сервоприводу поворачивать вал строго на заданный угол, и удерживать его. С помощью таких приводов можно, например, сделать вот такой несложный манипулятор:

hand_ck_w

1. Подключение к Ардуино

Итак, как уже говорилось выше, сервопривод славится тем, что может поворачиваться на заданный угол. Как же мы будем указывать ему этот угол? Предлагаю использовать для этой цели переменный резистор, он же — потенциометр. Будем вращать ручку потенциометра, а контроллер будет командовать сервоприводу поворачиваться на соответствующий угол.

У потенциометра есть всего три вывода. Крайние подключим к +5В и земле, а центральный к аналоговому входу A0.

У сервопривода SG90 также имеется три контакта. Обычно они окрашиваются следующим образом:

  • коричневый — земля;
  • красный — питание +5В;
  • оранжевый (или желтый) — сигнальный.

Сигнальный провод подключим в цифровому выходу №8. В итоге, получим такую схему:

servo_pot_sweep_схема

Подключать оба устройства к Ардуино Уно удобнее через макетную плату:

servo_pot_sweep_bb

2. Программа

Теперь напишем несложную программу, которая свяжет все элементы нашего аппарата строгой логикой. Все что нам требуется от контроллера — это:

  • считывать показания с потенциометра в диапазоне от 0 до 1023;
  • преобразовывать полученное число в угол от 0 до 180 градусов;
  • передавать полученный угол на сервопривод.

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

servo_pot_sweep_blocks

Нажав в конструкторе кнопку «Arduino», откроем страницу с исходным кодом программы для среды Arduino IDE:

#include <Servo.h>

Servo servos[13];

void setup(){
}

void loop(){
  servos[8].attach(8);
  servos[8].write((map(analogRead(A0), 0, 1024, 0, 180)));
  delay(50);
}

Как видно из программы, для управления сервоприводом мы использовали библиотеку Servo. В этой библиотеке есть несколько полезных нам функций:

  • attach(номер_вывода) — инициализация сервопривода;
  • write(угол) — поворот сервопривода на заданный угол;
  • read() — получение текущего угла сервопривода.

Для отображения множества чисел 0 — 1023 в множество 0-180, конструктор применил функцию map. Ту же самую операцию, можно было осуществить с помощью выражения:

int angle = (value / 1023.0) * 180;

Загружаем программу на Ардуино Уно, и смотрим что получилось!

servo_sweep_300

Теперь, вы знаете что такое сервопривод, и можете легко им управлять. Вперед! К созданию роботов-манипуляторов и шагающих роботов-пауков!


Изменено:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *