Схема подключения сервопривода к Arduino обычно следующая: черный провод присоединяем к GND, красный провод присоединяем к 5V, оранжевый/желтый провод к цифровому выводу общего назначения. Управление сервоприводом на Ардуино достаточно просто, но по углам поворота сервомоторы делятся на 180° и 360°, что следует учитывать при разработке проектов с применением servo.
Servo | Arduino Uno | Arduino Nano | Arduino Mega |
черный провод | GND | GND | GND |
красный провод | 5V | 5V | 5V |
желтый провод | 11 | 11 | 11 |
Сервомеханизмы, фильтры и поисковики в Thermal Dynamics
В первом скетче мы рассмотрим как управлять сервоприводом на Arduino с помощью команды myservo.write(0) . Также мы будем использовать стандартную библиотеку Servo.h . Подключите сервомашинку к плате Ардуино, согласно схеме на фото выше и загрузите готовый скетч. В процедуре void loop() мы будем просто задавать для сервопривода необходимый угол поворота и время ожидания до следующего поворота.
Скетч для управления сервопривода от Ардуино
#include Servo.h> // подключаем библиотеку для работы с сервоприводом Servo servo1; // объявляем переменную servo типа «servo1» void setup() < servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11 > void loop() < servo1.write(0); // ставим угол поворота под 0 delay(2000); // ждем 2 секунды servo1.write(90); // ставим угол поворота под 90 delay(2000); // ждем 2 секунды servo1.write(180); // ставим угол поворота под 180 delay(2000); // ждем 2 секунды >
Пояснения к коду:
- переменная Servo необходима, чтобы не запутаться при подключении нескольких сервоприводов к Ардуино. Мы назначаем каждому приводу свое имя;
- команда servo1.attach(10) привязывает привод к цифровому выходу 10.
- в программе мы вращаем привод на 0-90-180 градусов и возвращаем в начальное положение, поскольку процедура void loop повторяется циклично.
Плавное вращение сервомотора от Ардуино
Управление скоростью вращения сервомотора Ардуино сделать довольно просто, если вы знакомы с циклами for или while в языке программирования Arduino. Рассмотрим, как сделать плавные повороты серво от 0 до 90 градусов, используя циклы. Представленные на этой странице примеры программ позволят вам использовать сервоприводы в различных проектах, где требуется плавный поворот.
Скетч для плавного поворота сервомотора Ардуино
#include «Servo.h» Servo servo; int angle; // переменная для угла поворота микро серво void setup() < servo.attach(11); // пин для подключения микро серво > void loop() < // цикл для поворота от 0 до 90 градусов for (angle = 0; angle write(angle); // сообщаем микро серво угол поворота delay(20); // ждем 20 мс, пока серво не сделает поворот > // цикл для поворота от 90 до 0 градусов for (angle = 90; angle >= 0; angle—) < servo.write(angle); // сообщаем микро серво угол поворота delay(20); // ждем 20 мс, пока серво не сделает поворот > >
Пояснения к коду:
- максимальный угол для плавного поворота микросерво — 180 градусов;
- увеличивая задержку delay(20); , можно замедлить скорость поворота.
Также вам будет полезны следующие статьи:
Заключение. Сервомоторы часто используются в различных проектах на Ардуино для различных функций: повороты конструкций, движение частей механизмов. Так как серво Arduino постоянно стремится удерживать заданный угол поворота, то будьте готовы к повышенному расходу электроэнергии. Это будет особенно чувствительно в автономных роботах, питающихся от аккумуляторов или батареек.
Источник: xn--18-6kcdusowgbt1a4b.xn--p1ai
Arduino и сервопривод
Сервопривод, он же сервомашинка, он же просто серво – простейший “модельный” актуатор, использовался в радиоуправляемых моделях ещё до появления Ардуино. Сервопривод поворачивает свой выходной вал в диапазоне ~180 градусов и обладает вполне приличным моментом для перемещения частей механизмов. В маленьком корпусе располагаются:
- Коллекторный моторчик
- Редуктор (пластиковый или металлический)
- Потенциометр обратной связи
- Контроллер (драйвер мотора, обратная связь, управление по интерфейсу PWM)
Серво комплектуется набором “качалок” и винтами для крепления
Характеристики 9-граммового сервопривода:
- Напряжение питания: 3.. 7.2V
- Крутящий момент:
- 1.2кг/см при 4.8V
- 1.6кг/см при 6.0V
Сервопривод управляется ШИМ сигналом, точнее длиной импульса: минимальная (0 градусов) и максимальная (~180 градусов) длина импульса колеблется в зависимости от модели и производителя сервопривода.
Подключение
- Коричневый: GND
- Красный: VCC
- Жёлтый: цифровой пин
Примечание: сервопривод потребляет довольно приличный ток (стартовый до 1А), поэтому рекомендуется питать его от внешнего источника. При питании от компьютера напряжение может просесть и МК перезагрузится, при высокой нагрузке (с 2 и больше приводов) может выгореть защитный диод на плате Arduino!
Библиотеки
Для управления сервоприводом можно использовать стандартную библиотеку Servo. Эта библиотека отбирает у микроконтроллера первый таймер, поэтому в некоторых случаях будет удобно использовать библиотеку SoftServo. Стандартная библиотека управляет сервоприводом очень резко, на максимальной скорости, поэтому для реальных применений лучше использовать библиотеку плавного движения серво – ServoSmooth.
Servo.h
Библиотека стандартная и идёт в комплекте с Arduino IDE. Подключаем и создаём объект сервопривода. При создании никакие аргументы не передаются:
#include Servo myservo;
Библиотека имеет следующие методы:
uint8_t attach(int pin); // «подключить» с указанием пина uint8_t attach(int pin, int min, int max); // «подключить» с указанием пина и мин. макс. сигнала void detach(); // отключить void write(int value); // повернуть на угол в градусах void writeMicroseconds(int value); // повернуть на длину импульса
При “подключении” серво через attach(pin) диапазон длины импульса устанавливается стандартный: 544.. 2400 мкс (задан в библиотеке). Если есть желание настроить серво идеально, чтобы она работала на весь диапазон – нужно попробовать покрутить её через writeMicroseconds() в крайних значениях диапазона и найти минимум и максимум, при которых серво “упирается”.
Примеры
Крутим туда сюда быстро
Вращаем туда сюда быстро (как blink, только серво):
#include Servo myservo; void setup() < myservo.attach(3); // подключаем на пин 3 >void loop() < myservo.write(0); // поворот на 0 градусов delay(1000); myservo.write(180); // поворот на 180 градусов delay(1000); >
Крутим туда сюда плавно
Поворачиваем туда сюда плавно, блокирующее выполнение:
#include Servo myservo; void setup() < myservo.attach(3); >void loop() < for (int i = 0; i for (int i = 180; i > 0; i—) < myservo.write(i); delay(15); >>
Крутим туда сюда плавно асинхронно
Поворачиваем туда сюда плавно, асинхронное выполнение:
#include Servo myservo; void setup() < myservo.attach(3); >uint32_t tmr; // переменная таймера int val = 0; // переменная яркости int dir = 2; // скорость и направление яркости void loop() < // асинхронный таймер на миллис if (millis() — tmr >= 20) < tmr = millis(); val += dir; // прибавляем скорость if (val >= 180|| val >
Домашнее задание
- Попробовать библиотеку ServoSmooth
Связанные уроки
- Документация на ServoSmooth
- Функции времени
Источник: kit.alexgyver.ru
Как работает сервомотор SG90 и как его подключить к ESP32
Сервомотор (серводвигатель) – это двигатель, используемый для точного управления движениями устройства. Обычно он состоит из электродвигателя постоянного тока, схемы управления и механизма обратной связи. Механизм обратной связи необходим для получения информации о положении оси двигателя – она необходима схеме управления для управления двигателем. Сервомоторы находят широкое применение в робототехнике, станках с ЧПУ, 3D принтерах и других устройствах, где требуется точное управление каким либо механизмом.
В данной статье мы рассмотрим принципы работы сервомотора SG90 и его подключение к модулю ESP32. Также на нашем сайте мы рассматривали подключение серводвигателя к другим микроконтроллерам (платам):
- к микроконтроллеру AVR;
- к микроконтроллеру PIC;
- к плате Arduino Uno;
- к плате Arduino с использованием Matlab;
- к плате Raspberry Pi;
- к плате Raspberry Pi Pico;
- к плате MSP430G2;
- к плате STM32F103C8 (Blue Pill).
Необходимые компоненты
- Модуль ESP32 (купить на Aliexpress).
- Сервомотор SG90 (купить на Aliexpress).
Как управлять углом поворота сервомотора?
Работа сервомотора состоит в управлении углом поворота оси в системе с замкнутым циклом управления и использовании механизма обратной связи (feedback) для настройки скорости и угла поворота оси.
Сервомотор SG90, который мы будем использовать в нашем проекте, представляет собой систему с замкнутым циклом управления. Чтобы управлять углом поворота его оси необходим сигнал ШИМ (широтно-импульсной модуляции) с частотой 50 Гц и изменяемым коэффициентом заполнения. Его плата управления настроена таким образом, чтобы принимать импульс каждые 20 мс, длина этого импульса определяет угол поворота оси сервомотора. Если импульс имеет длительность 1 мс, то ось сервомотора будет в нулевом положении (0 градусов). Импульс длительностью 1,5 мс повернет ось сервомотора на угол 90 градусов, а импульс длительностью 2 мс – на угол 180 градусов.
Компоненты сервомотора SG90
SG90 является одним из самых дешевых и распространенных серводвигателей, его компоненты показаны на следующем рисунке.
Как вы можете видеть из представленного рисунка, сервомотор SG90 состоит из понижающего редуктора, двигателя постоянного тока, потенциометра и платы управления. Потенциометр обеспечивает механизм обратной связи – текущая позиция оси сервомотора сравнивается с ее требуемой позицией.
Распиновка сервомотора SG90
Большинство сервомоторов, доступных в настоящее время на рынке, имеют 3 провода. Распиновка (назначение контактов) сервомотора SG90 представлена на следующем рисунке.
GND – контакт общего провода (земли).
VCC – контакт для подачи питающего напряжения на сервомотор.
Control – управляющий контакт сервомотора.
Наиболее часто задаваемые вопросы про сервомотор
Почему он называется сервомотором?
Сервомотор (серводвигатель) – это общий термин, используемый для обозначения конкретного вида линейных ли инкрементальных исполнительных механизмов. В основном, название сервомотор связывают с термином сервомеханизм, который обозначает что двигатель находится непрерывно под наблюдением для управления его движением.
Для чего используются сервомоторы?
Сервомоторы – это линейные исполнительные механизмы, которые могут поворачивать свою ось строго на определенный угол, поэтому используются в устройствах, в которых необходима точная регулировка положения какого либо механизма.
Сервомотор работает от постоянного (DC) или переменного тока (AC)?
Существует два типа сервомоторов – работающие от постоянного и переменного тока. Основное различие между ними заключается в способе подачи на них питания. Сервомоторы переменного тока получают питание от розетки, а сервомоторы постоянного тока – от батареек (аккумуляторов).
Какие существуют типы сервомоторов?
Сервомоторы выпускаются различных размеров трех основных типов: с позиционным вращением, непрерывным вращением и линейным вращением. Серводвигатели с позиционным вращением могут поворачиваться на 180 градусов. Они также имеют специальный механизм остановки в понижающем редукторе, играющий защитную функцию.
В чем разница между двигателем постоянного тока и сервомотором?
Сервомотор состоит из 4-х основных механизмов: двигателя постоянного тока, понижающего редуктора, датчика положения и схемы управления, а двигатель постоянного тока сам по себе является отдельным механизмом и не включает в себя никаких дополнительных компонентов.
Схема проекта
Схема подключения сервомотора SG90 к модулю ESP32 представлена на следующем рисунке.
Как видите, схема подключения достаточно проста. Необходимо подать питание на сервомотор, а его управляющий контакт подключить к любому цифровому контакту (GPIO pin) модуля ESP32.
Внешний вид собранной на макетной плате конструкции проекта показан на следующем рисунке.
Объяснение кода программы
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Прежде чем приступать к написанию программы вам необходимо скачать библиотеку esp32 servo motor и установить ее в Arduino IDE.
Первым делом в коде программы подключим библиотеку Servo.h и создадим объект для работы с сервомотором. Затем объявим переменную pos , в которой будем хранить информацию о положении оси сервомотора.
Источник: microkontroller.ru