Sangat sederhana, saya mengendalikan servos (9g Micro Servos) berdasarkan pada beberapa data yang dibaca dari tempat lain. Semuanya berfungsi dengan baik kecuali bahwa servos akan terus "gemetar." Artinya, mereka bergetar kembali dengan gerakan yang sangat halus (dengan gerakan terputus-putus 1/2 -> 1cm atau lebih).
Saya mencoba memperbaiki masalah ini dalam perangkat lunak dengan melakukan sesuatu seperti:
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
Di mana do-while diperlukan menginisialisasi variabel yang menyimpan nilai servo yang dipetakan (menggunakan perpustakaan arduino servo).
Fungsi readChange () didefinisikan sebagai:
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
}
Di mana xRead adalah nilai yang diinisialisasi (yang pertama, keluaran servo yang dipetakan).
Meskipun, ini sebenarnya bukan pendekatan yang baik. Ini mensyaratkan bahwa KEDUA nilai tidak boleh diubah oleh faktor DEG (~ 10 derajat, atau ~ 0.28V dalam kasus saya). Jika saya menulis fungsi sedemikian sehingga ATAU kurang dari DEG, lalu bagaimana jika saya hanya mengubah satu servo sekaligus? Jadi ada delimma ..
Apakah ini hanya properti servos (mungkin yang murah?) Atau apakah ada solusi?
Akan lebih mudah untuk menyertakan tautan pastie. Berikut adalah kode lengkapnya: http://pastie.org/8191459
Saya telah melampirkan dua servos bersama dengan laser pointer untuk memungkinkan dua derajat kebebasan (X, Y). Ada beberapa opsi, berdasarkan keadaan beberapa tombol, untuk mengontrol servos dengan berbagai cara. Yang pertama adalah "Gerak" di mana saya memiliki dua fotoresistor yang, berdasarkan jumlah paparan cahaya, mempengaruhi posisi servos. Saya belum menerapkan kode untuk mengontrol servos oleh pengontrol Xbox. Dan opsi ketiga hanyalah gerakan acak.