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

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

Внешний вид Fritzing Условное обозначение на схеме

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обычный хобби-сервопривод во время работы потребляет более 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 градусов на каждую единицу показаний.

Библиотека 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°.

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

Библиотека 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).

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

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

Читайте также:  Ремонт материнской платы на процессоре

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

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

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

Решаем задачи Абрамян на C. Matrix78

Matrix78. Дана матрица размера $$M imes N$$. Упорядочить ее строки так, чтобы их минимальные элементы образовывали убывающую последовательность.

Решаем задачи Абрамян на C. Matrix77

Matrix77. Дана матрица размера $$M imes N$$. Упорядочить ее столбцы так, чтобы их последние элементы образовывали убывающую последовательность.

Решаем задачи Абрамян на C. Matrix76

Matrix76. Дана матрица размера $$M imes N$$. Упорядочить ее строки так, чтобы их первые элементы образовывали возрастающую последовательность.

Решаем задачи Абрамян на C. Matrix75

Matrix75. Дана матрица размера $$M imes N$$. Элемент матрицы называется ее локальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальных максимумов данной матрицы на противоположный. При решении допускается использовать вспомогательную матрицу.

Решаем задачи Абрамян на C. Matrix74

Matrix74. Дана матрица размера $$M imes N$$. Элемент матрицы называется ее локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При решении допускается использовать вспомогательную матрицу.

Решаем задачи Абрамян на C. Matrix73

Matrix73. Дана матрица размера $$M imes N$$. После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. Если требуемых столбцов нет, то вывести матрицу без изменений.

Решаем задачи Абрамян на C. Matrix72

Matrix72. Дана матрица размера $$M imes N$$. Перед первым столбцом, содержащим только положительные элементы, вставить столбец из единиц. Если требуемых столбцов нет, то вывести матрицу без изменений.

Решаем задачи Абрамян на C. Matrix71

Matrix71. Дана матрица размера $$M imes N$$. Продублировать столбец матрицы, содержащий ее минимальный элемент.

Решаем задачи Абрамян на C. Matrix70

Matrix70. Дана матрица размера $$M imes N$$. Продублировать строку матрицы, содержащую ее максимальный элемент.

Решаем задачи Абрамян на C. Matrix69

Matrix69. Дана матрица размера $$M imes N$$ и целое число $$K$$ $$(1 le K le $$N$$)$$. После столбца матрицы с номером $$K$$ вставить столбец из единиц.

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

При необходимости, созданную последовательность движений можно экспортировать как скетч Arduino IDE, для автономной работы, без ПК. Либо просто как массив значений ключевых точек для дальнейшего использования в своей программе. ServoStudio 12 обладает интуитивно понятным интерфейсом и разобраться в ней может даже новичок. А использование платы Arduino в качестве исполнительного устройства управления – сделало данную систему легко доступной в повторении и изготовлении.

Немного предыстории. Вдохновившись идеей создания удобного тестера сервоприводов от Сергея Грищенко, я решил создать свою систему, которая была б проста в использовании и одновременно удобна и функциональна. В отличии от вышеуказанного тестера сервоприводов, за все управление отвечает программное обеспечение ServoStudio 12, на персональном компьютере, и плата Arduino поддерживает работу до 12 сервоприводов одновременно. Аппаратная часть же являет собой широко распространённую плату Arduino Nano либо Arduino Uno. Так же данное ПО додерживает работу с вышеуказанным тестером сервоприводов.

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

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

Для начала работы нам потребуется следующее:

  • Плата Arduino Nano/Uno.
  • Arduino IDE, чтоб запрограммировать данную плату.
  • И ПО ServoStudio 12.

Схема подключения очень проста. Выводы D2-D13 подключаются к управляющим входам сервоприводов. Питание подключается к выводам питания Arduino. При большом потреблении тока сервоприводами- необходимо подключить внешний источник питания.

Первым делом в меню программы ServoStudio 12 необходимо выбрать пункт «Генератор кода» и подпункт «Создать скетч ServoStudio HardWare», сохранить данный скетч на диск и открыть в Arduino IDE и залить в Arduino Nano/Uno. Все, аппаратная часть готова! Данное действие производится всего один раз, с новой платой Arduino.

Для начала работы необходимо создать новый проект (меню Файл / Новый). В диалоговом окне выбрать необходимое количество ШИМ каналов (количество сервоприводов), выбрать тип платы тестера и написать имя своего устройства (для удобства).

Читайте также:  Как рассчитать кол во радиаторов на комнату

