Muy simplemente, estoy controlando los servos (9g Micro Servos) en base a algunos datos leídos desde otro lugar. Todo funciona bien, excepto que los servos constantemente "temblarán". Es decir, vibran con movimientos muy sutiles (con movimientos intermitentes de 1/2 - > 1 cm o menos).
Intenté corregir este problema en el software haciendo 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
Donde sea necesario hacer do-while, inicialice las variables que almacenan el valor de servo asignado (usando la biblioteca de servo de arduino).
La función readChange () se define 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
}
Donde xRead es el valor que se inicializó (la primera salida servo asignada).
Aunque, esto realmente no es un buen enfoque. Requiere que AMBOS valores no deban haber cambiado por un factor de DEG (~ 10 grados, o ~ 0.28 V en mi caso). Si escribo la función de modo que O sea menor que DEG, entonces, ¿qué sucede si solo cambio un servo a la vez? Así que hay un delimma ..
¿Esto es simplemente una propiedad de los servos (quizás algunos baratos) o hay una solución?
Sería mucho más simple incluir un enlace de pastel. Aquí está el código completo: enlace
He adjuntado dos servos junto con un puntero láser para permitir dos grados de libertad (X, Y). Hay opciones, basadas en el estado de varios botones, para controlar los servos de varias maneras. El primero es "Motion", donde tengo dos fotoresistores que, según la cantidad de exposición a la luz, afectan la posición de los servos. Todavía no he implementado el código para controlar los servos mediante un controlador de Xbox. Y la tercera opción es solo un movimiento aleatorio.