загрузил на ардуино вот этот скетч Код (C++): #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { myservo.write(90); // устанавливаем сервопривод в серединное положение delay(500); myservo.write(0); // устанавливаем сервопривод в крайнее левое положение delay(500); myservo.write(180); // устанавливаем сервопривод в крайнее правое положение delay(500); } и все хорошо но серва так хрипит громко и резко поворачивается что или я или она так долго не выдержем... серва обычная FS90. В итоге планируется чтоб она плавно приоткрывала дверцу и при необходимости плавно закрывала.
Ну как-то совсем банальный вопрос, я бы рекомендовал для начала посмотреть какую серию уроков по кодингу(не обязательно именно под ардуино) Ну а по сути- сделайте не такой резкий переход, что-нибудь в стиле: Код (C++): void loop() { int servopos = 0; while(servopos < 90) { servopos = servopos+1; myservo.write(servopos); delay(5); } // устанавливаем сервопривод в серединное положение делая шаги в 1 градус delay(500); while(servopos > 0) { servopos = servopos-1; myservo.write(servopos); delay(5); } // устанавливаем сервопривод в крайнее левое положение делая шаги в 1 градус delay(500); } ну и дальше по примеру, хотя шаг можно изменить и до 5 где-то, думаю всё равно будет достаточно плавно, но тут уже играйтесь в зависимости от поведения сервы с шагом и задержкой при шаге, ещё можете это всё вынести в отдельную функцию по типу movemyservo(i;j) которую вы будете вызывать с параметром позиции в которую нужно перейти и с каким шагом это делать.
Код (C++): for(int i = 0, i < 180, i++){ myservo.write(i); delay(500); } for(int i = 180, i >= 180, i--){ myservo.write(i); delay(500); }
есть еще специальная библиотека, заточенная на плавное управление сервами: https://github.com/netlabtoolkit/VarSpeedServo
попробывал ее. Но она один раз медленно провернула серву , а потом замерла и с какойто неизвестной периодичностью сама поддергивалась и ... и все собственно. Реализовал через стандартный пример из библиотеки для серво. Вроде норм.
вот я делал для камеры на квадрик Код (C++): #include <Servo.h> // подключаем библиотеку для работы с сервоприводом Servo servo1; // объявляем переменную servo типа "servo1" Servo servo2;// объявляем переменную servo типа "servo2" int ugol1;// угол для серво 1 int ugol2;// угол для серво 2 int skorost; void setup() { servo1.attach(3);// привязываем сервопривод к выходу servo2.attach(4);// привязываем сервопривод к выходу } void loop() // процедура loop { int skorost = 30;// скорость поворота чем больше значение тем медление servo1.write(90); // ставим угол поворота под 90 servo2.write(120); // ставим угол поворота под 120 delay(2000); // ждем 2 секунды //******************************** for(ugol1 = 90 ; ugol1 < 140; ugol1 += 1) // поворот от 90 до 140 { servo1.write(ugol1); delay(skorost); } for(ugol2 = 120 ; ugol2 < 150; ugol2 += 1) // поворот от 120 до 150 { servo2.write(ugol2); delay(skorost); } delay(2000); // ждем 2 секунды //******************************** for(ugol1 = 140; ugol1>=90; ugol1-=1) // поворачиваем от 140 до 90 { servo1.write(ugol1); delay(skorost); } for(ugol2 = 150; ugol2>=120; ugol2-=1) // поворачиваем от 150 до 120 { servo2.write(ugol2); delay(skorost); } }