Підключіть коричневий дріт до GND, червоний до 5V, жовтий/оранжевий до PWM-піна (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) | Жовтий/Оранжевий | Білий | Жовтий / Оранжевий |
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. Інакше сигнал PWM не буде розпізнаватися сервоприводом.
Рекомендовані джерела живлення
| Кількість серво | Джерело | Струм |
|---|---|---|
| 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-сигнал) |
Як працює 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) Шумний сигнал PWM — використовуйте короткі проводи. 3) Механічне перешкоджання — перевірте, чи серво не впирається в обмежувач. 4) Серво намагається утримати позицію під навантаженням — зменшіть навантаження або використайте потужніше серво.
Серво не реагує на команди
Перевірте: 1) Правильність підключення — сигнальний дріт до PWM-піна, GND до GND. 2) Живлення — чи є 5V на червоному дроті. 3) Код — чи викликано attach() перед write(). 4) Пін — спробуйте інший PWM-пін (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() — це припинить генерацію PWM-сигналу. Серво перестане утримувати позицію і споживати струм. Для відновлення керування знову викличте myservo.attach(pin).
Механічні рекомендації
-
Не блокуйте рух серво вручну Примусова зупинка працюючого серво може пошкодити шестерні (навіть металеві) або перегріти мотор.
-
Уникайте крайніх позицій під навантаженням При 0° та 180° момент найменший. Якщо серво впирається в механічний упор під навантаженням — можливий перегрів.
-
Використовуйте гумові амортизатори При монтажі серво в конструкцію гумові втулки зменшують вібрацію та шум.
-
Перевіряйте діапазон руху Перед монтажем переконайтеся, що механізм не впирається в перешкоди у всьому діапазоні 0–180°.
-
Надавайте час на позиціонування MG90S рухається 60° за 0.12 с. Для повного повороту 180° потрібно ~0.36 с. Враховуйте це у
delay().