Muy simplemente, yo soy el control de servos(9g Micro Servos) se basa en algunos datos que se leen de fuera. Todo funciona bien, excepto que los servos constantemente "batido". Es decir, hacen vibrar de nuevo con sutiles movimientos (con movimientos oscilantes de 1/2 -> 1cm o así).
He intentado corregir este problema en el software por hacer 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 el do-while es necesario inicializar las variables que almacenan el mapeado servo valor(usando el arduino servo de la biblioteca).
El readChange() la función 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 ha inicializado (la primera, que se asignan servo de salida).
Aunque, esto realmente no es un buen enfoque. Se requiere que TANTO los valores no han cambiado por un factor de DEG (~10 grados, o ~0.28 V en mi caso). Si escribo la función de que sea O ser menos de DEG, entonces ¿qué pasa si yo era sólo el cambio de un servo a la vez? Así que hay una delimma ..
Es esto simplemente una propiedad de servos (quizás barato?) o hay alguna solución?
Sería mucho más sencillo para incluir un pastie enlace. Aquí está el código completo: http://pastie.org/8191459
He adjuntado dos servos junto con un puntero láser para permitir dos grados de libertad (X, Y). Hay opciones, basada en el estado de varios botones, para el control de los servos de diversas maneras. La primera es el "Movimiento", donde tengo dos fotoresistores que, basado en la cantidad de exposición a la luz, afecta a la posición de los servos. Aún no he implementado el código de control de los servos por un controlador de Xbox. Y la tercera opción es simplemente aleatorio movimiento.
4 votos
Y
0 votos
H
0 votos
@
0 votos
@ i
4 votos
@
0 votos
@
0 votos
A
12 votos
Nota general para el diseño de sistemas de dirección láser: pon espejos en los servos y luego dirige uno hacia el otro. De esta forma no tienes que tener un servo montado sobre el otro, ni el láser montado sobre los servos, y luego puedes atornillarlos todos firmemente.
0 votos
Prueba a poner un farride en uno de los cables del servo. Como tienes dos, esto puede deberse a la interferencia entre los dos servos.