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

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

Сегодня мы поговорим про серводвигатели или сервоприводы, можно сказать и так и так.
Рассмотрим 2 модели двигателей.

  1. С фиксированным углом 180° градусов
  2. Сервопривод непрерывного вращения на 360° градусов.

Напишем простой скетч для управления движением одной и двумя сервами.

 

Если вы посмотрите видео, то там показано как я подключил лазер и управлял им двумя сервоприводами. И даже нарисовал квадрат. Правда на камеру снялось не очень хорошо, но движения были ровными и прямые и углы были чётко выражены.

Так что же такое сервопривод?
Сервопривод — это механизм с электромотором и с управлением обратной связи, который может вращать механический привод на заданный угол с заданной скоростью.

Отличия сервопривода от шагового мотора.

  • Шаговый двигатель просто считает «шаги», сколько он должен прошагать в секунду, чтобы оказаться в месте назначения.

Его недостатки - это возможность потери шагов при больших нагрузках.

  • В сервоприводах используется механизм обратной связи, поэтому он может обрабатывать ошибки и исправлять их.

Такая система называется следящей. Про шаговый двигатель я уже делал видео, посмотреть можно на моём канале.
Наиболее популярны типы сервоприводов:

  • сервоприводы которые удерживают заданный угол
  • сервоприводы поддерживающие заданную скорость вращения.

Устройство сервопривода

Управлять сервоприводом можно вручную, т.е. написав код самому или с помощью библиотеки Servo.h входящей в состав ARDUINO IDE, или библиотеки Servo2.h, если вам необходимо работать с  приёмниками/ передатчиками работающими на частоте 433 МГц.
Библиотека VirtualWire.h используют одно и то же прерывание, что и Servo.h. Это означает, что их нельзя использовать в одном проекте одновременно.

Мы рассмотри вариант с библиотекой, так как он намного проще.

Подключение сервопривода к Ардуино.
Сервопривод обладает тремя контактами, провода которые идут к ним окрашены в разные цвета.

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

Схема подключения сервомотора к Ардуино

Не рекомендуется подключать мощные сервоприводы напрямую к плате , т.к. они потребляют большой ток, что может вывести из строя вашу Ардуино или вызовут другие симптому, например перегрузку платы или постоянном “дергании” сервопривода.
Для питания лучше использовать внешние источники, обязательно объединяя земли двух контуров.

Ограничение по количеству подключаемых сервоприводов
На большинстве плат Arduino библиотека Servo.h поддерживает управление не более 12 сервоприводами, на Arduino Mega это число вырастает до значения 48.
При этом есть небольшой побочный эффект использования этой библиотеки: если вы работаете не с Arduino Mega, то становится невозможным использовать функцию analogWrite() на 9 и 10 контактах независимо от того, подключены сервоприводы к этим контактам или нет.

Управление движением сервопривода
Управление движением сервопривода зависит от длинны импульсов.
Частота импульсов 50Гц. - это значит, что импульс срабатывает каждые 20мс.
Длительность импульса.

  • 1520мкс = 90 градусов среднее положение
  • 544мкс = 0 градусов
  • 2400мкс = 180 градусов

положение вала сервомотроа

В библиотеке Servo.h для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.
Плата управления анализирует сигнал на управляющем проводе, и если информация об угле поворота содержащаяся в сигнале отличается от фактического положения вала, то он поворачивается до тех пор, пока его положение не сравняется с заданным.
Скорость перемещения можно изменять либо путем изменения задержки между шагами функцией delay(), либо путем изменения шага, а именно правкой последнего значения в аргументах цикла — for (pos = 180; pos >= 0; pos -= 1)

Сервопривод SG90.

сервопривод SG90
Характеристики и подключение SG-90
Если вы собрались купить самый дешевый и простой сервопривод, то SG 90 будет лучшим вариантом. Этот сервопривод чаще всего используется в управлении небольшими легкими механизмами с углом поворота от 0° до 180°.

Технические характеристики SG90:

  • Скорость отработки команды 0,12с/60 градусов;
  • Питание 4,8В; Питание 5 вольт допустимо.
  • Рабочие температуры от -30°С до 60°С;
  • Размеры 3,2 х 1,2 х 3 см;
  • Вес 9 г.

Описание SG90.

Скорость поворота - это время поворота на угол 60°;
Крутящий момент (кг/см) - эта величина говорит о том, какой вес в килограммах выдерживает двигатель, при длине рычага в 1 см от вала;
Напряжение питания и потребляемый ток;

