Сервопривод SG90 и Arduino: схема подключения, распиновка и скетч
Сервопривод — это мотор, который поворачивается не «пока подаётся ток», а на заданный угол и там удерживается. Внутри него редуктор, потенциометр и небольшая плата, которая сама следит за положением вала. Поэтому серво не нужен драйвер: достаточно питания и одного управляющего провода.
SG90 — самая распространённая модель: синяя коробочка размером со спичечный коробок, поворот от 0 до 180 градусов, усилие около 1,5 кг на сантиметр. Ей управляют импульсами: плата пятьдесят раз в секунду посылает импульс, а его длина — от одной до двух миллисекунд — задаёт угол. Считать эти импульсы вручную не придётся, за это отвечает библиотека.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| Коричневый | Земля, GND. Идёт на любой пин GND платы. |
| Красный | Питание +5 В. При нагрузке лучше брать не с платы, а от отдельного источника. |
| Оранжевый | Сигнал. Любой цифровой пин, но удобнее с пометкой «~» — ШИМ. |
Характеристики
- Напряжение питания
- 4,8–6 В
- Ток под нагрузкой
- до 700 мА в пике
- Угол поворота
- 0–180°
- Усилие
- около 1,5 кг·см
- Частота управления
- 50 Гц, импульс 1–2 мс
Библиотека
Servo— Библиотека Servo идёт в комплекте с Arduino IDE — в старых версиях она уже стоит, в новых её ставят одним щелчком через менеджер библиотек. Подключается первой строкой скетча.
Готовый скетч
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9); // сигнальный провод на пин 9
}
void loop() {
// плавно поворачиваем от 0 до 180 градусов
for (int angle = 0; angle <= 180; angle++) {
myServo.write(angle);
delay(15); // 15 мс на градус — успевает доехать
}
// и обратно
for (int angle = 180; angle >= 0; angle--) {
myServo.write(angle);
delay(15);
}
}Скетч собирается arduino-cli под Arduino UNO
Задержка в пятнадцать миллисекунд не украшение: без неё цикл пролетит мгновенно, а вал физически не успеет повернуться — вы увидите рывок в конечное положение вместо плавного хода.
Частые ошибки
Серво дёргается, плата перезагружается
Классика при питании от USB. В момент старта мотор берёт большой ток, напряжение проседает, микроконтроллер уходит в перезагрузку. Лечится отдельным источником пять вольт на серво и общей землёй с платой.
Перестал работать analogWrite на пинах 9 и 10
Библиотека Servo забирает себе таймер, который на Uno отвечает за ШИМ этих двух пинов. Это не поломка — просто перенесите светодиод или другой ШИМ-выход на пин 3, 5, 6 или 11.
Гудит в крайних положениях
Дешёвые SG90 редко имеют честные 0 и 180 градусов. Упёршись в механический предел, мотор продолжает тянуть и гудит. Ограничьте диапазон десятью и ста семьюдесятью градусами.
Перепутаны провода
У SG90 земля коричневая, а не чёрная, — на этом спотыкаются те, кто привык к обычным проводам. Красный всегда посередине, это удобный ориентир.
Что понадобится
- Сервопривод SG90
- Arduino UNO
- Провода «папа-мама»