ELECTRONICS

Сервопривод 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 земля коричневая, а не чёрная, — на этом спотыкаются те, кто привык к обычным проводам. Красный всегда посередине, это удобный ориентир.

Что понадобится