Très simplement, je contrôle les servos (9g Micro Servos) sur la base de certaines données lues d'ailleurs. Tout fonctionne bien sauf que les servos "tremblent" constamment. Autrement dit, ils vibrent en arrière avec des mouvements très subtils (avec des mouvements intermittents de 1/2 -> 1 cm environ).
J'ai essayé de corriger ce problème dans le logiciel en faisant quelque chose comme:
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
Lorsque le do-while est nécessaire, initialisez les variables qui stockent la valeur d'asservissement mappée (à l'aide de la bibliothèque d'asservissements Arduino).
La fonction readChange () est définie comme:
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
}
Où xRead est la valeur qui a été initialisée (la première sortie d'asservissement mappée).
Bien que ce ne soit vraiment pas une bonne approche. Cela nécessite que les DEUX valeurs ne soient pas modifiées par un facteur DEG (~ 10 degrés, ou ~ 0,28 V dans mon cas). Si j'écris la fonction de telle sorte que OU soit inférieur à DEG, que se passe-t-il si je ne change qu'un seul servo à la fois? Il y a donc un délimitation ..
Est-ce simplement une propriété des servos (peut-être bon marché?) Ou existe-t-il une solution?
Il serait beaucoup plus simple d'inclure un lien pastie. Voici le code complet: http://pastie.org/8191459
J'ai attaché deux servos avec un pointeur laser pour permettre deux degrés de liberté (X, Y). Il existe des options, basées sur l'état de plusieurs boutons, pour contrôler les servos de différentes manières. Le premier est "Motion" où j'ai deux photorésistances qui, en fonction de la quantité d'exposition à la lumière, affectent la position des servos. Je n'ai pas encore implémenté le code pour contrôler les servos par un contrôleur Xbox. Et la troisième option est juste un mouvement aléatoire.