Как управлять сервоприводом с Arduino
Сервопривод подключается тремя проводами и управляется встроенной библиотекой Servo:
- коричневый или чёрный →
GND; - красный →
5V(для одного маленького SG90 без нагрузки) или отдельный источник 5 В; - оранжевый, жёлтый или белый (сигнал) → вывод 9.
#include <Servo.h>
Servo servo;
void setup() {
servo.attach(9); // сигнал на выводе 9
}
void loop() {
servo.write(0); // повернуть на 0°
delay(1000);
servo.write(90); // в середину
delay(1000);
servo.write(180); // до упора в другую сторону
delay(1000);
}servo.write(угол) принимает угол от 0 до 180 — сервопривод сам доворачивает вал и держит его в этом положении. Библиотеку ставить не нужно: она уже есть в Arduino IDE.
Угол с потенциометра
Потенциометр 10 кОм: крайние выводы — к 5V и GND, средний — к A0. Число 0–1023 переводится в угол функцией map:
#include <Servo.h>
Servo servo;
void setup() {
servo.attach(9);
}
void loop() {
int angle = map(analogRead(A0), 0, 1023, 0, 180);
servo.write(angle);
delay(15);
}Питание — главное
Сервопривод при движении и под нагрузкой берёт сотни миллиампер. От 5V платы можно питать один SG90 для опыта, но не больше.
- Несколько сервоприводов или большой (MG996R и подобные) — только от отдельного источника 5–6 В (смотрите напряжение в описании сервопривода), рассчитанного на ток с запасом: на несколько маленьких — от 2 А.
- GND источника соединяется с GND Arduino, иначе сигнал не дойдёт.
- Плюс отдельного источника с выводом
5VArduino не соединяют.
Не питайте сервоприводы и моторы от вывода 5V платы, подключённой к компьютеру, если их больше одного маленького: просадка напряжения перезагружает плату, а большой ток может повредить стабилизатор платы или USB-порт.
Если что-то не так
- Плата перезагружается, монитор порта отваливается — серво просаживает питание. Нужен отдельный источник.
- Серво дёргается, дрожит — слабое питание или длинный тонкий провод; иногда помогает конденсатор на 100–470 мкФ между
+иGNDвозле сервопривода (полярность конденсатора не перепутайте). - Гудит на краях — многие сервоприводы не доходят до 0° и 180°. Ограничьте углы, например 10–170, или подберите крайние значения через
servo.writeMicroseconds(…): 1500 — середина, у большинства серво рабочий диапазон примерно 1000–2000 мкс. - Перестал работать
analogWriteна 9 или 10 — на Uno и Nano библиотека Servo отключает ШИМ на этих выводах. - Крутится без остановки — это сервопривод постоянного вращения (360°): у него
writeзадаёт не угол, а скорость и направление, значение около 90 — стоп.
Больше о моторах и драйверах — в уроке Сервоприводы и моторы.