Selasa, 07 April 2009

Mobil Robot & Wall Tracing

.
Sekarang ke algoritma.
Sebelum anda jauh melihat listing programnya, biar tidak bingung sebaiknya anda pelajari bahasa C mencakup struktur, command-command, tipe data, operator, membuat fungsi, dll. Tetapi jika anda menguasai bahasa pemrograman lain seperti bahasa Pascal, BasCom, atau assembler maka lihat bagaimana memprogramnya dan logika pemrogramannya lalu bagaimana mengimplementasikan pada bahasa pemrograman yang anda kuasai.

Saya akan memprogram mobil robot untuk mempertahankan jarak mobil robot terhadap dinding dengan jarak referensi 20 cm, bisa menggunakan hanya 1 buah sensor PING atau 2 sensor PING. Jika anda menggunakan hanya 1 sensor PING maka pada arena yg anda buat tidak boleh ada halangan di depan mobil robot. Mobil robot akan diprogram agar dapat berbelok dengan tikungan hingga 180 derajat. Hal penting sebelum ke program utama adalah menentukan nilai PWM yang akan diberikan pada mobil robot untuk kondisi jarak tertentu, tujuannya adalah agar menghasilkan pergerakan mobil robot yang halus, selain itu juga karena karakteristik motor DC yang berbeda-beda. Motor DC yang saya gunakan pasti berbeda dengan yang anda gunakan.

Listing pada Gambar 1 adalah pengujian untuk mengetahui karaktersitik motor DC yang anda gunakan apakah linier atau logaritmik. Jika anda telah mengetahui linier atau logaritmik maka akan mempermudah mencapai hasil yang maksimal nantinya, tetapi jika anda tidak sabaran silahkan langsung ke listing Gambar 2 dan lakukan Trial and Error dengan mengubah nilai PWM terus-menerus hingga didapatkan hasil yang maksimal. Apabila anda beruntung dengan sedikit coba-coba ketemu dah.

Pengujian yang baik dan lebih teliti tentu saja dengan menggunakan alat ukur kecepatan putaran
atau tachometer atau encoder, tetapi saya menganggap anda tidak memilikinya sehingga pengujian seperti di bawah ini (saya juga ga punya si).

Cara pengujian sebagai berikut :
- Program awal ROBOT(Stop) selama 3 detik.
- ROBOT(Maju) selama 3 detik dengan nilai PWM 250.
- ROBOT(Stop) selama 3 detik.
- ROBOT(Maju) selama 3 detik dengan nilai PWM 200.
- ROBOT(Stop) selama 3 detik.
- ROBOT(Maju) selama 3 detik dengan nilai PWM 150.
- ROBOT(Stop) selama 3 detik.
- ROBOT(Maju) selama 3 detik dengan nilai PWM 100.
- ROBOT(Stop) selama 3 detik.
- ROBOT(Maju) selama 3 detik dengan nilai PWM 50.
- Gunakan alas yang licin (lantai keramik) atau menggunakan kertas karton putih.
- Posisikan mobil robot dan beri tanda pada lantai posisi awal mobil robot.
- Setelah mobil robot di program dan sudut sensor PING telah diatur dengan baik, kemudian jalankan.
- Setiap mobil robot bergerak maju kemudian stop, berikan tanda pada lantai dimana posisi mobil Robot berhenti hingga mencapai akhir program.
- Catat perubahan jarak yang terjadi, dari listing diatas anda mendapatkan 5 data jarak.
- Dengan menggunakan rumus perbandingan antar jarak dengan nilai PWM maka dapat disimpulkan apakah motor DC anda Linier atau logaritmik. Jika motor DC anda linier tidak masalah tetapi jika logaritmik baru masalah (tenang ga gede kok).

Oh ya satu lagi, anda ubah nilai PWM pada listing Gambar 1 hingga nilai tersebut minimum, yaitu nilai PWM terkecil yang masih menyebabkan motor DC bergerak (pelaaaaaan banget), catat nilai PWM tersebut karena akan digunakan untuk berbelok 180 derajat.

Untuk mempermudah pemahaman program, saya gunakan perintah IF THEN ELSE saja, mengapa saya menuliskan program IF THEN ELSE seperti itu, silahkan pikirkan sendiri (Wkkk.....).
Nilai PWM dapat anda atur sesuai perhitungan anda berdasarkan karakteristik motor DC anda. Kalo ingin lebih cepat dan halus pergerakan mobil robot gunakan PI-Fuzzy, atau metode yg anda inginkan. Sensor PING berada pada sisi kiri mobil robot, jadi diprogram untuk meraba dinding kiri saja.

Kondisi awal pergerakan mobil robot adalah penting, jika mobil robot diprogram untuk mempertahankan jarak terhadap dinding kiri maka setelah mendeteksi dinding kiri, mobil robot tidak boleh melepas dinding ini, apabila mobil robot "tersesat" dari dinding kiri, buat prosedur cadangan.

Kondisi awal mobil robot hanya ada 2 :
- Tidak terdapat dinding di sisi kiri mobil robot.
- Terdapat dinding di sisi kiri mobil robot.

Lebih baik menganggap kondisi awal tidak ada dinding kiri daripada ada dinding kiri oleh sebab itu kondisi awal tidak ada dinding kiri. Jika tidak ada dinding kiri maka agar mobil robot cepat menemukan dinding kiri, mobil robot harus bergerak lurus dengan PWM 255 sampai tersentuh dinding kiri (atau dinding depan atau kanan --> ada PING depan dan kanan).

Bagaimana jika mobil robot lepas dari dinding kiri dan "tersesat" ?
Listing pada Gambar 2 menyebabkan mobil robot akan berputar-putar (belok kiri) jika dinding kiri memiliki jarak > 30 cm karena nilai PWM motor kiri pelan sekali (bahkan stop) sedangkan nilai PWM motor kanan 255 (maksimum). Gunakan variabel tambahan yaitu unsigned char cnt_kiri (count kiri) yang akan terus bertambah jika dinding kiri jarak > 30 cm. Karena unsigned char maka nilai maksimum cnt_kiri adalah 255. Nilai maksimum cnt_kiri anda tentukan sendiri dan sesuaikan dengan kecepatan motor DC anda, jika terlalu besar nilainya dapat membuat mobil robot akan berputar-putar cukup lama. Saya sarankan anda mengatur nilai maksimum cnt_kiri yang akan menyebabkan mobil robot berputar sebanyak 1 - 1,5 putaran.

Mengapa 1 - 1,5 putaran ?
Mobil robot saat melewati tikungan 180 derajat itu berarti mobil robot telah berputar sebanyak 1/2 putaran dan arena yang dibuat berupa bidang sehingga mobil tidak mungkin berbelok lebih dari 180 derajat, akan tetapi karena menganggap ada faktor X lainnya seperti ada batu atau tanjakan atau yang lain maka dibatasi 1 - 1,5 putaran, lebih dari itu menurut saya terlalu lama.

Nah sudah jadi nih Mobil Robot yang bisa jalan-jalan, klo udah berhasil dan anda mendapatkan pergerakan yang halus, sana pamerin aja trus kacak pinggang dan bilang "Ini Fuzzy ini, pake Sugeno ma Mammdani. Apik to.."

Topik yang Populer