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

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

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

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

Библиотека — это набор дополнительных команд, который позволяет вводить программу в упрощенном формате.

Здесь мы используем библиотеку для работы с сервоприводами Servo.h.

Для работы с этой библиотекой её нужно скачать и установить.

Скачать можно здесь .

После того, как мы скачали нужную библиотеку, ее нужно правильно установить.
скачанные файлы нужно переместить по следующему пути :

Диск C Progtam Files
Arduino Libraries

После того, как мы все сделали перейдем к самой важной ступеньке, а именно к программированию

Назначение и устройство

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

Представляет собой устройство, состоящее их электродвигателя, редуктора, датчика положения (энкодера) или резистора и контроллера (устройства управления).

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

На рисунке представлен разрез устройства:

Сервоприводы выпускаются различной мощности и назначения: небольшой мощности от 0,05 кВт, применяемые в автомобилестроении и робототехнике, например, sg90 и значительной мощности в 15 кВт. Последние монтируются в промышленных манипуляторах, станках с ЧПУ, для управления задвижками в нефтегазовой промышленности и т.д.

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

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

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

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

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

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

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

Сервопривод и его разновидности

Сервопривод регулирует поступление воды в систему Как говорилось выше, сервопривод – это дополнительное оборудование, которое устанавливается на распределительный коллектор для теплого водяного пола.

Устройство применяется для регулирования потока воды, поступающего в нагревательные элементы. Это процесс осуществляется при помощи открытия и закрытия регулирующих вентилей, которые располагаются на обратной гребенке коллектора.

Механический сервопривод

Данное устройство самый простой вариант Сервопривод механического типа является наиболее простым вариантом данного устройства.

Он имеет не сложную конструкцию и приемлемую стоимость.

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

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

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

Электронный сервопривод для коллектора

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

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

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

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

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

Если они случаются нередко, то стоит дополнительно устанавливать ИБП (индивидуальный блок питания) или свой выбор останавливать на механическом устройстве регулировки подачи теплоносителя. Подробнее о сервоприводах смотрите в этом видео:

Как работает клешня «хватайки»

Как конкретно работает клешня, в профессиональном аппарате, я не разглядел, поскольку механика была прикрыта защитным кожухом, поэтому пришлось поэкспериментировать.
Поломав некоторое время голову, получилось придумать более-менее рабочий вариант: клешня состоит из четырех «пальцев», которые одним концом фиксируются на неподвижной раме. Так же добавил крестовину, с ней «пальцы» имеют шарнирное соединение примерно посередине. К неподвижной части рамы жестко зафиксировал сервопривод, качалка которого опускает и поднимает ось. Крестовина в свою очередь жестко закреплена к оси и вместе с ней совершает движения вверх и вниз, из-за чего и происходит сжатие и раскрытие клешни. Чтобы было понятнее, ниже находится картинка с клешней. Изображение можно вращать с помощью мышки, зажав ЛКМ и перемещая влево или вправо.

С изготовлением клешни особо не мучался и напечатал ее на 3D принтере.

Состав сервопривода

  1. привод — например, электромотор с редуктором, или пневмоцилиндр,
  2. датчик обратной связи — например, датчик угла поворота выходного вала редуктора (энкодер),
  3. блок питания и управления (он же преобразователь частоты / сервоусилитель / инвертор / servodrive).
  4. вход/конвертер/датчик управляющего сигнала/воздействия (может быть в составе блока управления).

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

Для управления сервоприводами или группами сервоприводов можно использовать специальные ЧПУ-контроллеры, которые можно построить на базе программируемых логических контроллеров (ПЛК).

Мощность двигателей: от 0,05 до 15 кВт. Крутящие моменты (номинальные): от 0,15 до 50 Н·м.

Существующие виды сервоприводов на сегодняшний день

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

  • закрытые;
  • открытые.

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

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

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

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

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

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

Но существуют сервоприводы с неограниченным углом поворота оси. Это сервоприводы постоянного вращения или «сервоприводы 360°».

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

Для иллюстрации работы с сервами постоянного вращения мы собрали двух мобильных ботов — на Arduino Uno и Iskra JS. Инструкции по сборке и примеры скетчей смотрите в статье собираем ИК-бота.

Управление сервоприводом. Интерфейс управляющих сигналов

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

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

Чаще всего в хобби-сервах импульсы производятся с частотой 50 Гц. Это значит, что импульс испускается и принимается раз в 20 мс. Обычно при этом длительность импульса в 1520 мкс означает, что сервопривод должен занять среднее положение. Увеличение или уменьшение длины импульса заставит сервопривод повернуться по часовой или против часовой стрелки соответственно. При этом существуют верхняя и нижняя границы длительности импульса. В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс – для 0° и 2400 мкс – для 180°.

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

Среднее положение при этом соответствует 760 мкс, аналогично тому, как в обычных сервоприводах среднему положению соответствует 1520 мкс.

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

