Во всех примерах подключения сервы к Arduino ограничиваются банальной разводкой проводов и кусочками кода, однако, не все так просто на самом деле. Есть некоторые нюансы, о которых умалчивают.
1. Сервопривод основан на коллекторном моторчике, который при пуске, а особенно при пуске под нагрузкой жрёт уйму тока.
а) Обязательно подключать питание сервопривода к питанию в обход Arduino,
б) Нужно ставить электролитический конденсатор между +и землей питания сервопривода. И чем больше, тем лучше. Тогда при запуске сервы её мотор возьмёт на старте ток из конденсатора, а дальше уже в нормальном режиме будет крутиться от питания.
Причем питание для сервы (кучи серв) должно быть достаточно мощным, чтобы тянуть все одновременно работающие сервы разом. По документации, например, одна серва MG90S потребляет в пике 250мА. Если разом крутим 4 сервы - то нужно , чтобы питание выдавало как минимум 1А, но это без запаса, лучше 1,5А, но надежней 2А.
На практике выглядит так:
2. Ардуина работает циклично и выдает на сигнальный пин, идущий к серве некие значения, короче шумит, в результате серва издает некое жужжание и легкий дребезг.
Для борьбы с этим эффектом, после передачи команды на вращение сервы можно давать команду на пин digitalWrite(LOW) серва перестает дребезжать и жрать ток впустую.
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo Door1; // объявляем переменную
void setup() {
Door1.attach(A0); // Дверца на А0
InitDoor(Door1, A0);
}
// процедурка дрыганья сервой
void InitDoor(Servo Door, int port){
Door.write(0); // Вертим в угол 0градусов
delay(2000); // ждем пока провернется
Door.write(90);// Вертим в угол 90градусов
digitalWrite(port, LOW); //гасим дребезг, команда на поворот уже ушла и эта сработает уже после окончания поворота, если убрать эту строку - серва будет жужжать и слегка подрыгиваться туда-сюда
delay(3000);//ждем когда закончит вертеть
}