ELECTRONICS

Библиотека Servo

В менеджере библиотек
Servo by Michael Margolis, Arduino
Версия
1.3.0 · всего 17 версий, первая — 1.0.0
Платы
AVR — UNO, Nano, Mega, Pro Mini, Nano Every, UNO WiFi Rev2, Due, SAMD — Zero, MKR, Nano 33 IoT, nRF52, Raspberry Pi Pico, UNO R4 и ещё 7
СкачатьServo-1.3.0.zip · 130 КБ

Архивы — копии из официального индекса Arduino, контрольная сумма совпадает. Сверено 19.10.2026.

Управляет сервоприводами: задаёт угол, библиотека сама формирует нужные импульсы.

Сервопривод ждёт импульс длиной от одной до двух миллисекунд каждые двадцать миллисекунд, и длина импульса задаёт угол. Делать это вручную в loop() неудобно, поэтому Servo берёт таймер платы и генерирует импульсы сама: вы пишете угол, остальное происходит в фоне.

На UNO и Nano библиотека занимает таймер 1 — тот же, что даёт ШИМ на выводах 9 и 10. Пока хотя бы один сервопривод подключён через attach(), analogWrite() на этих двух выводах не работает. Подключить можно до двенадцати сервоприводов на любые цифровые выводы.

Как скачать и установить

  1. Через менеджер — самый простой путь. В Arduino IDE: Инструменты → Управлять библиотеками (Ctrl+Shift+I). Введите Servo и найдите в списке строку «Servo by Michael Margolis, Arduino» — одноимённых библиотек бывает несколько, отличаются они автором. Нажмите «Установить».
  2. Конкретная версия — если в чужом проекте указана не последняя. В той же карточке менеджера рядом с кнопкой есть выпадающий список версий: выберите нужную и нажмите «Установить».
  3. Из архива — если нет интернета на рабочем компьютере или менеджер не открывается. Скачайте ZIP выше, затем Скетч → Подключить библиотеку → Добавить .ZIP библиотеку и укажите файл. Распаковывать не нужно.

Файл Servo.h отдельно не скачивают: он внутри библиотеки и появляется после установки. Если среда пишет Servo.h: No such file or directory — библиотека не установлена или установлена не та. Как устроен менеджер и куда складываются файлы — в общей статье про библиотеки.

Строка подключения:

#include <Servo.h>

Создание объекта — обычно до setup():

Servo myServo;            // объект на каждый сервопривод
myServo.attach(9);        // в setup(): к какому выводу подключён сигнальный провод

Методы

Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.3.0.

attach(int pin)
Привязать сервопривод к выводу. Возвращает номер канала; 0 — свободных каналов нет.
attach(int pin, int min, int max)
То же, но с длиной импульса в микросекундах для 0° и 180°. По умолчанию 544 и 2400; для дешёвых серво часто ближе к 500–2500.
write(int angle)
Повернуть на угол 0–180. Значение больше 200 считается длиной импульса в микросекундах.
writeMicroseconds(int us)
Задать длину импульса напрямую, обычно 1000–2000. Точнее, чем угол, и единственный способ для сервоприводов непрерывного вращения.
read()
Текущий заданный угол 0–180 (не реальное положение вала — обратной связи у серво нет).
readMicroseconds()
Текущая длина импульса в микросекундах.
attached()
true, если сервопривод привязан к выводу.
detach()
Отвязать: импульсы прекращаются, серво перестаёт держать положение и не гудит. Освобождает ШИМ на 9 и 10.

Пример

#include <Servo.h>

Servo servo;

void setup() {
  servo.attach(9);          // сигнальный провод на D9
}

void loop() {
  for (int a = 0; a <= 180; a += 5) {
    servo.write(a);
    delay(30);              // серво не успевает за мгновенным прыжком
  }
  for (int a = 180; a >= 0; a -= 5) {
    servo.write(a);
    delay(30);
  }
}
Запустить в симулятореСхема с этим скетчем — запустить в браузере

Питание сервопривода — от 5V платы только для одного маленького SG90. Два и больше или что-то крупнее питают от отдельного источника, объединив землю с платой.

На чём попадаются

Дёргается и перезагружает плату

Пусковой ток сервопривода до ампера, а стабилизатор платы столько не даёт. Отдельное питание 5–6 В и общая земля решают почти всё.

Не доходит до краёв или упирается и гудит

Диапазон импульсов по умолчанию не совпадает с конкретным экземпляром. Подберите min и max в attach(): начните с 500 и 2500 и сужайте, пока не перестанет упираться.

Пропал ШИМ на выводах 9 и 10

Так работает библиотека на ATmega328: таймер 1 занят. Светодиод с analogWrite() переносят на 3, 5, 6 или 11.

Серво непрерывного вращения не останавливается

У таких «угол» — это скорость, а стоп где-то около 1500 мкс. Точку остановки ищут writeMicroseconds() с шагом в 5–10.

Где используется на сайте

Что дальше