Урок 21: Управление Сервоприводом

1. Введение

Внешний вид сервопривода

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

2. Принцип работы

Микроконтроллер (MCU) выдает сигнал на серводвигатель. Двигатель имеет встроенную схему обратной связи, которая формирует сигнал с циклом 20 мс и шириной 1–2 мс. Двигатель сравнивает полученное напряжение с напряжением потенциометра и выдает разницу. Микросхема определяет направление вращения и управляет мотором. Шестерни передают силу на вал, а датчик определяет, достиг ли вал командной позиции.

Схема подключения сервопривода к Arduino

Сервоприводы имеют три провода: коричневый (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. Подключение

Схема подключения сервопривода к Arduino
  • Коричневый — GND

  • Красный — 5V

  • Оранжевый — цифровой пин 9 (сигнал)

5. Принципы управления

Угол поворота сервомотора контролируется скважностью сигнала ШИМ (широтно-импульсная модуляция). Стандартный цикл сигнала — 20 мс (50 Гц), ширина импульса — от 1 до 2 мс (угол от 0° до 180°). Для разных брендов значения могут отличаться.

6. Методы управления

Существует два способа управления сервоприводом с Arduino:

  • Ручное формирование ШИМ-сигнала (без библиотеки)

  • Использование библиотеки Servo (рекомендуется)

Метод 1: Ручной ШИМ

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

servo_control.ino
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.

servo_lib.ino
#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/