Как сделать чтобы сервопривод вращался без остановки
Перейти к содержимому

Как сделать чтобы сервопривод вращался без остановки

  • автор:

Сервоприводы: руководство по использованию для Arduino

Сервопривод — это электродвигатель с редуктором и блоком управления в одном корпусе.

Servo Guide Arduino Info 1

Сервоприводы используются для открывания/закрывания заслонок, поворота различных механизмов на заданный градус и в качестве суставов при создании разнообразных DIY-роботов.

Servo Guide Arduino Info 2

Элементы сервопривода

Рассмотрим основные элементы сервопривода.

Servo Guide Arduino Annotation

Электромотор

За преобразование электрической энергии в механическую отвечает электромотор. В зависимости от модели, сервопривод может быть наделён одним из трёх видов моторов:

  • Коллекторный мотор с сердечником (Brush motor)
  • Коллекторный мотор без сердечника (Coreless motor)
  • Бесколлекторный мотор (Brushless motor)

Редуктор

На практике, скорость вращения мотора слишком большая, а крутящий момент — наоборот слишком маленький. Для решения двух проблем выходной вал мотора соединён с группой шестеренок, которые позволяют увеличить крутящий момент, но при этом пропорционально снизить скорость вращения выходного вала.

Шестерни редуктора могут быть пластиковые или металлические.

Servo Guide Arduino Info 3

  • Пластиковые шестерни изготавливаются из силикона или нейлона, они мало весят и мало стоят, но не способны вытягивать большие нагрузки. Сервоприводы с пластиковым редуктором довольно популярные в любительских проектах.
  • Металлические шестерни изготавливаются из латуни или меди, они много весят и много стоят, но зато способны вытягивать большие нагрузки. Сервоприводы с металлическим редуктором применяются в устройствах, где требуется мускулы и сила.

Выходной вал

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

Схема управления

Для обработки входного сигнала с внешнего контроллера в сервоприводе расположена схема управления.

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

Схема управления может быть аналоговой или цифровой.

В аналоговом сервоприводе входные данные c внешнего контроллера анализируются логической микросхемой. Аналоговый чип принимает внешние импульсы с частотой 50 Гц, а значит время реакции мотора составляет около 20 мс.

В цифровом сервоприводе входные данные анализируются собственным микроконтроллером. Контроллер принимает внешние импульсы с частотой 50 Гц, но позволяет увеличить внутреннюю частоту сигнала с 50 Гц до 500 Гц. В итоге время реакции мотора может сократится до 2 мс.

Характеристики сервопривода

Рассмотрим основные характеристики сервопривода.

Крутящий момент

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

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

  • Сервопривод удержит груз 10 кг на рычаге длиной 1 см.
  • Сервопривод удержит груз 5 кг на рычаге длиной 2 см.
  • Сервопривод удержит груз 1 кг на рычаге длиной 10 см.

Скорость поворота

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

Размеры

Servo Guide Arduino Info 4

Питание сервопривода

Напряжение к серве можно подключать двумя способами: без внешнего источника питания и с внешним источником питания.

Без внешнего источника питания

Если сервопривод питается напряжением 5 вольт и потребляет ток менее 500 мА, можно запитать сервомотор непосредственно от контроллера.

Цвет провода Контакт Функция Подключение
Оранжевый / Жёлтый / Белый S Пин управления сервоприводом Подключите к пину ввода-вывода микроконтроллера.
Красный V Питание Подключите к питанию микроконтроллера.
Коричневый / Чёрный G Земля Подключите к земле микроконтроллера.

Servo Guide Arduino Wiring Power 1

С внешним источником питания

Если сервопривод питается напряжением свыше 5 вольт или потребляет ток более 500 мА, то ему необходим внешний источник питания с соответствующими характеристиками.

Цвет провода Контакт Функция Подключение
Оранжевый / Жёлтый / Белый S Пин управления сервоприводом Подключите к пину ввода-вывода микроконтроллера.
Красный V Питание Подключите к внешнему источнику питания с подходящим напряжением.
Коричневый / Чёрный G Земля Подключите к земле внешнего источника питания и земле микроконтроллера.

Servo Guide Arduino Wiring Power 2

Сервоприводы с удержанием угла

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

Интерфейс управления

