Сервопривод для ардуино своими руками

Добавил пользователь Валентин П.
Обновлено: 05.10.2024

Сегодня мы поговорим про серводвигатели или сервоприводы, можно сказать и так и так.
Рассмотрим 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. Они выпускаются в двух модификациях, как обычные сервопривода, так и сервоприводы непрерывного вращения. В таком варианте управлять поворотом на определённый угол очень затруднительно, а управлять можно только скоростью и направлением вращения.
При этом важно отметить, что такой сервопривод не может поворачиваться на определенный угол и делать строго заданное количество оборотов.

Отличие сервоприводов непрерывного вращения отличается в том, что функция 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
Здесь я передаю градусы поворота.
Первые - это для первого сервопривода, вторые для второго.

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

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

Учимся управлять сервомотором с использованием Arduino.

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

Необходимые узлы

Для того, чтобы освоить приведенные в статье методики управления сервоприводом вам понадобятся:

сервомотор

1 переменный резистор (потенциометр) на 10 кОм

потенциометр

Монтажная плата

1 микроконтроллер Arduino Uno

Arduino Uno

Коннекторы папа-папа

1 конденсатор на 100 мкФ (не обязательно)

конденсатор

Схема подключения для 'Sweep' (автоматическое вращение)

Для этого эксперимента вам надо подключить к Arduino только сервомотор.

Схема подключения для

На сервомоторе 3 контакта. Цвет контактов может отличаться в зависимости от фирмы производителя, но красный - это всегда контакт 5 В. Контакт GND (земля) может быть черным или коричневым. Оставшийся третий контакт - это сигнал, который используется для управления положением ротора сервы. Обычно он желтого или желтого цветов. Этот контакт мы подключаем к цифровому пину 9 на Arduino.

На контактах сервы предусмотрены разъемы, в которые можно установить коннекторы (провода) и соединить из макетной платой, а потом с Arduino.

Схема подключения для

Серводвигатель дергается

Иногда при подключении сервы не отрабатывают заданные команды или отрабатывают некорректно. Причем происходить это может только при подключении к определенным USB портам. Причина в том, что сервы требуют достаточно большую мощность для питания, особенно в начале движения ротора. Эти резкие скачки потребляемой мощности могут сильно "просаживать" напряжение на Arduino. Может произойти даже перезагрузка платы.

Если подобное происходит, вам надо добавить конденсатор (470 мкФ или больше) между рельсами GND и 5V на вашей макетке.

Серва, Arduino и конденсатор

Конденсатор выполняет роль своебразного резервуара для электрического тока. Когда серводвигатель начинает работать, он получает остатки заряда с конденсатора и от источника питания Arduino одновременно.

Длинная нога конденсатора - это позитивный контакт, она подключается к 5V. Отрицательный контакт часто маркируется символом '-'.

Скетч Arduino 'Sweep' (автоматическое вращение)

Загрузите на Arduino скетч, который рассмотрен ниже. После загрузки ротор сервы должен начать вращаться в одном направлении, а потом в противоположном.

Программа основана на стандартном скетче 'sweep', который вы можете найти в меню Arduino Examples в папке 'servo'.


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

Общие сведения о сервоприводах

По определению: сервопривод — это двигатель, управляемый отрицательной обратной связью. Если сказать простым языком, то это двигатель, способный находиться в заданном положении, и при воздействии на вал, его принудительном отклонении, привод удерживает его положение.

Большинство сервоприводов подключаются по трём проводам, их назначение такое:

  1. Плюс питания.
  2. Минус питания.
  3. Управляющий сигнал.

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

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

Перечислим основные характеристики сервоприводов:

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

Сервоприводы различают по способу управления — цифровые и аналоговые. Цифровые срабатывают быстрее и работают стабильнее.

В большинстве серводвигателей используются одинаковые сигналы управления, а именно период сигнала — 20 мс, а длительность управляющего импульса зависит от угла, на который нужно повернуть вал, например, 544 мкс – 0°, 2400 мкс – 180°.

Диаграмма

