Подключение сервопривода SG90 к Arduino
Сервопривод
SG90 к Arduino — три провода: питание 5 В (красный), земля (коричневый) и сигнал (оранжевый) на цифровой вывод. Угол задаёт импульс 1–2 мс раз в 20 мс; стандартная библиотека Servo делает это на любом выводе.
Схема подключения сервопривода SG90 к Arduino
| Сервопривод SG90 | Arduino Uno |
|---|---|
| PWM | D9 |
| V+ | 5V |
| GND | GND |
Схема из примера «Arduino Uno: сервопривод, развёртка библиотекой Servo».
Выводы Сервопривод SG90
| Вывод | Назначение |
|---|---|
| PWM | сигнал угла (оранжевый или жёлтый) |
| V+ | питание (красный) |
| GND | общий провод (коричневый) |
Код для Arduino
#include <Servo.h>
// Сервопривод SG90 на выводе 9.
//
// Servo.h на AVR не использует аппаратный ШИМ. Таймер 1 вызывает
// прерывание, и оно поднимает и опускает вывод само: импульс 1–2 мс раз в
// 20 мс. Угол 0° — около 0,5 мс, 180° — около 2,4 мс.
//
// Следствие, о котором забывают: пока работает Servo, на Uno и Nano не
// работает ШИМ на выводах 9 и 10 (analogWrite) — таймер 1 занят.
Servo servo;
const int PIN = 9;
void setup() {
servo.attach(PIN);
}
void loop() {
for (int angle = 0; angle <= 180; angle += 2) {
servo.write(angle);
delay(15);
}
for (int angle = 180; angle >= 0; angle -= 2) {
servo.write(angle);
delay(15);
}
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на Arduino
- Библиотека
Servo.hвходит в набор Arduino. Она выводит импульсы из прерывания таймера 1, поэтому на Uno и Nano пока работает Servo, ШИМ (analogWrite) на выводах 9 и 10 недоступен. - Один сервопривод ещё можно питать от 5V платы при работе от USB, но с нагрузкой серва тянет сотни миллиампер: питание лучше брать отдельно, земля общая.
В железе
В примере симулятора сервопривод питается от 3V3 платы для простоты. В железе SG90 питают 5 В от отдельного источника (или от VIN при питании от USB для одного привода), а землю соединяют с землёй контроллера. От вывода 3V3 привод дёргается и перезагружает плату.
Частые ошибки при подключении к Arduino
- Питать сервопривод с нагрузкой от 5V платы: при старте двигателя напряжение падает, плата перезагружается.
- Не соединить землю внешнего питания с землёй Arduino: сигнал «плавает», серва дёргается.
- Вызывать
analogWrite()на выводах 9 и 10 вместе с Servo: ШИМ не работает, таймер 1 занят. - Питание от платы — при старте мотора напряжение проседает, контроллер перезагружается. Нужен отдельный источник 5 В.
- Нет общей земли между источником привода и контроллером — сигнал не читается, привод дёргается.
- Привод упирается в механику на краях — гудит, греется и берёт полный ток. Ограничьте угол в коде.
- Дрожание вала в покое — помехи по питанию; конденсатор 100–470 мкФ у привода помогает.
Ещё по теме
Другие детали для Arduino
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеKY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиод74HC595Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодПолзунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21D