На что ещё стоит обратить внимание, так это на путаницу в терминологии. Часто способ управления сервоприводами называют PWM/ШИМ (Pulse Width Modulation) или PPM (Pulse Position Modulation)

Это не так, и использование этих способов может даже повредить привод. Корректный термин – PDM (Pulse Duration Modulation). В нём крайне важна длина импульсов и не так важна частота их появления. 50 Гц – это норма, но сервопривод будет работать корректно и при 40, и при 60 Гц. Единственное, что нужно при этом иметь в виду – это то, что при сильном уменьшении частоты он может работать рывками и на пониженной мощности, а при сильном завышении частоты (например, 100 Гц) может перегреться и выйти из строя.

Управление сервоприводом. Интерфейс управляющих сигналов

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

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

Чаще всего в хобби-сервах импульсы производятся с частотой 50 Гц. Это значит, что импульс испускается и принимается раз в 20 мс. Обычно при этом длительность импульса в 1520 мкс означает, что сервопривод должен занять среднее положение. Увеличение или уменьшение длины импульса заставит сервопривод повернуться по часовой или против часовой стрелки соответственно. При этом существуют верхняя и нижняя границы длительности импульса. В библиотеке для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.

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

Среднее положение при этом соответствует 760 мкс, аналогично тому, как в обычных сервоприводах среднему положению соответствует 1520 мкс.

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

На что ещё стоит обратить внимание, так это на путаницу в терминологии. Часто способ управления сервоприводами называют PWM/ШИМ (Pulse Width Modulation) или PPM (Pulse Position Modulation). Это не так, и использование этих способов может даже повредить привод

Корректный термин — PDM (Pulse Duration Modulation). В нём крайне важна длина импульсов и не так важна частота их появления. 50 Гц — это норма, но сервопривод будет работать корректно и при 40, и при 60 Гц. Единственное, что нужно при этом иметь в виду — это то, что при сильном уменьшении частоты он может работать рывками и на пониженной мощности, а при сильном завышении частоты (например, 100 Гц) может перегреться и выйти из строя

Это не так, и использование этих способов может даже повредить привод. Корректный термин — PDM (Pulse Duration Modulation). В нём крайне важна длина импульсов и не так важна частота их появления. 50 Гц — это норма, но сервопривод будет работать корректно и при 40, и при 60 Гц. Единственное, что нужно при этом иметь в виду — это то, что при сильном уменьшении частоты он может работать рывками и на пониженной мощности, а при сильном завышении частоты (например, 100 Гц) может перегреться и выйти из строя.

Примеры работы для Raspberry Pi

Мозгом для проекта выступит микрокомпьютер Raspberry Pi 4 Model B.

Подключение и настройка

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

Схема устройства


Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka HAT, которая надевается сверху на Raspberry Pi методом бутерброда.

Программная настройка

  1. Заведите Raspberry Pi.
  2. Подключите и настройте плату расширения Troyka HAT.

Вращение вала

Для старта протестируем мотор в трёх режимах вращения:

  • Максимальная скорость по часовой стрелке (CW).
  • Пауза — вал мотора стоит на месте.
  • Максимальная скорость против часовой стрелки (CCW).

Код для Python

servo-pdm-continuous-rotation-speed.py
# Библиотека для работы с сервоприводами
from gpiozero import Servo
# Библиотека для работы со временем
from time import sleep
 
# Создаём объект для работы с сервоприводом
# - pin: номер пина, к которому подключён сервопривод
# WPIx, нумерация WiringPi, где x — номер пина
# GPIOx, нумерация GPIO/BCM, где x — номер пина
# - min_pulse_width: ширина импульса, соответствующая
# максимальной скорости по часовой стрелке CW
# Опциональный и по умолчанию стоит: 0.001 c = 1000 мкс
# - max_pulse_width: ширина импульса, соответствующая
# максимальной скорости против часовой стрелки CCW
# Опциональный и по умолчанию стоит: 0.002 c = 2000 мкс
# Подробности нумерации: https://gpiozero.readthedocs.io/en/stable/recipes.html#pin-numbering
# Каждая модель сервопривода имеет свои характеристики
servo = Servo("WPI6", min_pulse_width=0.000544, max_pulse_width=0.0024)
 
while True:
    # Задаём максимальную скорость вращения сервопривода по часовой стрелке
    servo.min()
    # Ждём 1 секунду
    sleep(1)
    # Останавливаем сервопривод
    servo.mid()
    # Ждём 1 секунду
    sleep(1)
    # Задаём максимальную скорость вращения сервопривода против часовой стрелки
    servo.max()
    # Ждём 1 секунду
    sleep(1)
    # Останавливаем сервопривод
    servo.mid()
    # Ждём 1 секунду
    sleep(1)

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

Вращение вала с плавным разгоном

