JavaScript is disabled or you're using old browser, please turn on your JavaScript or upgrade your browser to see fancy looking.
Posts Tagged ‘robot’

   

Galelobot 2008 dan CERC (Bagian I)

Fiuh, dari hari rabu belum pulang, dan akhirnya hari sabtu kemarin alhamdulillah sampai ke bekasi juga dan bisa ganti “CD”. Postingan kemarin sebenarnya merupakan postingan yang gw tulis malam kamis di kampus saat sebelum berangkat ke Bandung untuk mengikuti lomba galelobot 2008. Banyak yang ingin gw tulis selama berada di Bandung, tapi karena sulitnya mendapatkan akses internet terpaksa gw tahan birahi untuk menulis. Dari 3 hari kebersamaan dengan tim CERC di Bandung tanpa berada di depan kompie, gw mulai dapat mengenal beberapa karakter teman-teman CERC dan banyak hal lain yang bisa dipelajari (rasa kebersamaan serta bagaimana menjaga sikap di turnamen) dan hal yang akan dipelajari (teknologi robot dari tim lain). Ada seorang teman yang sangat sensitif, ya mudah-mudahan teman CERC yang lainnya bisa menjaga kelakuan terhadap teman kita yang satu ini, sungguh sebenarnya dia anak yang sangat baik dan penurut.

Read the rest of this entry »

When Life Throws You Lemon, Make a Lemonade

Ah, capek juga gw ngurusin hal-hal berbau robot melulu. Kayaknya memang tidak mudah jika semuanya harus belajar dan mengerjakan sendiri tanpa ada seorang guru. Disisi lain kami (CERC) belum menemukan figur seorang guru yang bisa kami ambil ilmunya (jujur gw masih minim banget dan perlu belajar banyak). Sudah beberapa kali anak-anak begadang untuk menyelesaikan pekerjaan robotnya tanpa ada arah yang jelas? Mmmh ada yang ingat? Mmmh.. sebenarnya pola kesalahan bisa mulai terbaca. Letak kesalahan yang fatal adalah kurangnya konsep dan desain awal (prototyping). Dari tahun kemaren, bahkan dari awal gw dan teman-teman bikin robot, pembuatan selalu dimulai dengan pembuatan rangkaian, terus dengan Macgyver style membuat base (ada seng, hajar bleh!! Ada akrilik, sikat bleh!!) dan simsalabin jadilah robot tanpa ada perhitungan dimensi, bobot atau apalah. Disini malfunction yang terjadi kadang tidak jelas! Bijimana bisa begitu? Semuanya sudah dicoba padahal, bahkan dari program, driver motor, motornya juga, sensor dan batere.

Sebenarnya di CERC kurang koordinasi!! Semua bisa jadi programmer, mekanik (tukang grinda dan gergaji :p) dan tukang solder. Dan disinilah terjadi salah-menyalahkan. Jika test program pertama bisa jalan, kenapa saat yang di test ke-2 kali bisa ngaco? Apakah blok sensor atau uC? Tuh yang bikin rangkaian si anu! Noh programnya si anu ngaco! Hehe..

Sebenarnya setelah beberapa bulan bersama CERC, gw mulai bisa melihat skill individu masing-masing. Misal Topik, gw ngeliat dia bagus dalam mendesain circuit dan base. Yogi, mahir di mekanika. Mamank dan Agung ahli gergaji, grinda dan bikin kopi :p (just kidding mank). Dadank dan Anto mengarah ke programmer C. Nah, dari situ semuanya bisa fokus ke keahliannya masing-masing kan? Spesific job tersebut masih bisa di roll jika merasa stuck. Tetap yang jadi masalah adalah tempat bertanya. Ini sebenarnya yang diperlukan di CERC. Gw juga sebenarnya gak bisa bantu banyak, karena pengetahuan gw sangat terbatas. Tapi ini yang gw demen ama anak-anak CERC, you’re Macgyver my man!! You just googling and hacking everything near to you.

Gw rasa anak-anak CERC juga merasakan hal yang sama, kegelisahan dan keputusasaan, di saat stuck menghadapi problem hardware or software (dan masalah lainnya). Tapi begitu keluar dari stack space, mereka bakal terbiasa dengan kegelisahan dan keputusan yang hanya hinggap sementara dihati. Kuncinya adalah ada sesuatu yang bisa lo manfaatkan disaat stuck (seperti apa kata judul posting ini). Fiuhh, dah jam 5 pagi.. kok belum ngantuk juga ya? *bakar marlboro dulu, fiuhh..

Line Tracer dengan Sistem Kontrol PD (Proportional Derivative)

Misalkan kita mempunyai susunan sensor, tampak atas, seperti berikut:

(4) ------ (3) - (2) -(1) ------ (0)

