Po prostu kontroluję serwomechanizmy (9 g Micro Servos) w oparciu o niektóre dane odczytane z innych źródeł. Wszystko działa dobrze, z wyjątkiem tego, że serwa będą się ciągle „trzęsły”. Oznacza to, że wibrują do tyłu bardzo subtelnymi ruchami (z przerywanymi ruchami około 1/2 -> 1 cm lub mniej więcej).
Próbowałem rozwiązać ten problem w oprogramowaniu, wykonując coś takiego:
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
Tam, gdzie jest to konieczne, zainicjuj zmienne przechowujące zmapowaną wartość serwomechanizmu (używając biblioteki serwomechanizmów arduino).
Funkcja readChange () jest zdefiniowana jako:
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
}
Gdzie xRead jest wartością, która została zainicjowana (pierwsze zmapowane wyjście serwa).
Chociaż to naprawdę nie jest dobre podejście. Wymaga to, aby OBA wartości nie mogły ulec zmianie o współczynnik DEG (~ 10 stopni lub ~ 0,28 V w moim przypadku). Jeśli napiszę taką funkcję, że albo OR będzie mniejsze niż DEG, to co, jeśli zmieniam tylko jedno serwo na raz? Istnieje więc delimma ..
Czy to po prostu własność serwomechanizmów (być może tanich?), Czy może istnieje obejście?
O wiele łatwiej byłoby dołączyć link do ciasta. Oto pełny kod: http://pastie.org/8191459
Dołączyłem dwa serwa wraz ze wskaźnikiem laserowym, aby umożliwić dwa stopnie swobody (X, Y). Istnieją opcje, oparte na stanie kilku przycisków, do sterowania serwomechanizmami na różne sposoby. Pierwszym z nich jest „Motion”, w którym mam dwa fotorezystory, które w zależności od ekspozycji na światło wpływają na pozycję serwomechanizmów. Nie wdrożyłem jeszcze kodu do kontrolowania serwomechanizmów przez kontroler Xbox. A trzecia opcja to po prostu ruch losowy.