// Библиотека с расширенными функциями для работы с Servo #include // Создаём объект для работы с сервомоторами AmperkaServo servo; // Задаём имя пина, к которому подключён сервопривод constexpr uint8_t SERVO_PIN = 9; // Задаём имя пина FB, к которому подключён сервопривод constexpr uint8_t SERVO_PIN_FB = A5; void setup() { // Открываем Serial-порт Serial.begin(9600); // Подключаем сервомотор // servo.attach(SERVO_PIN); // Подключаем сервомотор с расширенными параметрами // Советуем использовать именно этот вариант для точной настройки мотора // servo.attach(pin, minPulseWidth, maxPulseWidth, minAngle, maxAngle); // - pin: номер пина, к которому подключён сервопривод // - minPulseWidth: ширина импульса, соответствующая минимальному углу поворота. // Опциональный и по умолчанию стоит 544 мкс. // - maxPulseWidth: ширина импульса, соответствующая максимальному углу поворота. // Опциональный и по умолчанию стоит 2400 мкс. // - minAngle: минимальный угол поворота сервопривода. // Опциональный и по умолчанию стоит 0°. // - maxAngle: максимальный угол поворота сервопривода. // Опциональный и по умолчанию стоит 180°. // Данные возьмите из технических характеристик мотора servo.attach(SERVO_PIN, 544, 2400, 0, 180); // Подключаем сервомотор к обратной связи // servo.attachFB(pinFB, voltageFBCW, voltageFBCCW); // - pinFB: номер пина, к которому подключён сигнал обратной связи от сервопривода // - voltageFBCW: напряжение обратной связи в крайнем положении по часовой стрелке CW // - voltageFBCCW: напряжение обратной связи в крайнем положении против часовой стрелки CCW // Данные возьмите из технических характеристик мотора servo.attachFB(SERVO_PIN_FB, 2.3, 0.5); } void loop() { // Перебираем значения угла сервы от min до max for (int pos = servo.getMinAngle(); pos <= servo.getMaxAngle(); pos++) { // Отправляем текущий угол на серво servo.writeAngle(pos); // Ждём 20 мс delay(20); // Считываем и выводим текущий угол сервопривода Serial.println(servo.readAngleFB()); } // Перебираем значения угла сервы от max до min for (int pos = servo.getMaxAngle(); pos >= servo.getMinAngle(); pos--) { // Отправляем текущий угол на серво servo.writeAngle(pos); // Ждём 20 мс delay(20); // Считываем и выводим текущий угол сервопривода Serial.println(servo.readAngleFB()); } }