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

Newer Entries  Older Entries 

PWM dengan Interrupt Timer

Ada beberapa teman (especially me2t) yang masih bingung bagaimana sebenarnya Interrupt Timer dapat digunakan sebagai PWM (Pulse Width Modulation). Sebelum menjelaskan lebih dalam mengenai Timer, saya akan mengulas balik tentang sumber pencacah (clock source) pada uC AVR. Sumber pencacah untuk AVR itu seperti detak jantung yang diperlukan untuk mengeksekusi instruksi. Pengeksekusian instruksi umumnya membutuhkan satu sampai tiga siklus pencacah (clock cycles). Satu siklus adalah transisi low-hi-low _|¯|_. Jadi semakin cepat pencacah berjalan (menghitung), maka semakin cepat uC bekerja. Jadi jelas uC AVR 16 MHz akan lebih cepat dari uC AVR 1 MHz. Tapi perlu diperhatikan, kecepatan pencacah tidak begitu berarti banyak. Satu prosesor dapat membutuhkan 1 siklus pencacah untuk memindahkan data dari satu register ke register lainnya, tapi prosesor lain dapat saja membutuhkan 2 sikus pencacah untuk melakukan hal yang sama. Hal ini berarti bahwa prosesor ke-2 harus memiliki kecepatan 2x lipat prosesor ke-1 untuk melakukan instruksi yang sama dalam waktu yang sama. Kuncinya disini adalah sebuah penilaian kasar yang disebut MIPS (Milion of Instructions Per Second), yang dapat digunakan untuk menilai secara kasar berapa instruksi yang dapat dilakukan uC dalam satu detik pada frekuensi pencacah tertentu. Jika pada lembar data (datasheet) tertulis “Up to 16 MIPS Throughput at 16 MHz”, kita bisa mengasumsikan secara kasar bahwa dengan pencacah 4 MHz, kita bisa mencapai 4 MIPS (4 juta instruksi per detiknya atau sekitar 1/4 uS untuk eksekusi 1 instruksi, CMIIW). Sebenarnya penjelasan untuk pencacah dapat lebih panjang, tapi sisanya saya serahkan kepada pembaca untuk mengubeknya di google dan datasheet terkait :).

Read the rest of this entry »

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.

Vex Motor and Tank Tread

Dank.. Mainan lo tiba nih. Total 99.96 USD, biaya shipping nya tidak diketahui. Jadi nih kayaknya kita camping malam selasa, jangan lupa stock kopi susu.

Vex Motor and Tank Tread

Menggunakan 6 Ping dengan 2 Microcontroller AVR 8 bit RISC untuk Navigasi Robot (Bagian 0)

Daftar Tulisan Berseri untuk tutorial AVR - PING

  1. Menggunakan 6 Ping dengan 2 Microcontroller AVR 8 bit RISC untuk Navigasi Robot (Bagian 0)

Pendahuluan

Tulisan ini sebenarnya saya tujukan untuk klub robotika tidak resmi di Gunadarma (Dadank, Rum, Anto, Yogi, dkk), mudahan-mudahan niat yang ikhlas untuk belajar bersama dan berbagi ilmu dapat menambah pahala dan membuka minat para mahasiswa Gunadarma lainnya, khususnya jurusan SK, TK dan elektro, untuk menggeluti bidang robotika. Mudah-mudahan tulisan ini dapat juga berguna bagi khalayak ramai :).

Tulisan ini ditujukan untuk pemula yang ingin mengenal microcontroller (uC) AVR RISC serta penggunaan 6 sensor PING (sensor ultrasonic) untuk navigasi robot dengan penerapan metode Fuzzy Logic. Dasar elektronika, microprocessor-microcontroller (uC/uP), dan pengetahuan dalam bahasa pemrograman prosedural (C, Pascal, atau Basic) merupakan nilai tambah untuk dapat mempermudah memahami tulisan ini. Read the rest of this entry »

Tamiya Double Gearbox 4-Speed akhirnya tiba

Setelah menunggu lebih dari sebulan akhirnya order dari digi-ware tiba juga. Ini karena paket tersebut harus dipesan dulu ke luar. Sebenarnya kalau punya account semacam paypal bisa langsung order ke luar tanpa melalui perantara. Sebenarnya gw ngincer motor DC Vexta 24 V, tapi langka juga di jabotabek dan ketemunya malah di e-bay. Tapi, lumayanlah bisa dijadikan senjata kalau ada event semacam galelobot. Ini barang-barang yang gw order (sekalian komponen pendukung) :

tamiya double gear box 4 speed

Newer Entries  Older Entries