В статье рассмотрим, как изменить скорость вращения сервопривода на платформе Arduino. Управление скоростью сервоприводов позволяет точно настраивать механизмы, улучшать их производительность и адаптировать под конкретные задачи. Эта информация полезна как новичкам, так и опытным разработчикам, стремящимся оптимизировать проекты и расширить функциональные возможности устройств.
Сервоприводы PDM постоянного вращения: особенности применения и примеры кода
Сервоприводы PDM с постоянным вращением представляют собой моторы, которые функционируют под управлением сигнала PDM (модуляция длительности импульса) и обеспечивают возможность вращения вала в любом направлении без ограничений по углу поворота.
Сервоприводы непрерывного вращения находят применение в моделировании движений различных устройств. На базе таких сервоприводов можно создать вращающийся столик для предметной фотосъемки, мобильного робота или радар с круговым обзором.
Эксперты в области робототехники и программирования на платформе Arduino отмечают, что изменение скорости вращения сервопривода можно достичь несколькими способами. Во-первых, важно правильно настроить параметры PWM (широтно-импульсной модуляции), которые управляют подачей сигнала на сервопривод. Увеличение или уменьшение значения PWM позволяет регулировать скорость вращения.
Кроме того, специалисты рекомендуют использовать функции задержки в коде, чтобы контролировать время, в течение которого сервопривод получает сигнал. Это позволяет добиться плавного изменения скорости. Также стоит обратить внимание на использование библиотек, таких как Servo, которые предоставляют удобные методы для управления сервоприводами.
Наконец, эксперты подчеркивают важность тестирования и настройки параметров в зависимости от конкретного проекта, так как разные сервоприводы могут иметь свои особенности в работе.
https://youtube.com/watch?v=75nByJSToqc
Список моделей
| Модель | Форм-фактор | Сигнал управления | Обратная связь | Назначение | Внутренний интерфейс | Диапазон вращения |
|---|---|---|---|---|---|---|
| Feetech FS90R / Документация | Микро | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
| Feetech FT90R / Документация | Микро | PDM | Нет | Постоянное вращение | Цифровой | 360° |
| Feetech FS5103R | Стандарт | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
| Feetech FS5113R | Стандарт | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
| Feetech FB5317M-360 / Документация | Стандарт | PDM | Да | Постоянное вращение | Цифровой | 360° |
Интересные факты
Вот несколько интересных фактов о том, как изменить скорость вращения сервопривода на Arduino:
-
Использование функции
writeMicroseconds(): В отличие от стандартной функцииwrite(), которая принимает значения от 0 до 180 градусов, функцияwriteMicroseconds()позволяет задавать более точные значения, что дает возможность контролировать скорость вращения сервопривода. Это достигается путем отправки сигналов с различной длительностью, что позволяет изменять скорость и позицию более плавно. -
Плавное изменение угла: Чтобы изменить скорость вращения сервопривода, можно реализовать плавное изменение угла. Например, вместо того чтобы сразу устанавливать сервопривод в конечное положение, можно постепенно увеличивать или уменьшать угол с помощью цикла
for, добавляя небольшие задержки с помощью функцииdelay(). Это позволяет добиться более контролируемого и плавного движения. -
Использование библиотеки
Servo: БиблиотекаServoдля Arduino предоставляет простые методы для управления сервоприводами. Однако, для изменения скорости вращения можно комбинировать её с другими библиотеками, такими какTimerилиAccelStepper, которые позволяют более точно управлять временем и скоростью, что особенно полезно в проектах, требующих высокой точности и плавности движения.
Эти факты подчеркивают, как можно использовать различные методы и функции для достижения желаемого контроля над сервоприводом в проектах на Arduino.
https://youtube.com/watch?v=S0tb3jnfdw4
Интерфейс управления
В сервоприводах PDM с постоянным вращением скорость вращения вала определяется длиной импульса. Для управления мотором требуется подача специального сигнала PDM (Pulse Duration Modulation) — импульсов с фиксированной частотой и переменной шириной. Когда внешний контроллер отправляет управляющий импульс, внутренняя начинка сервопривода создает свой сигнал для мотора.
В PDM сигнале частота импульсов остается постоянной и составляет 50 Гц, что означает, что период подачи импульсов равен 20 мс. Однако ширина импульса варьируется, и именно она определяет направление и скорость вращения мотора. Обычно рабочая ширина импульса находится в диапазоне от 544 до 2400 мкс.
В качестве примера можно рассмотреть характеристики популярного хобби-сервопривода Feetech FS90R.
| Период импульсов | Ширина импульса | Положение сервопривода |
|---|---|---|
| 20 мс | 544 мкс | Вал сервопривода вращается по часовой стрелке (CW) с максимальной скоростью. |
| 20 мс | 1540 мкс | Вал сервопривода находится в неподвижном состоянии. |
| 20 мс | 2400 мкс | Вал сервопривода вращается против часовой стрелки (CWW) с максимальной скоростью. |
Следует отметить, что на различных приводах диапазон ширины импульсов и скорость вращения вала могут отличаться от стандартных значений. Эти параметры можно уточнить в технических характеристиках.
Даже в рамках одной модели сервопривода может наблюдаться производственная погрешность, которая приводит к различиям в рабочем диапазоне длин импульсов. Для обеспечения точной работы каждый конкретный сервопривод необходимо откалибровать: с помощью экспериментов следует определить оптимальный диапазон, характерный именно для данного устройства.
Часто управление сервоприводами ошибочно называют PWM (Pulse Width Modulation) или PPM (Pulse Position Modulation). Это неверно, и применение этих методов может даже повредить привод. Правильный термин — PDM (Pulse Duration Modulation), в котором ключевым является длина импульсов, а не их частота.
Если ваш сервопривод издает дребезжащие звуки, дергается или вы планируете управлять несколькими сервоприводами, стоит обратить внимание на плату расширения Multiservo Shield.
Сервоприводы с обратной связью
В сервоприводах PDM постоянного вращения также встречаются модели с обратной связью, у которых сигнал внутреннего потенциометра выведен отдельным проводом. Однако обратная связь показывает не скорость вращения вала, а его текущий угол поворота.
Обычно наличие сигнала обратной связи явно указывается в характеристиках сервопривода.
https://youtube.com/watch?v=j0GCYlct2vo
Питание сервопривода
Существует два метода подключения напряжения к серво: без использования внешнего источника питания и с его применением.
Без внешнего источника питания
Если сервопривод питается напряжением 5 вольт и потребляет ток менее 500 мА, можно запитать сервомотор непосредственно от контроллера.
| Цвет провода | Контакт | Функция | Подключение |
|---|---|---|---|
| Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Подключите к пину ввода-вывода микроконтроллера. |
| Красный | V | Питание | Подключите к питанию микроконтроллера. |
| Коричневый / Чёрный | G | Земля | Подключите к земле микроконтроллера. |
С внешним источником питания
Если сервопривод работает на напряжении выше 5 вольт или требует ток более 500 мА, ему потребуется внешний источник питания с соответствующими параметрами.
| Цвет провода | Контакт | Функция | Подключение |
|---|---|---|---|
| Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Соедините с пином ввода-вывода микроконтроллера. |
| Красный | V | Питание | Подключите к внешнему источнику питания с необходимым напряжением. |
| Коричневый / Чёрный | G | Земля | Соедините с землёй внешнего источника питания и землёй микроконтроллера. |
Примеры работы для Arduino
Возьмём для тестовых проектов популярный сервопривод Feetech FS90R. А мозгом выступит платформа Arduino Uno.
Подключение и настройка
Для лучшего понимания схемы мы подключаем сервопривод непосредственно к контроллеру, без использования внешнего источника питания. Если вам требуется дополнительный блок питания, ознакомьтесь с схемами в разделе, посвященном питанию сервопривода.
Сервоприводы: руководство по использованию для Arduino
Сервопривод — это электродвигатель с редуктором и блоком управления в одном корпусе.
Сервоприводы используются для открывания/закрывания заслонок, поворота различных механизмов на заданный градус и в качестве суставов при создании разнообразных DIY-роботов.
Элементы сервопривода
Давайте изучим ключевые компоненты сервопривода.
Электромотор
За преобразование электрической энергии в механическую отвечает электромотор. В зависимости от модели, сервопривод может быть наделён одним из трёх видов моторов:
- Коллекторный мотор с сердечником (Brush motor)
- Коллекторный мотор без сердечника (Coreless motor)
- Бесколлекторный мотор (Brushless motor)
Редуктор
На практике наблюдается, что скорость вращения мотора зачастую оказывается слишком высокой, в то время как крутящий момент, напротив, слишком низким. Для решения этих двух задач выходной вал мотора соединяется с набором шестеренок, которые позволяют увеличить крутящий момент, одновременно снижая скорость вращения выходного вала.
Шестерни редуктора могут быть выполнены из пластика или металла.
- Пластиковые шестерни изготавливаются из таких материалов, как силикон или нейлон. Они легкие и недорогие, однако не способны выдерживать значительные нагрузки. Сервоприводы с пластиковыми редукторами пользуются популярностью в любительских проектах.
- Металлические шестерни производятся из латуни или меди. Они тяжелые и стоят дороже, но при этом способны справляться с большими нагрузками. Сервоприводы с металлическими редукторами используются в устройствах, где необходима высокая сила и мощность.
Выходной вал
Выходной вал сервопривода — это последняя шестерёнка редуктора, которая выведена за пределы корпуса. К выходному валу крепится требуемая нагрузка: например качалка, втулка, тянущие или толкающие механизмы. Диаметр выходного вала и количество на нём зубьев отличается между разными моделями сервоприводов.
Схема управления
В сервоприводе имеется схема управления, предназначенная для обработки входного сигнала от внешнего контроллера.
- В сервоприводах с угловым удержанием блок управления получает импульсы, сопоставляет их с данными датчика обратной связи и на основе этого управляет работой мотора.
- В сервоприводах с постоянным вращением блок управления принимает импульсы и преобразует их в непрерывное вращение с установленной скоростью.
Схема управления может быть как аналоговой, так и цифровой.
В аналоговом сервоприводе входные данные от внешнего контроллера обрабатываются логической микросхемой. Аналоговый чип принимает внешние импульсы с частотой 50 Гц, что приводит к времени реакции мотора около 20 мс.
В цифровом сервоприводе входные данные обрабатываются встроенным микроконтроллером. Контроллер также принимает внешние импульсы с частотой 50 Гц, но способен увеличить внутреннюю частоту сигнала до 500 Гц. В результате время реакции мотора может быть сокращено до 2 мс.
Характеристики сервопривода
Рассмотрим основные характеристики сервопривода.
Крутящий момент
Крутящий момент играет ключевую роль в ускорении выходного вала и его способности преодолевать сопротивление вращению. Чем выше значение крутящего момента, тем больше возможностей открывается у мотора для реализации своего потенциала.
Расчет крутящего момента осуществляется путем умножения максимального веса груза на длину рычага, который может удерживать сервопривод. При увеличении длины рычага максимальный вес груза пропорционально уменьшается и наоборот. Например, если крутящий момент составляет 10 кг·см:
- Сервопривод сможет удерживать груз весом 10 кг на рычаге длиной 1 см.
- Сервопривод сможет удерживать груз весом 5 кг на рычаге длиной 2 см.
- Сервопривод сможет удерживать груз весом 1 кг на рычаге длиной 10 см.
Скорость поворота
Скорость поворота — это время, за которое выходной вал сервопривода успевает повернуться на 60°. Из неё можно вычислить скорость в оборотах в минуту для сервопривода постоянного вращения.
Размеры
Сервоприводы с удержанием угла
Сервоприводы с удержанием угла — это моторы, которые преобразуют управляющие сигналы в установку и удержание заданного угла.
Интерфейс управления
Для управления мотором с постоянным вращением требуется специальный сигнал PDM (модуляция ширины импульса) — это импульсы с фиксированной частотой и переменной шириной. Когда внешний контроллер отправляет управляющий импульс, внутренняя начинка сервопривода формирует свой сигнал для мотора.
В сигнале PDM частота импульсов остается неизменной и составляет 50 Гц, что означает, что период подачи импульсов равен 20 мс. Однако ширина импульса варьируется, и именно она определяет направление и скорость вращения мотора. Обычно считается, что рабочая ширина импульса находится в диапазоне от 544 до 2400 мкс.
Примеры работы
Сервоприводы постоянного вращения
Сервоприводы с постоянным вращением представляют собой двигатели, которые преобразуют управляющие сигналы в определённую скорость вращения вала в любом направлении, не имея ограничений по углу поворота.
Control a Servo Motor with Arduino
A servo motor
Introduction
In a typical robot, there are usually a few movable parts. For example, a robotic arm may need to move in a particular direction and grab something. Such maneuvers require a high degree of precision, and a simple DC motor is not suitable for such tasks. Instead, servo motors are needed. Luckily, hobbyist servo motors are inexpensive and small. Perhaps more importantly, it is very easy to use an Arduino to control these small servo motors.
In this tutorial, we will learn:
- what is servo motor is,
- how to use an Arduino to control a servo motor
To achieve the above learning outcomes, we will build a simple gift box that can be opened an closed by a servo motor.
Open and close the box with a servo
Materials and Tools
- Arduino Uno x 1
- SG90 servo motor x 1
- Jumper wires
- Paper box x 1
Servo Motor
If you look at a servo motor closely, you will find that it actually has a DC motor inside. There is also a gear box attached to the motor.
Closer look of a servo motor
Through gearing, the rotation speed is lowered, and the output torque is increased. Other than the gear box, there is also a controlling circuit inside a servo motor. To understand more about how a servo motor works, you may read this nice article from ScienceBuddies. We will focus on controlling a servo motor instead.
Positional rotation servo
This time, we focus on positional servos. The shaft of this type of servo motors can typically rotate 180 degrees.
The shaft can move from 0 degree to 180 degree.
The angle position is controlled by a pulse-width-modulation (PWM) signal. For instance, to control the servo motor we use in this tutorial, the SG90, we need to use 50 Hz PWM signal (i.e. the period is 20 ms) to control the servo motor. The angle position is controlled by the duty cycle of the PWM signal. The shaft of the SG90 will rotate to the following positions according to different values of duty cycle:
| Angle position | Duty cycle (50 Hz PWM) |
|---|---|
| 0 degree | 5% (1 ms “on”) |
| 90 degree | 7.5% (1.5 ms “on”) |
| 180 degree | 10% (2 ms “on”) |
This is kind of messy. Luckily, the servo library of Arduino enables us to handle all of these with a few simple function calls.
Control the Servo with Arduino
First, let’s attach a shaft to the servo motor. The SG90 comes with different shafts, so you can choose the most suitable one for your projects.
Different shafts of SG90
Then, we need to connect the servo to the Arduino. The servo motor only has three cables: power (usually in red), ground (usually in brown) and signal (usually in orange). Connect the cables to the Arduino as follows.
| Servo motor | Arduino |
|---|---|
| Power | 5V |
| Ground | GND |
| Signal | Pin 9 |
Connecting the servo to the Arduino UNO
Then, we write a simple Arduino program to control the servo motor.
Upload the program to the Arduino, and the servo motor should move to the 0 degree and the 90 degree positions repeatedly.
The servo motor is moving!
Let’s look at the codes in details.
To use the servo motor library, we need to import the library with the #include preprocessor macro.
Then, we create an object representing the servo motor. Declaring an object of a class is just like declaring a variable.
An object of the Servo class has the necessary data structures and functions for controlling the servo motor.
NOTE: Object is an important concept of programming. Object oriented programming (OOP) is a paradigm used by many programming languages. You may refer to this W3Schools tutorial about OOP to know more about it.
In the setup function, we assign a pin for sending the PWM signal to the servo motor by calling the attach function of the myservo object.
NOTE: Although we use the PWM-capable pin 9 in the example, the servo library can be used with any digital output pin. That’s because the PWM frequency is just 50 Hz, and the Arduino can create the signal via bit-banging.
In the loop function, we simply call the write function of the myservo object to move the servo motor to a particular angle position.
The parameter of this function is the angle position, ranging from 0 to 180. Feel free to enter other values and see how the shaft moves. If you find any difficulties, you may check out the sample code here.
Attach the Servo to a Box
Let’s use the servo motor to open and close the lid of a paper box. Remove the servo motor from the Arduino, and following the steps below.
First, we make a hole near the hinge of the lid on a face of the box:
Then, put the top gear of the servo motor into the hole, and use glue to fix the servo motor to the box:
Next, we attach the shaft with one arm to the servo motor, and use a screw to fix the shaft.
Finally, we fix the shaft to the lid of the box with tape or glue.
Attach the servo motor to the Arduino again. The box can be opened and closed by the servo motor!
Conclusion and Assignment
Being able to control a servo motor with an Arduino is a huge step towards robotics. You may 3D print/laser cut a robotic arm like this one and use servo motors to drive the arm. With designs like the slider crank mechanism, you may even convert rotational motion into linear motion. There are just endless possibilities of projects based on servo motors.
To consolidate the knowledge, you may try the following assignment:
Use a potentiometer to control a servo that opens and closes the lid of the box.
Here’s the circuit diagram for your reference:
You may look at the sample code here. If you find any difficulties, you may also ask us via our Facebook page.
Работаем с сервоприводами
Внешний вид 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, а остальные ножки подключаются к питанию и земле.
Случайные повороты
Будем поворачивать серводвигатель на случайную величину. Практического смысла немного, но для демонстрации подойдёт.
Настройка параметров PWM для изменения скорости
Для изменения скорости вращения сервопривода на Arduino необходимо правильно настроить параметры широтно-импульсной модуляции (PWM). Сервоприводы управляются сигналами PWM, которые представляют собой последовательность импульсов с различной длительностью. Длительность импульса определяет угол поворота сервопривода, а частота этих импульсов влияет на скорость его вращения.
Сервоприводы обычно работают в диапазоне от 0 до 180 градусов, и для управления ими используется ширина импульса от 1 до 2 миллисекунд. При этом, чем больше ширина импульса, тем дальше сервопривод поворачивается. Чтобы изменить скорость вращения, необходимо управлять не только углом, но и временем, в течение которого сервопривод должен оставаться в этом положении.
Для настройки параметров PWM в Arduino можно использовать функцию analogWrite(pin, value), где pin — это номер пина, к которому подключен сервопривод, а value — значение от 0 до 255, которое определяет ширину импульса. Однако для управления сервоприводами чаще всего используется библиотека Servo, которая упрощает работу с ними.
С помощью библиотеки Servo можно задать угол поворота и контролировать скорость вращения. Для этого необходимо создать функцию, которая будет плавно изменять угол сервопривода с заданной скоростью. Например:
Servo myServo;
int pos = 0; // Начальная позиция
void setup() {
myServo.attach(9); // Подключаем сервопривод к пину 9
}
void loop() {
// Увеличиваем угол от 0 до 180
for (pos = 0; pos <= 180; pos += 1) {
myServo.write(pos); // Устанавливаем угол
delay(15); // Задержка для плавного движения
}
// Уменьшаем угол от 180 до 0
for (pos = 180; pos >= 0; pos -= 1) {
myServo.write(pos); // Устанавливаем угол
delay(15); // Задержка для плавного движения
}
}
В этом примере используется функция delay(15), которая определяет скорость вращения сервопривода. Чем меньше значение задержки, тем быстрее будет вращаться сервопривод. Вы можете экспериментировать с этим значением, чтобы добиться желаемой скорости. Например, если вы хотите, чтобы сервопривод вращался медленнее, увеличьте задержку до 30 или 50 миллисекунд.
Также можно реализовать более сложные алгоритмы управления, например, используя переменные для хранения текущего и целевого углов, а затем плавно изменять угол с помощью цикла, который будет проверять, достигнут ли целевой угол. Это позволит вам более точно контролировать скорость и плавность движения сервопривода.
Важно помнить, что скорость вращения сервопривода также зависит от его конструкции и характеристик. Некоторые сервоприводы могут иметь ограничения по скорости, поэтому перед началом экспериментов с изменением скорости стоит ознакомиться с техническими характеристиками используемого устройства.
Вопрос-ответ
Как изменить скорость сервопривода?
Одним из распространённых методов управления является использование сигналов широтно-импульсной модуляции (ШИМ). ШИМ представляет собой передачу на серводвигатель электрических импульсов различной длительности. Изменение длительности импульса приводит к изменению среднего напряжения, подаваемого на двигатель, что, в свою очередь, регулирует его скорость.
Как управлять скоростью непрерывно вращающихся сервоприводов?
Серводвигатели непрерывного вращения. Управление осуществляется с помощью импульсного сигнала, длительность которого обычно варьируется от 1 до 2 миллисекунд, посылаемого каждые 20 миллисекунд (50 Гц). Импульс длительностью в одну миллисекунду соответствует максимальной скорости в одном направлении, а импульс длительностью в две миллисекунды — максимальной скорости в другом направлении.
Как изменить направление движения сервопривода?
На самом деле нет способа изменить угол поворота сервопривода, кроме как регулировкой конечных точек на передатчике. Но можно механически ограничить размах движения управляющей поверхности, переместив тягу к отверстию ближе к самому внутреннему на сервоприводе и к самому внешнему на качалке управляющей поверхности.
Как отрегулировать ход сервопривода?
Определив, какой диск управляет этой конечной точкой, вращайте его, пока сервопривод не будет настроен на нужную конечную точку для вашей задачи. Вращение диска против часовой стрелки увеличивает ход, а вращение диска по часовой стрелке — уменьшает.
Советы
СОВЕТ №1
Используйте функцию map() для преобразования значений. Это позволит вам легко изменять диапазон входных данных, например, от 0 до 180 градусов, в соответствующий диапазон скорости вращения сервопривода. Это поможет вам добиться более точного контроля над движением.
СОВЕТ №2
Экспериментируйте с задержками между командами. Использование функции delay() или millis() для управления временем между изменениями угла может значительно повлиять на скорость вращения. Попробуйте разные значения задержки, чтобы найти оптимальную скорость для вашего проекта.
СОВЕТ №3
Обратите внимание на питание сервопривода. Убедитесь, что ваш сервопривод получает достаточное напряжение и ток. Неправильное питание может привести к снижению производительности и нестабильной работе, что повлияет на скорость вращения.
СОВЕТ №4
Используйте библиотеку Servo для более удобного управления. Эта библиотека предоставляет простые функции для установки угла и управления скоростью, что значительно упростит вашу работу с сервоприводом и позволит сосредоточиться на других аспектах проекта.
