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 gunak
an apakah linier atau logaritmik. Jika anda telah mengetahui linier atau logaritmik mak
a akan mempermudah mencapai hasil yang maksimal nantinya, tetapi jika anda tidak sabaran si
ahkan langsung ke listing Gambar 2 dan lakukan Trial and Error dengan mengubah nilai PWM te
rus-menerus hingga di
patkan hasil yang maksimal. Apabila anda beruntung dengan sedikit coba-coba ketemu dah.Pengu
ian yang baik dan lebih teliti tentu saja dengan menggunakan alat ukur kecepatan puta
ranatau tachometer atau encoder, tetapi saya mengangga
anda tidak memilikinya sehingga
engujian seperti di bawah ini (saya juga g
punya si).Cara pengujian sebagai berikut :
- Pr
gram awal ROBOT(Stop) selama
detik.- ROBOT(Maju) selama 3 detik dengan nilai
WM 250.- ROBOT(Stop) selama
detik.- ROBOT(Maju) selama 3 detik dengan nilai
WM 200.- ROBOT(Stop) selama
detik.- ROBOT(Maju) selama 3 detik dengan nilai
WM 150.- ROBOT(Stop) selama
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
arton putih.- Posisikan mobil robot dan beri tanda pa da lantai posisi awal mobil robot.Setelah
obil robot di program dan sudut sensor PING telah diatur dengan baik, kemudian jalankan.- Seti
p mobil robot bergerak maju kemudian stop, be
ikan tanda pada lantai dimana posisi mobil Robot berhenti hingga mencapai akhir program.
- Catat perubahan jarak yang terjadi, dari listing diatas anda mendapatkan 5 dat
a jarak.- Dengan menggunakan rumus perbandingan antar jarak dengan nilai PWM maka dapat
disimpulkan apakah motor DC anda Linier atau logaritmik. Jika mot
DC anda linier tidak masalah tetapi jika logaritmik baru masalah (tenang ga gede kok).O
h 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 (pelaa
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 :
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.."
By :
PayzZzz Jam 02:
15 Topik :
Robot-Coding, Robot-Wall Following
Rangkaian Schematic
Mobil robot yang akan dibuat menggunakan driver motor DC H-Bridge menggunakan IC L298.
Rangkaian schematik yang saya gunakan seperti di bawah ini
Perhatikan pemilihan Port dan konfigurasi yang digunakan, mengapa PortD dan mengapa
susunan setiap pin pada PortD untuk driver Motor DC seperti itu. Hal tersebut saya bahas pada
topik Mobil Robot & AVR. Jika driver motor DC telah dibuat, sekarang pengujian pergerakan
pada mobil robot.
Apabila menggunakan IC L298, sebenarnya anda tidak perlu mengetahui atau menghapal seluruh
konfigurasi pin, yang penting adalah Pin EN12 (Enable 12) dan Pin EN34 (Enable 34). Karena
menggunakan PWM dengan rentang nilai 0 - 255 maka untuk mikrokontroler AVR ATmega8535
pasti menggunakan PORTD dan menggunakan pin OCR1B (PORTD.4) dan OCR1A (PORTD.5).
Gambar 2 adalah listing program pengujian pergerakan motor DC pada mobil robot. Pengujian
ini bertujuan untuk mengetahui apakah driver motor DC berfungsi sehingga tidak menggunakan
PWM. Pengujian yaitu dengan menggerakkan salah satu motor DC agar bergerak maju atau
mundur selama selang waktu 3 detik, oleh sebab itu mobil robot dibuat tidak menyentuh lantai
dan tetap terkoneksi dengan komputer sambil diprogram. Agar motor DC bergerak maka Pin
enable harus berlogika 1, yaitu PD.4 dan PD.5 berlogika 1 dan tidak boleh diubah logikanya.
Langkah-langkah pada program Gambar 2 sebagai berikut :
1. Motor DC di buat berhenti selama 2 detik tujuannya agar mengetahui awal program dimana
sehingga jika Motor DC bergerak, dapat diketahui baris mana pada listing yang sedang
dieksekusi.
2. PD.0 PD.4 dan PD.5 berlogika 1 yang lain berlogika 0.
3. PD.1 PD.4 dan PD.5 berlogika 1 yang lain berlogika 0.
4. PD.6 PD.4 dan PD.5 berlogika 1 yang lain berlogika 0.
5. PD.7 PD.4 dan PD.5 berlogika 1 yang lain berlogika 0.
6. PD.2 dan PD.3 tidak diuji karena port ini tidak digunakan pada driver motor DC.
Pada langkah 2 - 6 Lihat motor mana yang bergerak dan apakah maju atau mundur.
Beri catatan disamping baris listing program yang sedang dieksekusi.
Gambar 3 adalah Listing program untuk menguji dan melihat pergerakan serta kecepatan mobil
robot saat kecepatan penuh. Tujuannya adalah untuk mengetahui logika-logika yang akan
diberikan pada setiap pin PD.0 PD.1 PD.6 dan PD.7 yang akan mengatur gerak robot seperti
Maju, Mundur, Belok Kanan, Belok Kiri, Rotasi Kanan, dan Rotasi Kiri. Selain itu juga
mengetahui kecepatan Maksimum mobil robot. Pengaturan port sama seperti pada Gambar 2.
Langkah-langkah pada program Gambar 3 sebagai berikut :
Dari hasil pengujian 3, buat subrutin atau prosedur baru dengan nama ROBOT(unsigned char
gerak) yang isinya hanya mengatur pergerakan mobil robot, jangan lupa bahasa C adalah case
sensitive yaitu huruf besar dan huruf kecil dibedakan, manfaatkan hal ini untuk membedakan
antara variabel dengan judul prosedur atau hal lainnya. Selain itu penggunaan type variabel juga
harus diperhatikan yaitu kapan menggunakan unsigned char, signed char, unsigned int, signed
int, dll, karena hal ini berpengaruh pada penggunaan memori AVR yang terbatas, berbeda pada
komputer yang menggunakan hardisk dan ram.
Mengapa unsigned char ?
signed char memiliki nilai -128 hingga 127
Unsigned char memiliki nilai 0 hingga 255
signed int memiliki nilai -32768 hingga 32767
Unsigned int memiliki nilai 0 hingga 65535
lebih jelas lihat help -> C Compiler Reference -> Data Type
Data yang dibutuhkan hanya :
Berarti data yang diperlukan hanya 7 data, jika unsigned char bahkan tersisa 256 - 7 = 249 data
yang berarti lebih dari cukup. Pada mikrokontroler nilai 0 - 255 berarti menggunakan 1 buah
register saja (1 byte memori).
.... Lanjut ....
Buat project baru dan lakukan konfigurasi seperti gambar 4 pada Code WizardAVR yaitu
menggunakan timer 1, dan atur konfigurasi Port D seperti pada Gambar 2. Berdasarkan
schematik Gambar 1 serta pengujian 2 dan pengujian 3 maka PD.4 atau OC1B adalah pin PWM
yang akan mengatur kecepatan motor kanan sedangkan PD.5 atau OC1A adalah pin yang
mengatur kecepatan motor kiri.
Lihat kembali Gambar 4.
Saat ROBOT(Stop) tidak diberikan nilai PWM karena berapapun nilai PWM yang diberikan
tetap saja kedua motor DC akan berhenti. Mobil robot akan berhenti selama 2 detik kemudian
maju 3 detik dengan PWM 255 (kecepatan penuh) lalu maju pelan 3 detik dengan nilai PWM
150. Tanpa berhenti mobil Robot akan mundur pelan 3 detik dangan nilai PWM 150 yang
kemudian menjadi mudur cepat dengan nilai PWM 255 selama 3 detik. Untuk ROBOT(Bkanan)
atau robot belok kanan berapapun nilai PWM yang diberikan pada motor kanan tidak
berpengaruh karena motor kanan berhenti dan motor kiri yang bergerak begitu pula sebaliknya
pada ROBOT(Bkiri) atau robot belok kiri . Untuk ROBOT(Rkanan) dan ROBOT(Rkiri) nilai
PWM saya buat berbeda antara kanan dan kiri agar terlihat pergeseran karena perbedaan nilai
PWM.
Jika anda ingin menguji 2 buah motor DC yang bertipe sama yaitu apakah motor DC memiliki
RPM yang sama dan simetris, begini caranya :
(dengan catatan poros atau as pada kedua roda mobil robot sejajar dan segaris).
- Ukur jarak maksimum antar roda kanan dan roda kiri pada mobil robot.
- Gunakan alas atau lantai yang tidak kasar (lantai keramik) atau kertas karton putih.
- Gambar lingkaran dengan diameter jarak maksimum antar roda.
- Program mobil robot untuk berotasi ke kanan (atau kekiri) dengan kedua PWM bernilai 255.
- Tempatkan mobil robot hingga kedua roda tepat berada didalam lingkaran dan jalankan.
Jika semakin lama mobil robot keluar dari lingkaran maka kedua motor DC tidak simetris.
Apabila anda kesulitan mendapatkan motor DC yang simetris maka usahakan agar perbedaannya
tidak besar karena bisa disesuaikan pada algoritma pemrogramannya.
Pada pengujian 4 mungkin anda mengalami hal seperti ini :
Dari Gambar 1 seharusnya sudah dapat memprogram untuk mengakses PING. Yang perlu
diperhatikan adalah sinyal dan waktu yang dibutuhkan pada SIG pin (pin Sinyal).
Langkah-langkah operasi Sensor PING :
- Kondisi awal SIG pin adalah logika 0 minimal 100 us (tidak tercantum).
- Mengaktifkan PING agar mulai pengukuran dengan memberikan logika 1 selama 2 uS - 5 uS
saya gunakan 5 uS (optional).
- Tunggu hingga 750 uS (Tholdoff) yaitu saat PING mulai memancarkan sinyal ultrasonik.
- Persiapkan SIG pin sebagai input yang akan membaca jarak dengan cara membuat SIG pin
berlogika 1, Apabila SIG pin berubah kondisi dari logika 1 menjadi logika 0 maka itulah jarak
terukur.
- Jika tidak terdapat dinding atau tidak ada jarak terukur maka waktu tin-max bernilai 18,5 ms
berarti jarak terukur adalah 300 cm.
Ada 2 cara memprogram Sensor PING, yaitu menggunakan Interupsi Timer dan Scanning.
Mana yang terbaik ? Tergantung dari penggunaannya.
Jika anda menggunakan Sensor PING untuk mengukur jarak dengan tingkat presisi hingga
milimeter maka gunakan interupsi timer. Apabila anda menggunakan banyak sensor PING
dengan tingkat presisi hingga centimeter maka gunakan Scanning.
Saya menggunakan scanning dan menggunakan interupsi timer tidak saya jelaskan.
Sebelum memprogram dengan sistem Scanning maka harus diketahui terlebih dahulu nilai
tundaan yang digunakan untuk menscan setiap sensor PING. Kecepatan sinyal suara di udara
adalah
344 M/S = 34400 cm/S = 34400 cm/1000000 uS = 1 cm/29,069767441 uS.
Karena Sensor PING menggunakan pantulan maka untuk mengukur jarak 1 cm sama
dengan 2t sehingga
1 cm = 2 x 29,069767441 uS = 58, 139534 uS ~ 58 uS.
Berarti setiap tertunda 58 uS bertambah jarak sebesar 1 cm.
Mobil robot yang baik adalah mobil robot yang selalu memberikan informasi pada programer
tentang apa yang terjadi didalam mikrokontroler dalam hal ini memberikan informasi berupa
jarak yang diukur oleh sensor PING, oleh sebab itu dibutuhkan Display tambahan berupa LCD
16x2. Programer sering kesulitan mengetahui kesalahan yang terjadi pada programnya jika tidak
terdapat umpan balik yang informatif.
Pada mobil robot yang saya buat tidak menggunakan LCD 16x2 sebagai umpan balik (lagi kere),
mungkin anda juga tidak ingin menggunakan LCD tambahan. Bagaimana caranya
meminimalkan kesalahan pada pengukuran jarak sensor PING ? Akan saya bahas selanjutnya
pada gambar 2.
Listing pada Gambar 2 adalah mengukur jarak dengan sensor PING dan menampilkannya pada
komputer melalui serial port (COM), lebih informatif dan jelas apalagi jika anda menggunakan
sensor PING yang banyak, sebab tampilan LCD memiliki ruang yang terbatas dan programer
tambah pusing lihat data yang berubah dengan cepat di ruang yang sempit. Mencatat saja tidak
sempat. Jika anda menggunakan modul Mikrokontroler AVR yang dibeli jadi, perhatikan port Rx
dan port TX atau PD.0 dan PD.1 apakah telah sesuai ?
Buat project baru, pada CodeWizzardAVR atur konfigurasi serial seperti Gambar 2 selain itu atur
seluruh Port B menjadi Output, mengapa saya memilih PortB, Hal tersebut saya bahas pada topik
Mobil Robot & AVR. Sensor PING depan di PB.0, sensor PING kanan PB.1, dan sensor PING
kiri PB.2.
Misal jarak terukur depan 20, kanan 15, dan kiri 30, maka tampilan pada komputer adalah :
Cek PING
Depan
20
Kanan
15
Kiri
30
Jika berhasil ditampilkan berarti mengakses sensor PING sukses.
Jarak terukur maksimum dibatasi hanya sampai 99 cm, hal ini karena mobil robot akan meraba
salah satu dinding dengan jarak referensi 20 cm dan maksimum 30 cm sehingga lebih dari 30 cm
dianggap jauh tak terhingga. Apabila ingin dibatasi hingga 50 cm saja lebih baik lagi karena
mengurangi waktu scanning sensor PING yang dibutuhkan.
Coba anda membaca jarak dinding diatas 45 cm akan terjadi kesalahan pembacaan jarak, misal
jarak sesungguhnya 55 cm maka jarak terukur kurang dari 55 cm, hal ini adalah kelemahan
sistem scanning. Telah didefinisikan bahwa 58 uS = 1 cm padahal jika anda menggunakan
mikrokontroler AT89S51 dengan kristal 12 MHz maka 1 siklus mesin (1 cycle) = 1 uS berarti 58
siklus = 58 uS = 1 cm. Jika menggunakan bahasa Assembler, banyaknya siklus bisa dihitung
(agak ribet tapi) sehingga bisa meminimal kesalahan, akan tetapi bahasa C jika di ubah ke bahasa
mesin akan menjadi tambah panjang bahkan lebih panjang dibanding jika anda menulis sendiri
dalam bahasa assembler apalagi dalam proses looping, hal ini menyebabkan waktu pengukuran
tidak tepat 58 uS.
Selain itu pada Gambar 2 digunakan 3 sensor PING, jika lebih banyak lagi bisa mengurangi
tingkat akurasinya. Akan tetapi untuk jarak tertentu pada sistem scanning masih bisa mendekati
akurasi yang baik. Saya mencoba, menampilkannya, dan mendapatkan nilai 4 cm - 44 cm.
Hal penting lainnya pada pengujian sensor PING adalah mengatur sudut kemiringan sensor
PING terhadap dinding yang akan diukur. Oleh sebab itu pada pengujian ini saya menyarankan
anda membuat sensor PING dapat diubah-ubah sudutnya secara fleksibel dengan membuat
pondasi sensor PING dapat diputar-putar.
Cara pengujian sensor PING dari Gambar 2 untuk sensor PING samping (sensor PING depan
tidak perlu diubah sudutnya) yaitu :
- Pasang sensor PING pada mobil robot dan longgarkan bautnya agar bisa diputar.
- Posisikan mobil robot sejajar dengan dinding samping dengan jarak 20 cm.
- Sensor PING samping dibuat tegak lurus terhadap dinding.
- Setelah di program dan dijalankan, putar secara perlahan sensor PING setiap 1 detik sambil
memperhatikan tampilan data pada komputer.
- Jika tampilan pada komputer 20 cm maka terus putar sensor PING hingga nilai tersebut
berubah menjadi >= 20 cm.
- Apabila jarak terukur >= 20 cm maka itu adalah sudut maksimum sensor PING yang
diperbolehkan untuk menghindari kesalahan pembacaan jarak.
Sudut sensor PING terhadap dinding harus diperhatikan, apalagi jika anda hanya menggunakan
sedikit sensor PING.
Oh ya, cukup dengan hanya 1 sensor PING saja, mobil robot dapat berjalan secara halus dan
bagus dengan meraba dinding selama tidak ada dinding didepan mobil robot.
Mobil robot yang saya paparkan disini minimal sensor PING adalah 2, tetapi jika anda kesulitan
- Fungsi USART
- Fungsi PWM
- Fungsi Interupsi eksternal
- Fungsi komparator analog
- Fungsi Serial Interface I2C
- ...
Gunakan terlebih dahulu pin-pin yang tidak memiliki fungsi khusus atau banyak jumlahnya atau
pin itu harus digunakan karena wajib.
- PD.0 dan PD.1 gunakan untuk komunikasi serial USART.
- PD.2 dan PD.3 gunakan sebagai interupsi eksternal.
- PD.4 dan PD.5 gunakan sebagai PWM pengatur kecepatan motor DC.
- PB.6 PB.7 PB.8 PC.2 PC.3 PC.4 PC.5 gunakan sebagai Input dan Output biasa.
- PC.0 dan PC.1 gunakan sebagai interface I2C, misal anda menggunakan sensor kelembaban
dengan interface I2C atau menggunakan Serial RTC I2C atau Serial EEPROM I2C tambahan.
- PB.0 - PB.7 gunakan sebagai ADC 10 bit akan tetapi jika terpaksa dapat digunakan beberapa
pin.
- Pin-pin lain yang anda tidak ketahui fungsinya dapat anda gunakan sesuai keinginan apabila
rancangan mobil robot anda sudah Final.
Saya menggunakan PortB untuk mengakses sensor PING, dan seluruh PortD untuk mengakses
Motor DC (kecuali PD.2 dan PD.3) alasannya :
Untuk PortD karena saya menggunakan kabel pelangi 10 baris dan jika PD.0 dan PD.1 tidak saya
gunakan maka harus mengambil dari port lain yang berarti ada jumper yang tidak perlu
sedangkan nantinya pin interupsi PD.2 dan PD.3 nanti akan dipakai sebagai interupsi eksternal,
selain itu mobil robot bergerak terus dan tidak perlu komunikasi serial dengan komputer.
Untuk PortB karenaaaaa...... udah terlanjur si. Seharusnya PortC dulu yang saya gunakan sampai
habis, tetapi karena tidak masalah ya lanjut aja.
Alasan anda memilih sebuah port terserah anda yang jelas sesuaikan dengan fungsi-fungsi yang
anda ingin aplikasikan.
Mungkin cukup ini saja yang dibahas pada ROBOT dan AVR, untuk mikrokontroler tipe lain
tidak saya bahas dan maaf karena tidak bisa.
By :
PayzZzz Jam 01:
48 Topik :
Robot-Wall Following
Untuk mekanik saya tidak bisa koment banyak, yang jelas bisa mengetahui teorinya dan
rancangan dasar mekanik sudah cukup. Selanjutnya serahkan pada ahlinya dan sebaiknya anda
ahli dibidang anda sendiri dalam hal ini Elektronika Digital (Robotika).
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@