Для управления мотором с удержанием угла необходимо подавать сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. При поступлении с внешнего контроллера управляющего импульса, начинка сервопривода генерирует свой сигнал, длительность которого определяется датчиком обратной связи. Далее схема сравнивает длительность двух импульсов:

  • Если длительность разная → электромотор включается. Направление вала зависит от знака разности импульсов.
  • Если длины импульсов равны → электромотор останавливается.

В сигнале PDM частота импульсов постоянна и равна 50 Гц, т.е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит выходной угол удержания мотора. Принято считать, что диапазону выходного угла 0–180° соответствует ширина импульса 500–2500 мкс.

Период импульсов Ширина импульса Положение сервопривода
20 мс 544 мск Выходной вал установлен в максимальное положение по часовой стрелке CW — 0°.
20 мс 1540 мкс Выходной вал установлен в условную середину относительно крайних максимальных точек CW и CWW — 90°.
20 мс 2400 мкс Выходной вал установлен в максимальное положение против часовой стрелке CCW — 180°.

Примеры работы

Сервоприводы постоянного вращения

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

Интерфейс управления

Для управления мотором постоянного вращения необходимо подавать особый сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. При поступлении с внешнего контроллера управляющего импульса начинка сервопривода генерирует свой сигнал мотору.

В сигнале PDM частота импульсов постоянна и равна 50 Гц, т. е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит направление и скорость вращения мотора. Принято считать, что рабочая ширина импульса лежит в пределах 544–2400 мкс.

Период импульсов Ширина импульса Положение сервопривода
20 мс 544 мск Выходной вал вращается по часовой стрелке (CW) с максимальной скоростью.
20 мс 1540 мкс Выходной вал не вращается вовсе, т.е. стоит на месте.
20 мс 2400 мкс Выходной вал вращается против часовой стрелке (CCW) с максимальной скоростью.

Примеры работы

Список моделей в магазине

  • Микросервопривод TianKongRC TS90A
  • Микросервопривод TianKongRC TS90D
  • Микросервопривод TianKongRC MG90S
  • Микросервопривод TianKongRC MG90D
  • Микропривод постоянного вращения Tower Pro SG90
  • Микросервопривод Tower Pro SG92R
  • Сервопривод Tower Pro MG995
  • Сервопривод Tower Pro MG996R
  • Привод постоянного вращения DS04-NFC
  • Сервопривод TianKongRC TD-8120MG

Ресурсы

  • Руководство по использованию для Arduino.
  • Руководство по использованию для Raspberry Pi.

Библиотеки

  • Библиотека для Arduino
  • Библиотека для Raspberry Pi

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

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

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

Список необходимых компонентов

Для выполнения простого примера с сервомотором, потребуется Ардуино-совместимый контроллер, переменный резистор, макетная плата и немного проводов вилка-вилка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.

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

Сегодня мы поговорим про серводвигатели или сервоприводы, можно сказать и так и так.
Рассмотрим 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 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) будет вращать вал по часовой стрелке на полной скорости.

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

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
Здесь я передаю градусы поворота.
Первые — это для первого сервопривода, вторые для второго.

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

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

Работаем с сервоприводами

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

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

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

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

Кроме электромотора, редуктора и потенциометра в сервоприводе имеется электронная начинка, которая отвечает за приём внешнего параметра, считывание значений с потенциометра, их сравнение и включение/выключение мотора. Она-то и отвечает за поддержание отрицательной обратной связи.

К сервоприводу тянется три провода. Два из них отвечают за питание мотора и землю, третий доставляет управляющий сигнал, который используется для выставления положения устройства.

Servo

Крутящий момент и скорость поворота

Крутящий момент — векторная физическая величина, равная произведению радиус-вектора, проведённого от оси вращения к точке приложения силы, на вектор этой силы. Характеризует вращательное действие силы на твёрдое тело. Эта характеристика показывает, насколько тяжёлый груз сервопривод способен удержать в покое на рычаге заданной длины. Если крутящий момент сервопривода равен 5 кг×см, то это значит, что сервопривод удержит на весу в горизонтальном положении рычаг длины 1 см, на свободный конец которого подвесили 5 кг. Или, что эквивалентно, рычаг длины 5 см, к которому подвесили 1 кг.

