Подключите коричневый провод к GND, красный к 5V, жёлтый/оранжевый к пину управления (D9). Используйте библиотеку Servo.h. Управляйте через myservo.write(угол) от 0° до 180°. Важно: для 2+ сервоприводов используйте внешнее питание 5–6V!
Как подключить сервопривод к Arduino?
Сервопривод имеет стандартный 3-проводной разъём. Цвет проводов может отличаться в зависимости от производителя, но функции всегда одинаковые.
flowchart LR
subgraph ARDUINO["🔌 Arduino UNO"]
AGND["GND"]
A5V["5V"]
D9["D9 (PWM ~)"]
end
subgraph SERVO["⚙️ MG90S"]
BROWN["🟤 Коричневый
(GND)"]
RED["🔴 Красный
(+5V)"]
ORANGE["🟠 Жёлтый/Оранж
(Signal)"]
end
AGND --> BROWN
A5V --> RED
D9 --> ORANGE
Цвета проводов у разных производителей
| Функция | TowerPro / MG90S | Futaba | JR / Hitec |
|---|---|---|---|
| GND (−) | Коричневый | Чёрный | Чёрный / Коричневый |
| VCC (+5V) | Красный | Красный | Красный |
| Signal (PWM) | Жёлтый/Оранжевый | Белый | Жёлтый / Оранжевый |
Пины Arduino для подключения сервоприводов
| Плата | PWM пины | Примечание |
|---|---|---|
| Arduino Uno / Nano | 3, 5, 6, 9, 10, 11 |
Рекомендовано: D9, D10 |
| Arduino Mega | 2–13, 44–46 |
До 48 сервоприводов одновременно |
| ESP32 | Любой GPIO | Используйте библиотеку ESP32Servo |
Библиотека Servo.h позволяет управлять сервоприводами на любом цифровом пине, не только PWM. Но для лучшей стабильности рекомендуются пины с аппаратным PWM.
Как правильно питать несколько сервоприводов?
Один MG90S потребляет 500–900 мА под нагрузкой. USB-порт Arduino даёт максимум 500 мА на всю плату. Поэтому для 2+ сервоприводов или мощных моделей обязательно внешнее питание.
flowchart LR
subgraph POWER["🔋 Внешний БП 5-6V"]
P_PLUS["+"]
P_MINUS["−"]
end
subgraph ARDUINO["🔌 Arduino"]
AGND["GND"]
D9["D9"]
D10["D10"]
end
subgraph SERVO1["⚙️ Серво 1"]
S1_GND["GND"]
S1_VCC["VCC"]
S1_SIG["Signal"]
end
subgraph SERVO2["⚙️ Серво 2"]
S2_GND["GND"]
S2_VCC["VCC"]
S2_SIG["Signal"]
end
P_PLUS --> S1_VCC
P_PLUS --> S2_VCC
P_MINUS --> S1_GND
P_MINUS --> S2_GND
P_MINUS --> AGND
D9 --> S1_SIG
D10 --> S2_SIG
Общая земля обязательна! GND внешнего БП должен быть соединён с GND Arduino. Иначе сигнал управления не будет корректно распознаваться сервоприводом.
Рекомендуемые источники питания
| Количество сервоприводов | Источник | Ток |
|---|---|---|
| 1 серво (лёгкая нагрузка) | 5V от Arduino | ~500 мА |
| 2–4 серво | БП 5V 2A или 4×AA батарейки | 2–3 А |
| 5+ серво / робот-рука | БП 5V 5A или LiPo 2S + BEC | 5+ А |
Конденсатор по питанию: добавьте электролитический конденсатор 470–1000 мкФ параллельно питанию сервоприводов для сглаживания пиков тока и защиты от "просадок".
Пример кода управления сервоприводом
Библиотека Servo.h входит в стандартный набор Arduino IDE — отдельно устанавливать не нужно.
Основные функции библиотеки Servo
| Функция | Описание |
|---|---|
attach(pin) |
Привязывает серво к пину. Можно указать мин/макс: attach(9, 500, 2500) |
write(angle) |
Устанавливает угол от 0 до 180 градусов |
writeMicroseconds(us) |
Точное управление: 500–2500 мкс (для калибровки) |
read() |
Возвращает последний заданный угол (0–180) |
attached() |
Возвращает true, если серво привязано к пину |
detach() |
Отключает серво (прекращает PWM-сигнал) |
Как работает управление сервоприводом?
Сервопривод управляется не напряжением, а шириной импульса (Pulse Width). Частота сигнала — 50 Гц (период 20 мс). Ширина импульса задаёт угол:
gantt
title PWM сигнал для сервопривода (период 20 мс)
dateFormat X
axisFormat %L мс
section 0°
Импульс 1 мс : 0, 1
Пауза : 1, 20
section 90°
Импульс 1.5 мс : 0, 1.5
Пауза : 1.5, 20
section 180°
Импульс 2 мс : 0, 2
Пауза : 2, 20
| Угол | Ширина импульса | writeMicroseconds() |
|---|---|---|
| 0° (минимум) | ~1.0 мс | 1000 |
| 90° (центр) | ~1.5 мс | 1500 |
| 180° (максимум) | ~2.0 мс | 2000 |
Калибровка: некоторые серво имеют более широкий диапазон (500–2500 мкс). Используйте myservo.attach(9, 500, 2500) для расширения рабочего угла или writeMicroseconds() для точного позиционирования.
Устранение проблем
Серво "дрожит" или дёргается на месте
Причины: 1) Недостаточное питание — добавьте внешний БП и конденсатор 470 мкФ. 2) Шумный сигнал управления — используйте короткие провода. 3) Механическое препятствие — проверьте, не упирается ли серво в ограничитель. 4) Серво удерживает позицию под нагрузкой — уменьшите нагрузку или используйте более мощное серво.
Серво не реагирует на команды
Проверьте: 1) Правильность подключения — сигнальный провод к пину управления, GND к GND. 2) Питание — есть ли 5V на красном проводе. 3) Код — вызван ли attach() перед write(). 4) Пин — попробуйте другой (D10, D11). 5) Серво — подключите другое серво для проверки.
Серво вращается не на полные 180°
Это нормально для многих серво. Реальный диапазон может быть 160–170°. Для расширения используйте: myservo.attach(9, 500, 2500) — это задаст диапазон импульсов 500–2500 мкс вместо стандартных 1000–2000 мкс. Но не превышайте механические ограничения сервопривода!
Arduino перезагружается при движении серво
Причина — просадка напряжения. Серво при старте потребляет пиковый ток ~1А, из-за чего "садит" USB-питание. Решение: питайте серво от отдельного БП 5V (не от Arduino). Соедините GND Arduino и БП.
Как управлять несколькими сервоприводами одновременно?
Создайте несколько объектов: Servo servo1, servo2, servo3; и привяжите к разным пинам: servo1.attach(9); servo2.attach(10);. Arduino Uno поддерживает до 12 сервоприводов, Mega — до 48. Для большего количества используйте PCA9685 — I²C-драйвер на 16 каналов PWM.
Как отключить серво для экономии энергии?
Используйте myservo.detach() — это прекратит генерацию управляющего сигнала. Серво перестанет удерживать позицию и потреблять ток. Чтобы снова управлять, вызовите myservo.attach(pin).
Механические рекомендации
-
Не блокируйте движение серво вручную Принудительная остановка работающего серво может повредить шестерни (даже металлические) или перегреть мотор.
-
Избегайте крайних положений под нагрузкой Вблизи 0° и 180° момент минимальный. Если серво упирается в механический упор под нагрузкой — возможен перегрев.
-
Используйте резиновые амортизаторы При монтаже серво в конструкцию резиновые втулки уменьшают вибрацию и шум.
-
Проверьте диапазон движения Перед монтажом убедитесь, что механизм не упирается в препятствия во всём диапазоне 0–180°.
-
Давайте время на позиционирование MG90S поворачивается на 60° за 0.12 с. Для полного поворота на 180° нужно ~0.36 с. Учитывайте это в
delay().