Ganz einfach, ich steuere Servos (9g Micro Servos) basierend auf Daten, die von woanders eingelesen wurden. Alles funktioniert gut, außer dass die Servos ständig "rütteln". Das heißt, sie vibrieren mit sehr subtilen Bewegungen zurück (mit intermittierenden Bewegungen von 1/2 -> 1 cm oder so).
Ich habe versucht, dieses Problem in der Software zu beheben, indem ich Folgendes ausgeführt habe:
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
Wo dies erforderlich ist, initialisieren Sie die Variablen, in denen der zugeordnete Servowert gespeichert ist (mithilfe der Arduino-Servobibliothek).
Die Funktion readChange () ist wie folgt definiert:
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
}
Dabei ist xRead der Wert, der initialisiert wurde (der erste zugeordnete Servoausgang).
Dies ist jedoch kein guter Ansatz. Es setzt voraus, dass sich BEIDE Werte nicht um einen Faktor von DEG geändert haben (~ 10 Grad, in meinem Fall ~ 0,28 V). Wenn ich die Funktion so schreibe, dass entweder ODER kleiner als DEG ist, was dann, wenn ich jeweils nur einen Servo wechsle? Also gibt es eine delimma ..
Ist das einfach eine Eigenschaft von Servos (vielleicht billige?) Oder gibt es eine Problemumgehung?
Es wäre viel einfacher, einen Pastie-Link einzufügen. Hier ist der vollständige Code: http://pastie.org/8191459
Ich habe zwei Servos zusammen mit einem Laserpointer angebracht, um zwei Freiheitsgrade (X, Y) zu ermöglichen. Abhängig vom Zustand mehrerer Tasten gibt es Optionen, um die Servos auf verschiedene Arten zu steuern. Der erste ist "Motion", bei dem ich zwei Fotowiderstände habe, die auf der Grundlage der Belichtungsmenge die Position der Servos beeinflussen. Ich habe den Code zur Steuerung der Servos durch einen Xbox-Controller noch nicht implementiert. Und die dritte Option ist nur eine zufällige Bewegung.