Molto semplicemente, sto controllando i servi (9g Micro Servos) in base ad alcuni dati letti da altrove. Tutto funziona bene, tranne che i servi "scuotono" costantemente. Cioè, vibrano indietro con movimenti molto sottili (con movimenti intermittenti di 1/2 -> 1 cm circa).
Ho provato a correggere questo problema nel software facendo qualcosa del tipo:
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
Dove è necessario il do-while inizializzare le variabili che memorizzano il servo valore mappato (usando la servo library di arduino).
La funzione readChange () è definita come:
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
}
Dove xRead è il valore inizializzato (il primo output servo mappato).
Tuttavia, questo non è davvero un buon approccio. Richiede che ENTRAMBI i valori non debbano essere modificati di un fattore DEG (~ 10 gradi o ~ 0,28 V nel mio caso). Se scrivo la funzione in modo tale che OR sia inferiore a DEG, allora cosa succede se cambio solo un servo alla volta? Quindi c'è un delimma ..
È semplicemente una proprietà dei servi (forse economici?) O c'è una soluzione?
Sarebbe molto più semplice includere un link pastie. Ecco il codice completo: http://pastie.org/8191459
Ho collegato due servi insieme a un puntatore laser per consentire due gradi di libertà (X, Y). Ci sono opzioni, basate sullo stato di diversi pulsanti, per controllare i servi in vari modi. Il primo è "Motion" in cui ho due fotoresistori che, in base alla quantità di esposizione alla luce, influenzano la posizione dei servi. Non ho ancora implementato il codice per controllare i servi da un controller Xbox. E la terza opzione è solo il movimento randomizzato.