Урок 5 Начинающий 35 минут

Сервопривод (Servo Motor)

Научитесь управлять точным позиционированием с помощью PWM и создавайте роботизированные системы.

1

Подготовка оборудования

Компоненты для урока

ESP32 DevKit

Любая версия (30/38 пинов)

🤖

Сервопривод SG90

Микро серво 0-180°

🔋

Источник 5V

Внешнее питание серво

🔌

Макетная плата

400 точек + джамперы

2

Как работает сервопривод

Устройство сервопривода

Строение сервопривода

Сервопривод содержит DC мотор, редуктор и потенциометр обратной связи. Плата управления сравнивает заданное положение с фактическим и корректирует мотор.

Brown

GND

Red

VCC (5V)

Orange

Signal

Типы сервоприводов

Модель Тип Крутящий Вес
SG90 Пластик 1.6 кг/см 9g
MG90S Металл 2.2 кг/см 13g
MG996R Металл 10 кг/см 55g

💡 Рекомендация

Для начала используйте SG90 — он дешёвый и лёгкий. Для серьёзных проектов выбирайте MG996R с металлическими шестернями.

2.1

Принцип PWM управления

Принцип PWM управления сервоприводом
🔴

1мс = 0°

Минимальная длительность импульса. Сервопривод поворачивается полностью влево.

🟢

1.5мс = 90°

Средняя позиция. Сервопривод смотрит прямо вверх (нейтраль).

🔵

2мс = 180°

Максимальная длительность. Сервопривод поворачивается полностью вправо.

📊 Формула расчёта

Duty Cycle

Duty Cycle = (Pulse Width / 20ms) × 100%

Пример: 1.5мс / 20мс = 7.5%

Частота PWM

Frequency = 1 / 20ms = 50 Гц

Стандарт для сервоприводов

3

Схема подключения

Схема подключения сервопривода к ESP32
1

VCC Подключите внешний 5V к красному проводу

2

GND Общая земля с ESP32 к коричневому проводу

3

SIG Оранжевый провод → GPIO 18 (PWM)

4

⚠️ НЕ питать серво от 3.3V ESP32!

⚠️ Критически важно

Сервопривод потребляет до 500mA-2.5A при нагрузке. ESP32 может выдать только ~500mA на все пины. Используйте внешний источник 5V!

4

Программирование

Установка библиотеки

📦

Откройте Sketch → Include Library → Manage Libraries

🔍

В поиске введите ESP32Servo

Установите библиотеку ESP32Servo (или используйте стандартную <Servo.h>)

Servo_Simple.ino
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
#include <ESP32Servo.h>
Servo myServo;
void setup() {
  myServo.attach(18);
  myServo.write(90); // Центр
}
void loop() {
  myServo.write(0); // 0 градусов
  delay(1000);
  myServo.write(90); // 90 градусов
  delay(1000);
  myServo.write(180); // 180 градусов
  delay(1000);
}

Код в Arduino IDE

Код программы в Arduino IDE

Монитор порта

Данные о позиции в мониторе порта
4.1

График движения

График движения сервопривода
Управление сервоприводом в реальном времени

Визуализация работы сервопривода: угол поворота 0°-180° с текущей позицией 90°

📈

Восходящий фронт

Движение от 0° до 180° за ~2.7 секунды. Скорость зависит от delay().

📉

Нисходящий фронт

Возврат от 180° до 0°. Треугольная волна повторяется циклически.

⏱️

Период

Полный цикл (0°→180°→0°) занимает ~5.4 секунды.

5

Возможные проблемы

Сервопривод не двигается

Проверьте питание: сервопривод требует внешний источник 5V, не подключайте к 3.3V ESP32! Убедитесь, что GND общий между ESP32 и источником питания. Проверьте, что сигнал подключён к PWM-пину (GPIO 18).

Сервопривод дёргается/вибрирует

Плохой контакт проводов — проверьте соединения. Добавьте конденсатор 100мкФ параллельно питанию (между 5V и GND). Убедитесь, что источник питания достаточно мощный (минимум 1A).

ESP32 перезагружается при работе серво

Недостаток тока — сервопривод потребляет до 500mA-2.5A при нагрузке. Используйте отдельный источник 5V на 2A+. Убедитесь, что GND общий между всеми компонентами.

Серво не достигает крайних позиций

Калибровка углов: используйте servo.writeMicroseconds(1000) для 0° и servo.writeMicroseconds(2000) для 180°. Некоторые серво имеют немного другие диапазоны.

Странные звуки от мотора серво

Механическое препятствие — проверьте, что ничто не мешает вращению. Износ шестерён — если серво старый, возможно нужна замена. Для SG90 используйте пластиковые насадки, не металлические.

6

Цех Испытаний

Отточите мастерство управления сервоприводами. Каждая задача — шаг к созданию роботизированных систем.

Время прохождения
~105 минут суммарно
🎯
Уровень: Start 10m

Базовое позиционирование

Три позиции с задержкой

Миссия

Установите сервопривод в 3 позиции: 0°, 90°, 180° с задержкой 1 секунда между каждой. Используйте myServo.write(angle) и delay(1000).

01
🔄
Уровень: Easy 15m

Плавный разворот

Sweep от 0° до 180° и обратно

Миссия

Реализуйте плавное движение сервопривода от 0° до 180° и обратно через цикл for. Скорость движения регулируйте через delay(15).

02
🎛️
Уровень: Normal 20m

Управление потенциометром

Ручное управление углом через потенциометр

Миссия

Используйте потенциометр для ручного управления углом сервопривода. Поворот ручки = изменение угла. Выводите текущий угол в монитор порта.

03
🌡️
Уровень: Hard 25m

Световой сигнализатор

Реагирование на температуру с DHT датчика

Миссия

Подключите кнопку к GPIO 15. Кнопка работает как триггер шлагбаума: первое нажатие плавно поднимает серво от 0° до 90° (шаг 1°, delay 10мс), второе нажатие плавно опускает обратно от 90° до 0°. Результат: при каждом нажатии шлагбаум открывается или закрывается, никогда не прыгает — только плавно.

04
🤖
Уровень: Expert 35m

Роботизированная рука

Прототип руки с 2 сервоприводами + управление через UART

Миссия

Подключите 2 сервопривода: основание на GPIO 18 (поворот 0°–180°), захват на GPIO 19 (0° — закрыт, 90° — открыт). Управление через Serial Monitor командами: LEFT (основание –10°), RIGHT (основание +10°), OPEN (захват 90°), CLOSE (захват 0°), CENTER (основание 90°). Каждая команда выводит текущий угол обоих серво в порт.

05
🚀

Свой Проект

Создайте уникальное роботизированное устройство: манипулятор, камеру с управлением, световую турель... Ограничений нет!

Открыть Симулятор →

Поздравляем! 🎉

Вы освоили управление сервоприводами! Теперь вы можете создавать роботизированные руки, камеры с управлением, световые турели и другие механические системы.