Полное руководство по управлению сервоприводами с Arduino
Что такое сервопривод?
Сервопривод — это замкнутая система с обратной связью по положению, обеспечивающая точный контроль угла поворота вала. В промышленных сервоприводах используется энкодер, в хоббийных (RC) — потенциометр.

Потенциометр на выходном валу выдаёт напряжение, пропорциональное углу. Контроллер сравнивает его с целевым значением (задаваемым импульсом) и через H-мост вращает мотор до совпадения.

Как работают хоббийные сервоприводы
Внутри: DC-мотор, редуктор, потенциометр, управляющая плата. Редуктор снижает скорость (~60 об/мин) и увеличивает крутящий момент. Потенциометр на выходном валу даёт обратную связь.

Управление — последовательность импульсов 50 Гц (период 20 мс). Ширина импульса задаёт угол:
- 1 мс (0.5–1 мс) → 0°;
- 1.5 мс → 90°;
- 2 мс (2–2.5 мс) → 180°.

Точные минимум/максимум зависят от модели (проверяйте даташит).
Популярные модели для Arduino
| Параметр | SG90 Micro Servo | MG996R |
|---|---|---|
| Удержанный момент | 1.2 кг·см @4.8V, 1.6 кг·см @6V | 11 кг·см @4.8V, 13 кг·см @6V |
| Напряжение питания | 3.5–6 V | 4.8–7.2 V |
| Ток холостого хода | 100 мА | 220–250 мА |
| Пусковой ток | 650 мА | 2.5 А (оригинал), ~0.6 А (клон) |
| Скорость (60°) | 0.12 с | 0.20 с |
| Вес | 9 г | 55 г |

Подключение к Arduino
Схема
- Сигнальный провод сервы → любой цифровой пин Arduino (например, D9);
- Красный (VCC) и коричневый/чёрный (GND) → внешний источник 5V (общий GND с Arduino);
- Для SG90 *можно* питать от 5V Arduino (макс. 500 мА по USB, 1А от БП), но лучше всегда использовать внешний БП.


Компоненты
- Сервопривод MG996R или SG90;
- Arduino;
- БП 5V 2А (для MG996R — 5V 6А);
- Перемычки.
Программное управление
Ручная генерация импульсов (без библиотеки)
#define servoPin 9
void setup() {
pinMode(servoPin, OUTPUT);
}
void loop() {
// Импульс каждые 20 мс
digitalWrite(servoPin, HIGH);
delayMicroseconds(1450); // 1.45 мс = 90°
digitalWrite(servoPin, LOW);
delayMicroseconds(18550); // остаток до 20 мс
// 600 мкс = 0°, 1450 = 90°, 2300 = 180° (подстройте под свою серву)
}
Использование библиотеки Servo.h (рекомендуется)
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9, 600, 2300); // пин, мин. импульс (мкс), макс. импульс
}
void loop() {
myservo.write(0); delay(1000);
myservo.write(90); delay(500);
myservo.write(135); delay(500);
myservo.write(180); delay(1500);
}
attach(pin, min, max) позволяет откалибровать крайние положения под конкретную серву.
Управление множеством сервоприводов
Библиотека Servo.h поддерживает до 12 серв на обычных платах и 48 на Arduino Mega. Создаём объект для каждой сервы:
#include <Servo.h>
Servo servo1, servo2, servo3, servo4, servo5;
void setup() {
servo1.attach(8); servo2.attach(9); servo3.attach(10);
servo4.attach(11); servo5.attach(12);
}
void loop() {
servo1.write(0); servo2.write(0); servo3.write(0); servo4.write(0); servo5.write(0);
delay(2000);
servo1.write(90); servo2.write(90); servo3.write(90); servo4.write(90); servo5.write(90);
delay(2000);
servo1.write(180); servo2.write(180); servo3.write(180); servo4.write(180); servo5.write(180);
delay(2000);
}
Драйвер PCA9685 — 16 и более серв по I2C
PCA9685 — 16-канальный 12-битный PWM-драйвер с I2C. Можно каскадировать до 62 модулей (992 сервы) на двух проводах.

Адреса задаются перемычками A0–A5. Необходимо отдельное питание для серв.

Код для PCA9685 (библиотека NachtRaveVL/PCA9685-Arduino)
#include <Wire.h>
#include "PCA9685.h"
PCA9685 driver;
PCA9685_ServoEvaluator pwmServo(102, 470); // 0.5мс=102, 2.5мс=512 (12 бит = 4096 шагов)
void setup() {
Wire.begin();
Wire.setClock(400000);
driver.resetDevices();
driver.init(B000000); // Адрес I2C
driver.setPWMFrequency(50); // 50 Гц
}
void loop() {
driver.setChannelPWM(0, pwmServo.pwmForAngle(-90)); delay(1000);
driver.setChannelPWM(0, pwmServo.pwmForAngle(0)); delay(1000);
driver.setChannelPWM(0, pwmServo.pwmForAngle(90)); delay(1000);
}
Для каждой сервы можно создать свой ServoEvaluator с индивидуальными min/max/center.
Несколько драйверов PCA9685
Создаём отдельный объект PCA9685 для каждого модуля, настраиваем адреса, частоту 50 Гц. Управление — теми же setChannelPWM() и pwmForAngle().
Распространённые проблемы и решения
Серва дергается и перезагружает Arduino
Причина: пусковой ток сервы проседает питание Arduino. Решение: конденсатор 470–1000 мкФ между GND и 5V (развязывающий), и **обязательно внешний БП** для серв.
Серва не поворачивает на полный диапазон 0–180°
Причина: реальные мин/макс импульсы отличаются от стандартных. Решение: откалибруйте в attach(pin, min_us, max_us). Дефолт: 544 и 2400 мкс. Пример: myservo.attach(9, 600, 2300);.
Габариты и 3D-модели
3D-модели SG90 и MG996R доступны для скачивания на Thangs (ссылки в исходнике). Размеры на схемах ниже.


Часто задаваемые вопросы (FAQ)
- Как подключить сервопривод к Arduino?
- 3 провода: GND, VCC (5V) — к питанию, сигнальный — к цифровому пину Arduino. Общий GND обязателен.
- Может ли Arduino запитать сервопривод?
- Только малые (SG90) и только при питании Arduino от БП (не USB). Лучше всегда использовать отдельный 5V источник ≥2A.
- Сколько серв может управлять Arduino?
- До 12 (Uno/Nano) или 48 (Mega) через библиотеку Servo.h. С PCA9685 — сотни.
Заключение
Мы разобрали принцип работы, подключение, программирование (ручное и через библиотеки), управление множеством серв и расширение через PCA9685. Ключевые моменты: всегда используйте внешнее питание для серв, калибруйте мин/макс импульсы, добавляйте конденсатор для стабильности. Выбирайте серву под требуемый момент и скорость.
Производственный процесс
- Умная копилка: управление монетоприёмником на Arduino Nano
- Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Управление двумя шаговыми двигателями через джойстик на Arduino Nano — простой урок (Visuino)
- Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
- ThimbleKrox: управление мышью с пальца на Arduino Micro и MPU-6050
- Генерация музыкальных тонов на Arduino: полный спектр 88 клавиш пианино
- Подключение Arduino к NMEA-0183: пошаговое руководство
- Мастерство пайки алюминия: экспертные техники и практические советы
- Механика муфт: полное промышленное руководство