Урок 21: Управление Сервоприводом
1. Введение
Серводвигатель — это роторный актуатор с управлением положением. Он состоит из корпуса, платы управления, мотора, шестерён и датчика положения. В этом уроке мы рассмотрим принцип работы и управление сервоприводами с помощью Arduino.
2. Принцип работы
Микроконтроллер (MCU) выдает сигнал на серводвигатель. Двигатель имеет встроенную схему обратной связи, которая формирует сигнал с циклом 20 мс и шириной 1–2 мс. Двигатель сравнивает полученное напряжение с напряжением потенциометра и выдает разницу. Микросхема определяет направление вращения и управляет мотором. Шестерни передают силу на вал, а датчик определяет, достиг ли вал командной позиции.
Сервоприводы имеют три провода: коричневый (GND), красный (VCC), оранжевый (сигнал). Цвета могут отличаться в зависимости от бренда.
Сервоприводы используются в системах управления, требующих поддержания различных углов. Обычно диапазон угла вращения составляет от 0 до 180 градусов.
Цвет |
Назначение |
Куда подключать |
|---|---|---|
Коричневый/Чёрный |
GND |
GND Arduino |
Красный |
VCC (+5V) |
5V Arduino |
Оранжевый/Жёлтый/Белый |
Сигнал (PWM) |
Цифровой пин Arduino (обычно 9) |
Предупреждение
Если вы используете несколько сервоприводов или мощные модели, обязательно используйте отдельный источник питания для сервоприводов, чтобы не повредить Arduino!
3. Необходимое оборудование
Кол-во |
Деталь |
|---|---|
1 |
Плата Arduino UNO |
1 |
9G Сервомотор |
3 |
Перемычки |
1 |
USB-кабель |
4. Подключение
Коричневый — GND
Красный — 5V
Оранжевый — цифровой пин 9 (сигнал)
5. Принципы управления
Угол поворота сервомотора контролируется скважностью сигнала ШИМ (широтно-импульсная модуляция). Стандартный цикл сигнала — 20 мс (50 Гц), ширина импульса — от 1 до 2 мс (угол от 0° до 180°). Для разных брендов значения могут отличаться.
6. Методы управления
Существует два способа управления сервоприводом с Arduino:
Ручное формирование ШИМ-сигнала (без библиотеки)
Использование библиотеки Servo (рекомендуется)
Метод 1: Ручной ШИМ
Подключите двигатель к цифровому пину 9. Скомпилируйте программу для управления двигателем, чтобы он вращался под командным углом и отображал угол на экране.
int servopin = 9; // выбор цифрового пина 9 для сигнальной линии сервомотора
int myangle; // инициализация переменной угла
int pulsewidth; // инициализация переменной ширины импульса
int val;
void servopulse(int servopin, int myangle) // определение функции импульса серво
{
pulsewidth = (myangle * 11) + 500; // преобразование угла в ширину импульса 500-2480
digitalWrite(servopin, HIGH);
delayMicroseconds(pulsewidth);
digitalWrite(servopin, LOW);
delay(20 - pulsewidth / 1000);
}
void setup()
{
pinMode(servopin, OUTPUT);
Serial.begin(9600);
Serial.println("servo=o_seral_simple ready");
}
void loop()
{
val = Serial.read();
if (val >= '0' && val <= '9')
{
val = val - '0';
val = val * (180 / 9);
Serial.print("moving servo to ");
Serial.print(val, DEC);
Serial.println();
for (int i = 0; i <= 50; i++)
{
servopulse(servopin, val);
}
}
}
Метод 2: Библиотека Servo
Этот способ проще и надёжнее. Подключите серво к пину 9.
#include <Servo.h>
Servo myservo;
void setup(){
myservo.attach(9); // выбор пина серво (9 или 10)
}
void loop(){
myservo.write(90); // установка угла вращения мотора
}
Основные команды библиотеки Servo:
attach(pin)— выбор пина для сервоwrite(angle)— установка угла (0–180)read()— чтение текущего углаattached()— проверка, подключён ли сервоdetach()— отключение серво от пина
7. Результат теста
Загрузите один из примеров кода на Arduino. Серво повернётся на заданный угол. Если подключить Serial Monitor и отправлять цифры 0–9, можно управлять углом вручную (метод 1).
8. Частые ошибки
Серво дёргается или не двигается — недостаточно питания, плохой контакт или ошибка в подключении.
Серво греется — не отключён после движения (используйте detach()), либо слишком большой ток.
Не реагирует на команды — проверьте правильность пинов и библиотеку.
9. Практические задачи
Управляйте сервоприводом с помощью потенциометра.
Сделайте «умный замок» или шлагбаум.
Реализуйте плавное движение серво с помощью цикла.
10. Идеи для расширения
Управление несколькими сервоприводами (с внешним питанием)
Управление с помощью потенциометра или кнопок
Реализация обратной связи по положению
Использование сервоприводов в робототехнике, моделях, автоматике
Подробнее о библиотеке Servo: https://www.arduino.cc/reference/en/libraries/servo/
См. также
⚙️ Моторы и движение:
Урок 22: Шаговый Двигатель — Шаговый двигатель
Урок 26: Джойстик-модуль — Управление джойстиком
🤖 Робототехнические проекты:
См. раздел Car Kit для работы с сервоприводами в робототехнике
🔗 Управление и интерфейсы:
Урок 15: Чтение аналогового значения с потенциометра — Аналоговое чтение (потенциометр)
Урок 6: Светодиод, Управляемый Кнопкой — Управление кнопками