Управление сервоприводом Arduino: от SG90 до 360° и лазерного рисования

В этом подробном руководстве разберём, как управлять сервоприводами Arduino — от самых популярных моделей SG90 и MG995 до сервоприводов непрерывного вращения 360°. Научимся подключать, программировать, избегать типичных ошибок и реализуем интересный проект — управление лазером двумя сервоприводами для рисования простых фигур.

Управление сервоприводом Arduino SG90 и MG995 с лазером

Что такое сервопривод и чем он отличается от шагового двигателя

Сервопривод (сервомотор) — это замкнутая система, состоящая из двигателя постоянного тока, редуктора, потенциометра (или другого датчика положения) и электронной платы управления. Главное преимущество — способность точно удерживать заданный угол благодаря обратной связи.

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

Устройство сервопривода — схема с обратной связью

Подключение сервопривода к Arduino

Стандартный сервопривод имеет три провода:

  • Красный — питание +4,8…6 В (обычно 5 В)
  • Коричневый/чёрный — GND
  • Оранжевый/жёлтый — сигнал (PWM)
Схема правильного подключения сервопривода SG90 к Arduino Uno

Важно: мощные сервоприводы (MG995, MG996R и др.) нельзя питать напрямую от 5V Arduino — это приведёт к просадкам напряжения, сбоям и даже выходу платы из строя. Используйте внешний источник 5–6 В и обязательно соединяйте общий GND.

Управление движением сервопривода

Положение вала задаётся длительностью импульса PWM (50 Гц, период 20 мс):

  • 544 мкс → 0°
  • 1520 мкс → 90°
  • 2400 мкс → 180°
Зависимость угла поворота сервопривода от длительности импульса

В библиотеке Servo.h по умолчанию используются 544 мкс для 0° и 2400 мкс для 180°. Скорость регулируется шагом и задержкой в коде.

Сервопривод SG90 — самый популярный выбор для начинающих

Микросервопривод SG90 — внешний вид и размеры

Характеристики SG90:

  • Угол поворота: 180°
  • Скорость: ~0,12 с/60° при 4,8 В
  • Крутящий момент: ~1,8 кг·см при 4,8 В
  • Питание: 4,8–6 В
  • Вес: всего 9 г

Совет: для продления срока службы и устранения треска устанавливайте крайние положения не 0°/180°, а 10°/170°.

Сервоприводы непрерывного вращения 360° (MG995/MG996R модификация)

Сервопривод MG995 в модификации непрерывного вращения

В отличие от обычных сервоприводов, здесь write() задаёт не угол, а скорость и направление:

  • 90 — полная остановка
  • 0 — максимальная скорость в одну сторону
  • 180 — максимальная скорость в другую сторону
Импульсы управления сервоприводом непрерывного вращения

Примеры кода для управления сервоприводом

Базовое управление одной сервой (0° → 180° → 0°)

#include <Servo.h>

Servo myservo;

void setup() {
  myservo.attach(9);          // пин 9
}

void loop() {
  myservo.write(10);          // безопасный минимум
  delay(1000);
  myservo.write(90);
  delay(1000);
  myservo.write(170);         // безопасный максимум
  delay(1000);
  myservo.write(90);
  delay(1000);
}
Использует библиотеку Servo для управления сервоприводом, подключённым к пину 9.
В setup() происходит привязка сервопривода к пину.
В loop() сервопривод последовательно перемещается:
в безопасное минимальное положение 10°,
в центр 90°,
в безопасное максимальное положение 170°,
снова в центр 90°, с паузами по 1 секунде между позициями.
Код реализует циклическое перемещение сервопривода между крайними и центральным положениями.

Плавное управление двумя сервоприводами

#include <Servo.h>

Servo servo1;
Servo servo2;

void setup() {
  servo1.attach(9);
  servo2.attach(10);
  servo1.write(90);
  servo2.write(90);
  delay(500);
}

void loop() {
  for (int pos = 10; pos <= 170; pos += 1) {
    servo1.write(pos);
    servo2.write(180 - pos);    // зеркальное движение
    delay(15);
  }
  delay(1000);
  for (int pos = 170; pos >= 10; pos -= 1) {
    servo1.write(pos);
    servo2.write(180 - pos);
    delay(15);
  }
  delay(1000);
}
Управляет двумя сервоприводами, подключёнными к пинам 9 и 10.
В setup() устанавливает оба сервопривода в среднее положение 90° и делает небольшую паузу.
В loop():
Первый цикл постепенно перемещает servo1 от 10° до 170°, а servo2 зеркально (от 170° до 10°).
Пауза 1 секунда.
Второй цикл возвращает сервоприводы обратно к исходным положениям, снова с зеркальной синхронизацией.
Реализует плавное зеркальное движение двух сервоприводов туда и обратно с задержкой 15 мс на каждый шаг.

Проект: рисование фигур лазером с помощью двух сервоприводов

Один из самых зрелищных проектов — создание простого XY-плоттера с лазерной указкой. Две обычные сервы управляют положением лазера по горизонтали и вертикали.

Проект рисования лазером с помощью двух сервоприводов Arduino

Для более плавного движения рекомендуется:

  • Использовать сервоприводы с металлическим редуктором
  • Добавить небольшую задержку между шагами
  • Калибровать крайние точки

Заключение

Сервоприводы — одно из самых востребованных устройств в проектах Arduino. SG90 идеально подходит для простых поделок, а модификации 360° — для колесных роботов и конвейеров. Главное — правильное питание, калибровка крайних положений и аккуратная работа с библиотекой Servo.h. Освоив управление сервоприводами, вы сможете создавать роботов, манипуляторы, умные замки, системы слежения и многое другое.

FAQ

Сколько сервоприводов можно подключить к Arduino Uno?

Библиотека Servo.h позволяет управлять до 12 сервоприводами на Arduino Uno/Nano. На Mega это число достигает 48 штук.

Можно ли питать сервопривод напрямую от Arduino?

Можно только слабые модели типа SG90 и то в небольшом количестве. Мощные сервоприводы обязательно питают от внешнего источника 5–6 В с общим GND.

Почему сервопривод трещит и дергается?

Чаще всего причина — недостаточная мощность источника питания или просадка напряжения. Также помогает ограничение крайних углов (10–170° вместо 0–180°).

Как управлять скоростью обычного сервопривода 180°?

Скорость регулируется величиной шага и задержкой в цикле for. Чем меньше шаг и больше delay — тем медленнее движение.

В чём разница write() для обычных и 360° сервоприводов?

Для 180° — write(значение) задаёт угол. Для 360° — задаёт скорость: 90 — стоп, 0 — максимум в одну сторону, 180 — максимум в другую.

Почему после Servo.h не работает analogWrite на пинах 9 и 10?

Библиотека Servo использует те же таймеры, что и analogWrite на пинах 9 и 10 (на Uno). На Arduino Mega такой проблемы нет.

Можно ли использовать SG90 для подъёма небольшого груза?

Да, но реальный крутящий момент составляет около 1,2–1,4 кг·см. Для надёжности лучше брать MG90S или MG996R с металлическим редуктором.