Дуже просто, я керую сервоприводами (9 г Micro Servos) на основі деяких даних, прочитаних з інших місць. Все працює добре, за винятком того, що сервоприводи постійно «трясуться». Тобто вони вібрують назад дуже тонкими рухами (з переривчастими рухами 1/2 -> 1см і так).
Я спробував виправити цю проблему в програмному забезпеченні, зробивши щось на кшталт:
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
Там, де потрібен час виконання, ініціалізуйте змінні, які зберігають відображене значення сервоприводу (використовуючи сервісну бібліотеку arduino).
Функція readChange () визначається як:
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
}
Де xRead - це значення, яке було ініціалізовано (перший, зіставлений вихід сервоприводу).
Хоча, це насправді не дуже вдалий підхід. Це вимагає, щоб значення BOTH не мали змінюватися в коефіцієнті DEG (~ 10 градусів, або ~ 0,28 В у моєму випадку). Якщо я записую функцію таким чином, що або АБО менше, ніж DEG, що робити, якщо я міняв лише один сервоприймач за один раз? Отже, існує деліма ..
Це просто властивість сервоприводів (можливо, дешевих?) Чи існує обхід?
Набагато простіше було б включити посилання на пасти. Ось повний код: http://pastie.org/8191459
Я приєднав два сервоприводи разом з лазерним вказівником, щоб забезпечити два ступені свободи (X, Y). Існують варіанти, засновані на стані декількох кнопок, керувати сервоприводами різними способами. Перший - "Рух", де у мене є два фоторезистори, які, виходячи з кількості випромінювання світла, впливають на положення сервоприводів. Я ще не реалізував код для управління сервоприводами контролером Xbox. І третій варіант - просто рандомізований рух.