Усложним задачу. Сделаем плавный разгон вала по очереди в каждую сторону:

  • Плавный разгон до максимальной скорости по часовой стрелке (CW).
  • Пауза — вал мотора стоит на месте.
  • Плавный разгон до максимальной скорости против часовой стрелки (CCW).

Код для Python

servo-pdm-continuous-rotation-speed-sweep.py
# Библиотека для работы с сервоприводами
from gpiozero import Servo
from time import sleep
 
# Библиотека для расширенных методов обработки чисел
import numpy as np
 
# Создаём объект для работы с сервоприводом
# - pin: номер пина, к которому подключён сервопривод
# WPIx, нумерация WiringPi, где x — номер пина
# GPIOx, нумерация GPIO/BCM, где x — номер пина
# - min_pulse_width: ширина импульса, соответствующая
# максимальной скорости по часовой стрелке CW
# Опциональный и по умолчанию стоит: 0.001 c = 1000 мкс
# - max_pulse_width: ширина импульса, соответствующая
# максимальной скорости против часовой стрелки CCW
# Опциональный и по умолчанию стоит: 0.002 c = 2000 мкс
# Подробности нумерации: https://gpiozero.readthedocs.io/en/stable/recipes.html#pin-numbering
# Каждая модель сервопривода имеет свои характеристики
servo = Servo("WPI6", min_pulse_width=0.000544, max_pulse_width=0.0024)
 
# Задаём максимальную скорость вращения сервопривода
# По часовой (CW) и против (CCW) часовой стрелки
SPEED_MAX_CW = -1
SPEED_MAX_CCW = 1
SPEED_STOP = 
 
# Шаг сервопривода
step_angle_servo = 0.005
 
while True:
    # Перебираем значения скорости вала сервы от 0 до максимального по часовой стрелке
    for val in np.arange(SPEED_STOP, SPEED_MAX_CW, -step_angle_servo):
        servo.value = val
        sleep(0.02)
    # Останавливаем сервопривод
    servo.value = SPEED_STOP
    # Ждём 1 секунду
    sleep(1)
    # Перебираем значения скорости вала сервы от 0 до максимального против часовой стрелки
    for val in np.arange(SPEED_STOP, SPEED_MAX_CCW, step_angle_servo):
        servo.value = val
        sleep(0.02)
    # Останавливаем сервопривод
    servo.value = SPEED_STOP
    # Ждём 1 секунду
    sleep(1)

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

Процесс рекуперации

Зачастую запускается при переключении режимов работы сервомотора: что это такое? Это возвратная энергия, которая выделяется при смене знака (направления движения) относительно вращающего момента. Обычно она не слишком большая, но все равно собирается на конденсаторах, увеличивая, таким образом, напряжение на звене постоянного тока.

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

Мы постарались рассмотреть все особенности данных механизмов и подчеркнуть удобство и перспективность их использования. Предлагаем также взглянуть на схемы сервоприводов, фото и видеоролики на эту тему – чтобы вы могли дополнить свое представление.

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

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

Также дополнительно мы используем библиотеку servo – скачайте ниже или в нашем разделе Библиотеки.

Содержимое zip-файла размещается в папку arduino-xxxx/hardware/liraries.

Скетч № 1

// Подклоючаем библиотеку Servo
#include <Servo.h> 

// Пин для сервопривода
int servoPin = 3;
// Создаем объект
Servo Servo1;

void setup() {
  // Нам нужно подключить сервопривод к используемому номеру пина
  Servo1.attach(servoPin);
}

void loop(){
  // 0 градусов
  Servo1.write(0);
  delay(1000);
  // 90 градусов
  Servo1.write(90);
  delay(1000);
  // 180 градусов
  Servo1.write(180);
  delay(1000);
}

Если сервомотор подключен к другому цифровому контакту, просто измените значение servoPin на значение используемого цифрового вывода.

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

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

Скетч № 2

Второй скетч для варианта с Arduino Diecimilia ниже.

Нам достаточно будет скачать и подключить библиотеку из архива:

Сам код такой:

#include <Servo.h>

Servo servo1; Servo servo2; 


void setup() {

  pinMode(1,OUTPUT);
  servo1.attach(14); //analog pin 0
  //servo1.setMaximumPulse(2000);
  //servo1.setMinimumPulse(700);

  servo2.attach(15); //analog pin 1
  Serial.begin(19200);
  Serial.println("Ready");

}

void loop() {

  static int v = 0;

  if ( Serial.available()) {
    char ch = Serial.read();

    switch(ch) {
      case '0'...'9':
        v = v * 10 + ch - '0';
        break;
      case 's':
        servo1.write(v);
        v = 0;
        break;
      case 'w':
        servo2.write(v);
        v = 0;
        break;
      case 'd':
        servo2.detach();
        break;
      case 'a':
        servo2.attach(15);
        break;
    }
  }

  Servo::refresh();

}

Поделитесь в социальных сетях:ВКонтактеFacebookTwitter
Напишите комментарий