Такой сервопривод стоит недорого, поэтому он не обеспечивает точных настроек начальных и конечных позициях.
Для того, чтобы избежать  лишних перегрузок и характерного треска, в положении 0° и 180° градусов лучше выставлять крайние точки в 10° и 170°.
При работе устройства важно следить за напряжением питания.
При сильной нагрузке могут повредиться механические элементы зубчатых механизмов, т.к. они пластмассовые.

Сервопривод непрерывного вращения на 360 градусов.

Сервопривод MG995

сервопривод MG995
Сервопривод MG995 является второй по популярности моделью сервоприводов, чаще всего подключаемых к проектам Arduino. Это относительно недорогие сервоприводы, обладающие гораздо лучшими характеристиками по сравнению с SG90. Они выпускаются в двух модификациях, как обычные сервопривода, так и сервоприводы непрерывного вращения. В таком варианте управлять поворотом на определённый угол очень затруднительно, а управлять можно только скоростью и направлением вращения.
При этом важно отметить, что такой сервопривод не может поворачиваться на определенный угол и делать строго заданное количество оборотов.

#include <Servo.h>
Servo myservo;
void setup(){
myservo.attach(9);
myservo.write(90);
}
void loop(){
}

 Отличие сервоприводов непрерывного вращения отличается в том, что функция Servo.write(angle) задаёт не угол, а скорость вращения привода:

Функция Arduino

Сервопривод 180°

Сервопривод 360°

Servo.write(0)

Крайне левое положение

Полный ход в обратном направлении

Servo.write(90)

Среднее положение

Остановка сервопривода

Servo.write(180)

Крайне правое положение

Полный ход в прямом направлении

положение вала сервомотра

Например.
Функция Servo.write(0) заставит сервопривод вращаться против часовой стрелки на полной скорости.
Функция Servo.write(90) остановит двигатель, а
Servo.write(180) будет вращать вал по часовой стрелке на полной скорости.

Описание работы скетчей показанных в видео, которые можно скачать в описании к видео.

Servo1
Подключаем сервомотор к пину 9 и программируем его на движение
Устанавливаем в нулевое положение
Затем двигаем на 90° градусов
Потом ещё на 90° и оказываемся в положении 180° градусов. Это максимально значение для этого сервомотора.
Потом возвращаемся в 90°, а затем снова в начальное положение.
В ноль.

Servo2
Подключаем два сервомотора.
Первый к пину 9 , второй к пину 10
Первую серву устанавливаем в начальное положение 0°, а вторую 180°.
Теперь если поставить их рядом то они будут двигаться в противоположных направлениях.

Servo3
Подключаем два сервомотора.
Первый к пину 9 , второй к пину 10
И подключаем два потенциометра по 10 кОм каждый.
Два крайних вывода подключаем к питанию.
Один к плюсу. Другой к земле.
А средний контакт к Аналоговому входу А 1, другой к А 2
Первую и вторую серву устанавливаем в начальное положение 0°.
Теперь можно управлять движением обоих сервомоторов просто вращая потенциометры.

Теперь посмотрим другой тип сервоприводов, а именно сервоприводы с непрерывным вращением.
Они могут вращаться на 360 градусов, но у них есть недостаток, они не могут повернуться на определённый угол.
У них можно управлять только скоростью вращения.

Servo4
Для Сервомоторов с непрерывным вращением также используется библиотека Servo.h
Только управление происходит не по градусам, а управляется скоростью.
90° это полная остановка,
А 0° и 180° это максимальные значения в одну и другую сторону.
В примере показано, что сначала мотор двигается с максимально скоростью против часовой стрелки 4 секунды.
Затем останавливается и ждёт 2 секунды.
Затем плавно ускоряется по часовой стрелке до максимума.
Потом остановка, и всё сначала.

Servo5
Теперь попробуем нарисовать лазером прямоугольник.
Для этого подключим лазер, Он подключается как обычный светодиод.
Если вы не знаете как подключить светодиод, то можете посмотреть моё видео, я там подробно описал как это сделать.
Если вы смотрели предыдущие примеры, то для вас это не составит труда.
В вкратце. Здесь в циклах for() мы даём команду сервомотору двигаться по определённому пути.

УПРАВЛЕНИЕ ЛАЗЕРОВ СЕРВОДВИГАТЕЛЕМ

Servo6
Просто движение сервомоторов от минимальной до максимальной скорости.
В этом примере я изменил скорость вращения в цикле for().
Теперь он будет делать по 3 шага вместо 1.


Servo7
Управление через COM
Здесь я передаю градусы поворота.
Первые - это для первого сервопривода, вторые для второго.

Смотрите в видео.

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

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

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.