Скорость сервопривода измеряется интервалом времени, который требуется рычагу сервопривода, чтобы повернуться на 60°. Характеристика 0,1 с/60° означает, что сервопривод поворачивается на 60° за 0,1 с. Из неё несложно вычислить скорость в более привычной величине, оборотах в минуту, но так сложилось, что при описании сервоприводов чаще всего используют такую единицу.

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

Виды сервоприводов

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

Шестерни для сервоприводов бывают из разных материалов: пластиковые, карбоновые, металлические.

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

Карбоновые шестерни более долговечны, практически не изнашиваются, в несколько раз прочнее нейлоновых. Основной недостаток — дороговизна.

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

Существует три типа моторов сервоприводов: обычный мотор с сердечником, мотор без сердечника и бесколлекторный мотор.

Обычный мотор с сердечником (справа) обладает плотным железным ротором с проволочной обмоткой и магнитами вокруг него. Ротор имеет несколько секций, поэтому когда мотор вращается, ротор вызывает небольшие колебания мотора при прохождении секций мимо магнитов, а в результате получается сервопривод, который вибрирует и является менее точным, чем сервопривод с мотором без сердечника. Мотор с полым ротором (слева) обладает единым магнитным сердечником с обмоткой в форме цилиндра или колокола вокруг магнита. Конструкция без сердечника легче по весу и не имеет секций, что приводит к более быстрому отклику и ровной работе без вибраций. Такие моторы дороже, но они обеспечивают более высокий уровень контроля, вращающего момента и скорости по сравнения со стандартными.

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

Подключение к Arduino

Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:

  • красный — питание; подключается к контакту 3.3/5V или напрямую к источнику питания
  • коричневый или чёрный — земля
  • жёлтый или белый — сигнал; подключается к цифровому выходу Arduino

Servo

Обычный хобби-сервопривод во время работы потребляет более 100 мА. При этом Arduino способно выдавать до 500 мА. Поэтому, если вам в проекте необходимо использовать мощный сервопривод, есть смысл задуматься о выделении его в контур с дополнительным питанием.

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

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

Сервоприводы обычно имеют ограниченный угол вращения 180 градусов, их так и называют «сервопривод 180°». Но существуют сервоприводы с неограниченным углом поворота оси. Это сервоприводы постоянного вращения или «сервоприводы 360°».

Иногда при подключении серводвигателя не отрабатывают заданные команды или отрабатывают некорректно. Причина в том, что сервомоторы требуют достаточно большую мощность для питания, особенно в начале движения ротора. Эти резкие скачки потребляемой мощности могут сильно «просаживать» напряжение на Arduino. Может произойти даже перезагрузка платы. Если подобное происходит, вам надо добавить конденсатор (470 мкФ или больше) между рельсами GND и 5V на вашей макетке. Конденсатор выполняет роль своеобразного резервуара для электрического тока. Когда серводвигатель начинает работать, он получает остатки заряда с конденсатора и от источника питания Arduino одновременно. Длинная нога конденсатора — это позитивный контакт, она подключается к 5V. Отрицательный контакт часто маркируется символом ‘-‘.

Управляем через импульсы

Для начала попробуем управлять вручную без библиотек. Считываем показания из Serial Monitor — нужно ввести число от 0 до 9. Эти значения равномерно распределим на 180 градусов и получим 20 градусов на каждую единицу показаний.

 int servoPin = 9; // сигнальный провод от серво на порт 9 int val; void setup() < pinMode(servoPin, OUTPUT); Serial.begin(9600); Serial.println("Servo is ready"); >void loop() < // convert number 0 to 9 to corresponding 0-180 degree angle val = Serial.read(); if (val >= '0' && val > > // define a servo pulse function void servoPulse(int pin, int angle) < // convert angle to 500-2480 pulse width int pulseWidth = (angle * 11) + 500; digitalWrite(pin, HIGH); // set the level of servo pin as high delayMicroseconds(pulseWidth); // delay microsecond of pulse width digitalWrite(pin, LOW); // set the level of servo pin as low delay(20 - pulseWidth / 1000); >

Библиотека Servo

Можно генерировать управляющие импульсы самостоятельно, но это настолько распространённая задача, что для её упрощения существует стандартная библиотека Servo.

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