Диаграмма управляющих сигналов

Реже может быть и другая длина сигналов для разных углов, например, 760 и 1520 мкс для 0° и 180° соответственно. Поэтому при использовании не знакомых вам сервоприводов уточняйте длину управляющих сигналов в технической документации.

Перейдём к практике

В наборе, который мы с вами распаковывали ранее мне достался сервопривод Tower Pro SG90 — это одна из популярнейших моделей для хобби, поэтому китайцы кладут их во все подобные наборы. Отдельно он стоит 3-4 доллара.

Как подключить сервопривод к ардуино

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

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

Сегодня нам понадобится:

  • Сервопривод SG90 — 1 штука;
  • Плата Arduino, любая, у меня есть UNO — 1 штука;
  • Перемычки или провода для содинения — 5-10 штук;
  • Потенциометр, например, на 10К (на самом деле его сопротивление не слишком важно) — 1 штука.

Если вы будете питать серву напрямую от платы, то подключайте её к пинам 5V красным проводом, GND – коричневым (черным) проводом, а жёлтый провод — это сигнал, его можно к любому пину, хоть цифровому, хоть аналоговому, хоть с ШИМ, хоть без него.

Как подключить сервопривод к ардуино

Я же заблаговременно собрал схему на макетной плате и подключил к ней потенциометр, которым мы далее будем задавать положение вала. Средний вывод потенциометра я подключил к аналоговому пину A0 ардуино, а сигнальный провод сервопривода – к 9 пину. Схему приведу ниже.

Как подключить сервопривод к ардуино

По умолчанию в этом примере выставлено, что сигнальный провод подключается к 9-му пину, если вы подключили к другому – исправьте вот это значение в коде:

Как подключить сервопривод к ардуино

Код несложный, привожу его ниже с русскими комментариями.

// Можно создать до 12 таких объектов и подключить столько же приводов

int pos = 0; // Переменная для хранения значения положения вала

void setup()

myservo.attach(9); // указываем, что сигнальный провод сервопривода

//для объекта myservo подключен к 9 пину

>

void loop()