Dimana angka menunjukkan pin uC, katakanlah pada PORT C. Jadi kita menggunakan pin PORTC.0 untuk sensor paling kanan, PORTC.1 untuk sensor tengah kanan, dst hingga PORTC.4 untuk sensor paling kiri. Untuk mempermudah, saya biasanya menggunakan data mapping. Jadi kondisi sensor akan di mapping dengan data PWM motor. Katakanlah sensor line tracer itu aktif low, jadi pin uC akan membaca logika 0 saat mengenai garis. Oke, karena ada 5 sensor maka akan ada 2^5 = 32 kemungkinan kondisi sensor. Saya hanya akan membuat kedua robot bergerak maju, sehingga bisa di buat kontroler motor untuk bergerak satu arah saja. Saya akan membuat beberapa nilai sensor (dalam hexa) saja sebagai contoh, sisanya bisa diimpementasikan sendiri. Berikut tabelnya:

Nilai sensor PWM motor kiri PWM motor kanan
0×11 0xEF 0xFF
0×17 0xA0 0xFF
0×1D 0xEF 0×9F
0×0F 0×20 0xFF
0×1E 0xEF 0×2F
dst… dst… dst…

Saya mengimplementasikan PWM dengan menggunakan interrupt timer pada uC, dimana nilai 0xff adalah PWM full speed (100%) dan motor akan berhenti dengan nilai 0. Pada kasus saya, motor kanan dan kiri akan mempunyai nilai PWM yang berbeda untuk kecepatan aktual yang terlihat sama, jika dilihat pada tabel untuk membuat motor maju lurus nilai PWM kanan dan kiri berbeda 15 desimal. Jika merujuk ke sunsunan sensor, nilai 0×11 menunjukkan tiga sensor tengah mengenai garis, sehingga PWM motor diberi hampir full agar bergerak maju lurus. Kondisi 0×17 mengharuskan robot bergerak serong kiri dan kondisi 0×1E mengharuskan robot banting kanan. Dengan cara mapping nilai sensor dari PINC dengan data PWM kita sudah mengimplementasikan sistem kontrol proportional, dimana gain motor akan mempunyai proporsi sesuai nilai sensor yg diinput ke PINC. Untuk menulisnya dengan bahasa C, saya akan menggunakan array untuk menampung data PWM, berikut potongan programnya:

/**
 * isikan data PWM motor kiri dan kanan
 * sesuai dengan 32 kondisi sensor
 */
unsigned char PWMKiri[32] = { 0x00, 0x00, ... }
unsigned char PWMKanan[32] = { 0x00, 0x00, ... }
unsigned char state;

void scan() {
    state = PINC & 0x1F; //baca PINC.0 - PINC.4
    /**
     * beri nilai PWM motor kiri dengan
     * data PWMKiri dan PWMkanan
     * dimana indexnya adalah kondisi sensor
     */
    PWMKiriVal = PWMKiri[state];
    PWMKananVal = PWMKanan[state];
}

Untuk menambahkan kontrol derivative, kita perlu menggunakan delta PWM. Kita perlu mencatat data PWM sebelumnya. Kita bisa mengubah fungsi scan menjadi:

//variabel untuk menampung nilai PWM sebelumnya
unsigned char last_state, d; 

//jika dipanggil tanpa argumen, fungsi scan hanya sistem kontrol proportional
void scan(d = false) {
    state = PINC & 0x1F;

    //jika dipanggil dengan scan(1), aktifkan fungsi proportioal-derivative
    if (d) {
        PWMKiriVal = PWMKiri[state] + (PWMKiri[state] - PWMKiri[last_state]);
        PWMKananVal = PWMKanan[state] + (PWMKanan[state] - PWMKanan[last_state]);
    } else { //sistem proportional saja
         /* beri nilai PWM motor kiri dan kanan
         * dimana indexnya adalah kondisi sensor
         */
        PWMKiriVal = PWMKiri[state];
        PWMKananVal = PWMKanan[state];
    }
last_state = state;
}

Sistem derivative di atas hanya gambaran bagaimana menerapkan sistem kontrol PD, dan agak redundant jika digunakan dalam robot sederhana dengan 5 sensor. Dalam mendesain sistem derivative perlu diperhatikan apakah penyimpangan error dalam kondisi sistem itu cukup signifikan untuk membuat sistem bergerak stabil jika ditambahkan ke dalam sistem kontrol. Jika masih bingung apa itu sistem PID, coba di googling. Sebagai pendahuluan coba baca artikel PID di Wikipedia.

Arisan 26 Januari 2008

FYI, seperti biasa, hari sabtu akan diadakan arisan yang acaranya berisi kegiatan sharing knowledge di bengkel robot (dulu bekas ruang maintenance). Selain membahas tentang robotika juga akan ada sesi wireless oleh onay. Pembahasan mengenai robotika dimulai dari pagi (hanya Allah yang tahu mulainya jam berapa) dan siangnya bisa diselingi oprekan mengenai wireless. Siapa saja boleh datang dan tidak dipungut bayaran, kecuali tiba-tiba ada pungli dari preman untuk patungan gorengan dan minuman. Acaranya bebas tapi sopan, mau bertanya tentang apa saja boleh asal masih dalam batasan kami. Kalau waktu masih memungkinkan, saya juga akan melanjutkan topik web standard dan web semantik bagian 2, kalau tidak ya diteruskan di kontrakan fusi malam harinya.