Muito simplesmente, estou controlando servos (9g Micro Servos) com base em alguns dados lidos de outros lugares. Tudo funciona bem, exceto que os servos constantemente "tremem". Ou seja, eles vibram de volta com movimentos muito sutis (com movimentos intermitentes de 1/2 a> 1 cm ou mais).
Tentei corrigir esse problema no software fazendo algo como:
do{
delay(DTIME);
positionServo();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("X position: ");
lcd.print(xRead);
lcd.setCursor(0,1);
lcd.print("Y position: ");
lcd.print(yRead);
}while( readChange() ); //while there has been change
Onde for necessário, inicialize as variáveis que armazenam o valor do servo mapeado (usando a biblioteca de servo do arduino).
A função readChange () é definida como:
int readChange(){
int x_Temp, y_Temp;
x_Temp = map(analogRead(x_axisReadPin), 0, 1023, 0, 179);
y_Temp = map(analogRead(y_axisReadPin), 0, 1023, 0, 179);
if( abs(x_Temp - xRead) < DEG && abs(y_Temp - yRead) < DEG ) return 0; // no change
else return 1; //change
}
Onde xRead é o valor que foi inicializado (a primeira saída servo mapeada).
Embora isso realmente não seja uma boa abordagem. Exige que AMBOS os valores não devam ter sido alterados por um fator de DEG (~ 10 graus ou ~ 0,28V no meu caso). Se eu escrever a função de modo que OR seja menor que DEG, e se eu estiver mudando apenas um servo por vez? Portanto, há um delimma ..
Isso é simplesmente uma propriedade de servos (talvez baratos?) Ou existe uma solução alternativa?
Seria muito mais simples incluir um link para pasta. Aqui está o código completo: http://pastie.org/8191459
Anexei dois servos juntamente com um ponteiro laser para permitir dois graus de liberdade (X, Y). Existem opções, com base no estado de vários botões, para controlar os servos de várias maneiras. O primeiro é "Motion", onde eu tenho dois fotorresistores que, com base na quantidade de exposição à luz, afetam a posição dos servos. Ainda não implementei o código para controlar os servos por um controlador Xbox. E a terceira opção é apenas movimento aleatório.