Теперь об интерфейсе программы

В нижней части расположены инструменты для создания последовательности ключевых точек. Перемещая ползунки регуляторов для соответствующих каналов задается значение ширины импульсов управляющего сигнала (угол поворота сервопривода) на соответствующем канале. Если установить флажок «управлять в реальном времени»- то при перемещении ползунка регулятора будет двигаться сервопривод, подключённый к данному каналу, что очень удобно, так как сразу наглядно видно положение привода в данной точке. После того как установили управляющий сигнал на всех необходимых каналах, нужно создать следующий «кадр» (следующую ключевую точку), при помощи кнопки «Добавить». И таким же образом, при помощи регуляторов, создать новую ключевую точку, и так сколько необходимо. Время, за которое сервоприводы должны повернуться на данный угол, выставляется для каждого кадра отдельно, в поле «время шага», время задается в миллисекундах. Чем больше данное значение– тем медленнее будет перемещение, чем меньше– тем быстрее. В поле «шаг» отображается текущий кадр последовательности. При необходимости, изменяя номер шага в данном поле, можно отредактировать предыдущие шаги. Для удобства, имена каналов можно менять, кликнув 2 раза на названии канала, слева от регулятора.

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

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

Так же основную последовательность (которая в данный момент открыта в редакторе), можно экспортировать как скетч для Arduino IDE, для автономного воспроизведения платой Arduino, без участия ПК. Для этого в меню «Генератор кода» необходимо выбрать пункт «Экспорт последовательности» и в диалоговом окне нажать кнопку «Генерировать», после чего данный скетч можно скопировать в буфер обмена, либо сохранить как скетч для Arduino IDE. Дальше этот скетч можно залить обычным образом в контроллер платы Arduino.

Есть возможность воспроизводить данную последовательность циклично либо только один раз, установкой или снятием флажка «повторять циклично». Так же есть возможность экспорта в массив ключевых точек, это может быть полезно, если у вас уже есть своя программа для микроконтроллера и Вам необходимо в ней задать движения, при чем опционально можно добавлять в массив значения времени установки позиции, при помощи установки соответствующего флажка. Если, после прошивки данным скетчем, плату Arduino нужно опять использовать с программой ServoStudio 12 то необходимо опять в меню выбрать пункт «Генератор кода» и подпункт «Создать скетч ServoStudio HardWare», сохранить данный скетч на диск и открыть в Arduino IDE и залить в Arduino Nano/Uno.

Окно «пульт управления»

Позволяет использовать горячие клавиши для воспроизведения отдельных последовательностей. Для начала нужно нажать кнопку «Назначить клавиши», выбрать из выпадающего списка необходимую последовательность и назначить ей горячую клавишу. Когда все установлено- необходимо нажать кнопку «Запомнить». Теперь, пока открыто это окно, при нажатии на горячую клавишу будет воспроизводится назначенная ей последовательность.

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

В программе есть так же возможность ассоциировать файлы проекта с ServoStudio 12. Для этого ее нужно 1 раз запустить с правами администратора. ServoStudio 12 – полностью Portable, состоит из 1 файла (при закрытии программы еще создается файл последнего открытого проекта) и не требует установки.

Более подробно о работе можно посмотреть в видео.

Немного о планах на будущее:

  • Хочу создать приложение для Android, которое могла б открывать файл проекта и можно б было использовать телефон для управления роботом. Управление осуществлять по BlueTooth или WiFi через TCP-UART переходник.
  • Так же хочу создать версию на большее количество каналов, для управления более сложными устройствами.
  • Добавить обработку сигналов с подключённых датчиков (на пример если впереди препятствие- обойти его).
  • Добавить возможность управления цифровыми выходами (на пример для включения светодиодов или чего-то другого)

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

Ссылка на основную публикацию
Как узнать объем в литрах зная размеры
');> //--> Объем - это количественная характеристика пространства, занимаемого телом, конструкцией или веществом. Формулы расчета объема: А - длина; В...
Как убрать корни сирени
Многим владельцам загородных угодий давно разработанные участки достались по наследству или куплены у дачников советского периода. Тогда подходы к оформлению...
Как убрать лак со штанов
Делать маникюр «на бегу» иногда приходится каждой женщине. К сожалению, не всегда такие эксперименты заканчиваются успешно – ведь второпях так...
Как узнать остаток трафика на мотиве
Узнать остаток трафика у мобильного оператора Мотив Если перефразировать Винни-Пуха, то «Мобильный интернет – странный предмет, вот только он есть...
Adblock detector