Библиотека Servo позволяет осуществлять программное управление сервоприводами. Управление осуществляется следующими функциями:

  • attach() — присоединяет объект к конкретному выводу платы. Возможны два варианта синтаксиса для этой функции: servo.attach(pin) и servo.attach(pin, min, max). При этом pin — номер пина, к которому присоединяют сервопривод, min и max — длины импульсов в микросекундах, отвечающих за углы поворота 0° и 180°. По умолчанию выставляются равными 544 мкс и 2400 мкс соответственно. Возвращаемого значения нет.
  • write() — отдаёт команду сервоприводу принять некоторое значение параметра. Синтаксис: servo.write(angle), где angle — угол, на который должен повернуться сервопривод
  • writeMicroseconds() — отдаёт команду послать на сервопривод имульс определённой длины, является низкоуровневым аналогом предыдущей команды. Синтаксис следующий: servo.writeMicroseconds(uS), где uS — длина импульса в микросекундах. Возвращаемого значения нет.
  • read() — читает текущее значение угла, в котором находится сервопривод. Синтаксис: servo.read(), возвращается целое значение от 0 до 180
  • attached() — проверка, была ли присоединён объект к конкретному пину. Синтаксис следующий: servo.attached(), возвращается логическая истина, если объект была присоединён к какому-либо пину, или ложь в обратном случае
  • detach() — производит действие, обратное действию attach(), то есть отсоединяет объект от пина, к которому был приписан. Синтаксис: servo.detach()

В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.

Пример подключения двух сервоприводов.

 #include // создаём объекты для управления сервоприводами Servo myservo1; Servo myservo2; void setup() < // подключаем сервоприводы к выводам 11 и 12 myservo1.attach(11); myservo2.attach(12); >void loop() < // устанавливаем сервоприводы в серединное положение myservo1.write(90); myservo2.write(90); delay(500); // устанавливаем сервоприводы в крайнее левое положение myservo1.write(0); myservo2.write(0); delay(500); // устанавливаем сервоприводы в крайнее правое положение myservo1.write(180); myservo2.write(180); delay(500); >

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

При работе с сервоприводами на 360 градусов функции работают по другому.

Функция Arduino Сервопривод 180° Сервопривод 360°
Servo.write(0) Крайне левое положение Полный ход в одном направлении
Servo.write(90) Среднее положение Остановка сервопривода
Servo.write(180) Крайне правое положение Полный ход в обратном направлении

Sweep

Скетч File | Examples | Servo | Sweep постоянно поворачивает насадку на 180 градусов и возвращает её обратно. В примере используется встроенная библиотека Servo.

Общая схема — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9).

Sweep

 #include Servo myservo; // создадим объект сервопривода int pos = 0; // начальная позиция void setup() < myservo.attach(9); // сервопривод на выводе 9 >void loop() < for (pos = 0; pos for (pos = 180; pos >= 0; pos -= 1) < // от 180 до 0 градусов myservo.write(pos); // просим повернуться на позицию значения переменной 'pos' delay(15); // ждём 15ms для достижения позиции >> 

Knob

Скетч File | Examples | Servo | Knob управляет сервоприводом при помощи потенциометра. В примере используется встроенная библиотека Servo.

Общая схема: у сервопривода — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9). У потенциометра средняя ножка соединяется с аналоговым выходом A0, остальные к питанию и земле.

Knob

 #include Servo myservo; // создадим объект сервопривода int potpin = 0; // аналоговый выход A0 для потенциометра int val; // значение, получаемое от аналогового выхода void setup() < myservo.attach(9); // сервопривод на выводе 9 >void loop() < val = analogRead(potpin); // считываем данные с потенциометра (от 0 до 1023) val = map(val, 0, 1023, 0, 180); // Преобразуем в интервал от 0 до 180 myservo.write(val); // устанавливаем позицию сервопривода delay(15); // небольшое ожидание, чтобы сервопривод успел выполнить команду >

Случайные повороты

Будем поворачивать серводвигатель на случайную величину. Практического смысла немного, но для демонстрации подойдёт.

 #include Servo servo; // создадим объект сервопривода long randomNumber; void setup() < servo.attach(9); randomSeed( analogRead(A0) ); >void loop()

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

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