for (pos = 0; pos

myservo.write(pos); // в цикле передаём объекту myservo значение переменной pos

// чтобы привод повернулся на угол, указанный в pos

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

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

Схема сервопривода

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

Разберем код. Первая его часть, где подключается библиотека и назначается пин, к которому подключен управляющий провод сервопривода не изменилась, и её я комментировать не буду.

// к которому подключено потенциометр (пин А0)

int val; // в этой будет сохраняться значение, полученное с потенциометра

void setup()

myservo.attach(9);

>

void loop()

val = analogRead(potpin); // читаем значение потенциометра, получаем значение от 0 до 1023

// подробнее мы рассматривали этот вопрос в этой статье

val = map(val, 0, 1023, 0, 180); // масштабируем значение от 0 до 1023

// до необходимых нам градусов — от 0 до 180

myservo.write(val); // указываем угол поворота уже масштабированными

// значениями, полученными с аналогового входа

delay(15); // задержка перед следующим считыванием (опционально)

>

Библиотека Servo.h по умолчанию встроена в Arduino IDE, разберем основные её команды:

Если у вашего привода длины управляющих импульсов отличаются от стандартных 544 и 2400 мкс, то их можно задать через запятую после номера пина, вот так servo.attach(pin, min, max), где servo – имя привода (имя переменной типа Servo), min – длина сигнала для минимального угла поворота (0°) в микросекундах, max – ширина импульса управляющего сигнала для максимального угла поворота (180°) в микросекундах.

write() — передаём приводу угол поворота в градусах (пример: ИмяПривода.write(180))

writeMicroseconds() — тоже самое, только указывает на длину сигнала в микросекундах.

read() — определяет текущее положение вала;

attached() — Проверяет подключена ли переменная типа Servo к пину с сервоприводом. Синтаксис — Servo.attached().

detach() — отмена команды attach, то есть отсоединяет определенный переменной типа Servo сервопривод от выхода.

Заключение

Таким образом, мы можем вручную задавать положение вала сервопривода. Но на этом сфера его применения не заканчивается. Сервоприводы используются повсеместно, например, для привода дроссельной заслонки в автомобилях, в системах отопления, которые управляются автоматически, в различной бытовой технике и на производстве. Как отмечалось в начале статьи, они используются наряду с шаговыми двигателями и могут применяться в ЧПУ-станках и 3D-принтерах. Считается, что шаговые двигатели обеспечивают более точное позиционирование, но на практике всё зависит от конкрентных шагового двигателя и сервопривода которые сравнивают, а также от системы, которая ими управляет. Как и обещал прикладываю видео, на котором показано всё что было описано в этой статье.

Сервопривод (servo) — устройство с электрическим мотором, которому можно задать определенный угол поворота и зафиксировать в определенном положении. Подключение сервопривода к Arduino очень простое и требует минимум деталей. Сервомоторы применяются в огромном количестве областей, наиболее частая сфера применения это робототехника и автоматика.

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

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

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

Для управления сервоприводом нужен только один проводо по которому на управляющую плату поступает сигнал. Управляющий сигнал представляет собой прямоугольные импульсы на подобии ШИМ. Цикл сигланал занимает 20 мск. а большую часть времени сигнал находится в низком состоянии. Перед основым циклом сигнал находится в высоком состоянии на интервал от 1 до 2 мсек.

При 1 мсек. угол поворота равен 0 градусов, а при 2 миллисекундах — 180 градусов, а в промежутке значение от 0 до 180.

Подключение сервопривода к Arduino

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

  1. плата Arduino, подойдет абсолютно любая
  2. сервопривод, тут тоже особо не разницы какой.
  3. перемычки.

Схема подключение сервопривода к Arduino

Тут представлена простейшая схема подключения одного сервопривода, питание на него поступает с самой платы Arduino.

Схема подключение сервопривода к Arduino

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

Распиновка выводов сервопривода

Для того чтобы подключить сервопривод нужно знать его распиновку (назначение выводов), разъем имеет 3 вывода. Управляющие сигнал на вывод, цвет которого отличается в зависимости от проиpводителя. Распиновка выводов сервоприводов представлена ниже.

Распиновка выводов сервопривода

Скетч для сервопривода

Скаченную библиотеку нужно скопировать папку arduino-xxxx/hardware/liraries.

Стандартные методы серво-библиотеки

  • attach(int) — соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке
  • detach() — отсоединение пина от сервопривода
  • write(int) — установка угла сервопривода в градусах, от 0 до 180
  • read() — возвращает значение, установленное write(int)
  • attached() — возвращает 1, если серво в настоящее время подключен

Скетч сервопривода 1

Этот скетч заставит сервопривод повернутся в позицию 0 градусов, выждать интервал в 1 секунду, далее повернуться на 90 градусов, выждать еще одну секунду, после повернуться на 180 градусов и перейти в изначально положение.

Сервопривод можно повесить и на другой вывод, для этого нужно просто указать нужный servoPin в программе

Подключаемые библиотеки Servo автоматически отключает функцию PWM для PWM-контактов 9 и 10 на Arduino UNO и аналогичных платах.

Скетч для сервопривода объявляет объект и затем инициализирует сервопривод при помощи функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.

Скетч сервопривода 2

Управление сервоприводом с помощью потенциометра. Сервопривод подключается к пину 2, потенциометр к пину 0

Скетч сервопривода 3

Этот пример это поворот на выводе A0 с переменной скоростью.

Дополнительные возможности

Arduino имеет встроенную функцию servo.write(градус), которая упрощает процесс управления сервомотором Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.

Но для более точного позиционирования лучше использовать функцию servo.writeMicroseconds(микросекунды), в которую нужно переделать количество микросекунд.

Подключение нескольких сервоприводов

Чтобы использовать более одного сервопривода в Ardiono нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:

Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:

Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.

Существует мнение что сервоприводы нужно подключать к пинам PWM, но это не так — любой цифровой пин подойдет и будет работать.

Читайте также: