Задержка при использовании сервы
- Войдите на сайт для отправки комментариев
Сб, 21/04/2012 - 02:24
Доброго времени суток!! Господа, подскажите где копать. Собственно подключил к дуине серву (скетч из примеров) подстроил под себя углы, но мне необходимо делать задержку в интервалах работы сервы.
Пробывал я delay, во время задержки серва гудит, но стоит на мете, при этом достаточно сильно греется уже через минут 5, а мне необходимо сделать задержку в сутки, именно по этой причине я попробывал использовать millis, так же из примера, но эффект тот же, гудит. Подскажите как отключить может питание или какую обвязку поставить что бы решить данную проблему.
#include <Servo.h> Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { for(pos = 0; pos < 78; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(20); // waits 15ms for the servo to reach the position } for(pos = 78; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(20); // waits 15ms for the servo to reach the position } // delay (70000); }
А если делать myservo.detach(); перед долгим delay, а после myservo.attach(9); обратно ?
>А если делать myservo.detach(); перед долгим delay, а после myservo.attach(9); обратно ?
Я, в свое время, именно так и боролся с раздражающим "гудением" сервы. У меня серва, после снятия управляющего PWM (myservo.detach()) выключалась (сохряняя текущую позицию) и спокойно продолжала работать после повторного attach.
Если же это не поможет (вдруг разные сервы по разному реагируют, хотя вряд ли) - можно попробовать питать ее не напрямую, а через, например, через ULN2003. И вырубать ее именно "питание".
Большое спасибо, сегодня обязательно попробую и отпишусь
Единственный минус при "отключения сервы". Если на ней висит какой-то груз, который пытается ее "провернуть". То после detach (или выключение питания) - он получает шанс это сделать. Если пересилит трение ее редуктора. Раз мы ее "выключили", то она больше не сопротивляется внешним силам. Так что если ей нужно "сопротивлятся" что-бы удержать текущую позицию, вариантов кроме "стоять гудеть" - нет. Для "удержания веса" - нужен ток.
Если же серва просто, например, повернула какую-то стрелочку. Открыла заслонку и т.п. То можно ее "спокойно" выключать. Когда ее задача просто "изменить позицию".
А зачем выключать? Если серв нормальный - ничего не дрожит, не гудит и не греется.
Да, можно выразиться и так, поворачивать стрелку, все работает так как я этого и ожидал, спасибо, а гудит и греется потому что китайская, но свои деньги отрабатывает
Почему-то не получается.
Простой скетч:
Работает нормально. Но вот если я хочу его модифицировать вот так:
Уже ничего не работает :(
Как правильно detach() использовать?
Пока писал пост - сам догадался: серве нужна задержка (она просто не успевает отрабатывать поворот и ее отрубают).
Я делал еще вычисления времени необходимого для поворота.
Методом тыка подобирал сколько занимает полный поворот. И по пропорции высчитывал сколько нужно для поворота на конретный угол плюс маленький запас на неточность.
Только тогда, нужно запоминать текущуе положени сервы, и при включении обязательно поворачивать ее в ноль (что-бы знать от чего текущее отсчитывать).