Отключение - подключение сервы

vvadim
Offline
Зарегистрирован: 23.05.2012

Кручу серву потенциометром и кнопками перевожу в фиксированные положения. При работе с потенциометром всё хорошо. После перевода в фиксированные положения серва дрожит. При возврате в управление потенциометром опять всё  гуд. Почитал по форуму о подобных случах, перепробовал разные комбинации с MyServo.detach(); - не получается корректной работы. Как правильно отключить серву после окончания движения в фиксированное положение?

if(inputMode) {
  MyServo.attach(10);
  MyServo.slowmove (valPot, 255);
}
if(A == 0) {                ////////////////// крутим потенциометр
  inputMode = 1;        ///////////  кнопкой переводим в положение valPot
}
else if(A == 1) {        ///////////  кнопкой переводим в положение val1
  inputMode = 0;
  for(pos = valPot; pos < val1; pos += 5)                   
  { 
    MyServo.attach(10);                                                           
    MyServo.slowmove (pos, SPEED);                                 
  } 
  for(pos = valPot; pos > val1; pos -= 5)                      
  {  
    MyServo.attach(10);                              
    MyServo.slowmove (pos, SPEED);                                
  } 
} 
else if(A == 2) {         ///////////  кнопкой переводим в положение val2
  inputMode = 0;
  for(pos = valPot; pos < val2; pos += 5)                   
  { 
    MyServo.attach(10);                                                          
    MyServo.slowmove (pos, SPEED);                                 
  } 
  for(pos = valPot; pos > val2; pos -= 5)                      
  {   
    MyServo.attach(10);                             
    MyServo.slowmove (pos, SPEED);                                
  }  
}

Использую библиотеку VarSpeedServo.

Zizilk
Offline
Зарегистрирован: 30.05.2013

Увы никак, у сервы нет обратной связи, поэтому узнать повернулась она на нужный угол или нет нет возможности, поэтому я у себя даю delay со временем за которое она гарантированно повернётся и потом детачу. Проблема в том что после детача она похоже как-то вообще снимается - её можно легко провернуть. Правда я использую стандартную библиотеку.

vvadim
Offline
Зарегистрирован: 23.05.2012

Проблема в том, что у меня меняется скорость поворота и каждый раз будет разная задержка, я уже и формулы пытался придумать для вычисления задержки. Библиотека VarSpeedServo есть немного усовершенствованная Servo.

 

Zizilk
Offline
Зарегистрирован: 30.05.2013

Ну какая-бы библиотека не была увы у сервы по-крайней мере обычной нет обратной связи.

vvadim
Offline
Зарегистрирован: 23.05.2012

Zizilk пишет:

Увы никак, у сервы нет обратной связи, поэтому узнать повернулась она на нужный угол или нет нет возможности, поэтому я у себя даю delay со временем за которое она гарантированно повернётся и потом детачу. Проблема в том что после детача она похоже как-то вообще снимается - её можно легко провернуть. Правда я использую стандартную библиотеку.

А как применть задержку с детачем для цикла for?

Так работать не хочет

      for(pos = valPot; pos < val1; pos += 5)                   
      {
        MyServo.attach(10);                                                        
        MyServo.slowmove (pos, SPEED);
        delay(...........);
        MyServo.detach();
      } 
      for(pos = valPot; pos > val1; pos -= 5)                      
      { 
        MyServo.attach(10);                            
        MyServo.slowmove (pos, SPEED); 
        delay(.........);
        MyServo.detach();
      } 
   

 

Zizilk
Offline
Зарегистрирован: 30.05.2013

В скобках в delay вместо значения указываете переменную, которую просчитываете где-то в другом месте

vvadim
Offline
Зарегистрирован: 23.05.2012

Ушёл от цикла for и без всяких детачей никакого дрожания-джиттера. Правда серва цифровая, на дешёвой может так не получится.