Задержка при использовании сервы
- Войдите на сайт для отправки комментариев
Сб, 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 (или выключение питания) - он получает шанс это сделать. Если пересилит трение ее редуктора. Раз мы ее "выключили", то она больше не сопротивляется внешним силам. Так что если ей нужно "сопротивлятся" что-бы удержать текущую позицию, вариантов кроме "стоять гудеть" - нет. Для "удержания веса" - нужен ток.
Если же серва просто, например, повернула какую-то стрелочку. Открыла заслонку и т.п. То можно ее "спокойно" выключать. Когда ее задача просто "изменить позицию".
А зачем выключать? Если серв нормальный - ничего не дрожит, не гудит и не греется.
Да, можно выразиться и так, поворачивать стрелку, все работает так как я этого и ожидал, спасибо, а гудит и греется потому что китайская, но свои деньги отрабатывает
Почему-то не получается.
Простой скетч:
#include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { myservo.write(0); delay(10000); myservo.write(90); delay(10000); }Работает нормально. Но вот если я хочу его модифицировать вот так:
#include <Servo.h> Servo myservo; void setup() { } void loop() { myservo.attach(9); myservo.write(0); myservo.detach(); delay(10000); myservo.attach(9); myservo.write(90); myservo.detach(); delay(10000); }Уже ничего не работает :(
Как правильно detach() использовать?
Пока писал пост - сам догадался: серве нужна задержка (она просто не успевает отрабатывать поворот и ее отрубают).
#include <Servo.h> Servo myservo; void setup() { } void loop() { myservo.attach(9); myservo.write(0); delay(500); myservo.detach(); delay(10000); myservo.attach(9); myservo.write(90); delay(500); myservo.detach(); delay(10000); }Я делал еще вычисления времени необходимого для поворота.
Методом тыка подобирал сколько занимает полный поворот. И по пропорции высчитывал сколько нужно для поворота на конретный угол плюс маленький запас на неточность.
Только тогда, нужно запоминать текущуе положени сервы, и при включении обязательно поворачивать ее в ноль (что-бы знать от чего текущее отсчитывать).