JavaScript is disabled or you're using old browser, please turn on your JavaScript or upgrade your browser to see fancy looking.
Archive for May, 2007

   

Nustaffsite dan blognya para dosen Gunadarma

Lagi iseng-iseng googling dengan keyword gunadarma, eh nemu nustaffsite. Saya pikir itu sama dengan staffsite, lalu saya coba googling nustaffsite. Akhirnya saya mendapatkan sedikit info dari blognya Ibu ratih. Saya memang orang yang ketinggalan informasi mengenai perkembangan di kampus, maklum jarang ke kampus. Jadi sekarang setiap dosen yang sudah migrasi ke nustaffsite dapat memiliki blog. It’s cool..

Oh ya, Blog setiap dosen dapat dilihat dari link blog yang ada di setiap homesite dosen tersebut, jika belum terregistrasi pastinya akan redirect ke blank page untuk sign up new. Engine yang digunakan sepertinya wordpress-mu, multi-user WP, sama seperti yang digunakan dalam wordpress.com. Mungkin nantinya akan ada, atau sudah??, nustudentsite nya dengan blog untuk setiap mahasiswa/i nya :D

Fuzzy Logic Untuk Navigasi Robot (Bagian I)

Seperti apa yang pernah diucapkan almarhum buyut :D:

The only source of knowledge is experience

Albert Einstein

Saya ingat bagaimana saya membuat robot pertama kali dengan pengetahuan nol dalam bidang robotika dan juga elektronik. Meskipun banyak buku, artikel dan tutorial yang membahas bagaimana membuat robot dari awal, rasanya hanya akan membuat bingung dengan segudang referensi tanpa mengotori tangan dengan solder dan coding. Akhirnya saya lupakan referensi dan mengingat sebagaian referensi yang masih menyangkut di otak. Ini saatnya memakai otak untuk sedikit berpikir dan berimajinasi. Jadi teringat pesan buyut :D :

Any man who reads too much and uses his own brain too little falls into lazy habits of thinking.

Albert Einsten.

Berhubung robot yang dibuat hanya sebatas tugas lab, maka saya tidak memprioritaskan untuk membuatnya istimewa. Cukup bekerja sesuai deskripsi yang diminta. Apabila saya mengingat robot itu, saya tertawa membayangkan baris program yang sangat sederhana sekali, tapi beberapa orang melihatnya cukup serius :D. Mungkin ini juga sering terjadi apabila Anda belajar bahasa pemrograman dan sebulan kemudian melihat program Hello World. Tadinya saya berniat menaruh skematik beserta program di tulisan ini, tapi filenya entah di mana.. :D. Robot yang saya buat ini adalah light seeking, hanya menggunakan 3 LDR. Kalau tidak salah ada koran yang memuatnya (he2.. narsis).

Robot kedua yang saya buat dibuat untuk mengikuti kontes robot line follower di kampus, kontes perdana.
Masih dengan pengetahuan yang sangat minim dan agak sotoy (karena menganggap enteng) dan masih acuh terhadap sistem kontrol, maka yang terbesit saat itu hanya teknik kontrol ON-OFF. Teknik kontrol seperti ini masih bisa di terapkan di arena tak bersimpang, namun arena yang digunakan banyak terdapat simpangan, sehingga dibutuhkan teknik kontrol
yang dapat mentolelir gain motor. Hal yang pertama di lakukan adalah melakukan pendataan kondisi sensor pada garis dan menentukan aksi terhadap kondisi tersebut. Pada robot tersebut digunakan 5 sensor dengan susunan sebagai berikut :

(4)___(3)_(2)_(1)___(0)

Angka tersebut menunjukkan urutan pin pada port mikrokontroller. Untuk nilai binary dengan 4 variabel (sensor) memliki kemunkinan nilai unik (kondisi sensor) sebanyak 2^4 = 16. Tidak semua kondisi digunakan. Adapun kondisi yang perlu diprioritaskan untuk mendapatkan aksi adalah :

—————————————————-
4 | 3 | 2 | 1 | 0 | Aksi
—————————————————-
x | 0 | 1 | 0 | x | Maju
x | 1 | 1 | 0 | x | Serong kiri
x | 1 | 0 | 0 | x | banting kiri
x | 0 | 1 | 1 | x | serong kanan
x | 0 | 0 | 1 | x | banting kanan
x |1 | 1 | 1 | x | Maju
——————————————————
1 menunjukkan sensor berada pada garis.
Pengaturan jarak antar sensor disini memungkinkan 2 atau 3 sensor mengenai garis. Dengan mengabaikan sensor paling kiri (4) dan kanan (0) dan menggunakan aksi sesuai tabel, robot saya dapat berjalan cukup smooth mengikuti garis lurus. Bila terdapat jalur berupa huruf L, sensor (0) dan (4) bisa membantu. Kontrol yang digunakan hanya proportional
saja, yaitu pemberian PWM motor. Apabila diinginkan pergerakan yang lebih smooth bisa menambah kontrol derivative. Mendapatkan nilai konstanta proportional yang tepat adalah melalui test berulang kali. Ini seperti melakukan mapping input sensor terhadap output PWM motor. Nilai input disini sangat sederhana jadi tidak perlu menggunakan fuzzy logic. Beberapa orang menyebutnya dengan table lookup. Oia ini video robotnya, cupu abis :

http://www.youtube.com/v/ks1zYPqFcEI

Sialnya nih robot dah di gondol oleh orang yang tidak tahu berterima kasih tidak bertanggung jawab, tidak menghargai karya orang lain, menipu dosen (dengan mengklaim robot saya sebagai robot buatannya). Dan parahnya dia adalah seorang wanita yang seharusnya menjadi pamong bagi mahasiswa/i di filkom (ketua BEF). Astagfirullah,
mudah-mudahan Allah ta’ala memaafkannya. Saya sendiri sudah mengikhlaskannya (mudah2an). Apabila ada yang tertarik ini source codenya. Saya bukan programmer sekelas Kel, jadi masih banyak menggunakan delay. Rutin utama yang perlu diperhatikan adalah rutin scan :scan:
mov a,p1
anl a,#0eh
jz cekKiKamov p2, #66h
mundur: ;serkan / serkir / maju, 0,6,c,e
mov B, A
movc A,@A+dptr
mov pwmKi, A
mov A, B
inc A
movc A,@A+dptr
mov pwmKa, A
ret

mundur_:mov p2, #3Ch
sjmp mundur

cekKiKa:jnb sKiLuar,_kanan
_kiri: mov pwmKi,#40h
mov pwmKa,#50h
mov p2, #36h
ret

_kanan: jnb sKaLuar,mundur_
mov pwmKi,#50h
mov pwmKa,#40h
mov p2, #6Ch
ret

Pemanggilan rutin scan secara otomatis akan memandu robot untuk mengikuti track putih tanpa mempedulikan simpangan. Pertama-tama kontroler akan membaca kondisi sensor saat itu nilai sensor akan menentukan alamat pengambilan data PWM motor. Penggunaan instruksi ‘anl a,#0eh’ akan membaca 3 sensor tengah (sesuai dengan susunan sensor yang saya jelaskan di atas). Instruksi ‘jz cekKiKa’ akan mengecek nilai accumulator, apabila ‘0′ maka sensor paling ujung (0 & 4) akan dicek. Jika ada salah satu dari sensor (0) atau (4) mengenai track putih (memberikan logik ‘1′) maka robot akan spin ke arah sensor bernilai ‘1′ tersebut. Ini berguna untuk track yang memiliki belokan berbentuk huruf L. Jika 3 sensor tengah memberikan nilai ‘0′ dan tidak ada sensor (0) dan (4) yang memberikan logik ‘1′ maka robot akan mundur. Ini kurang efektif, jika saya berpikir sekarang, untuk digunakan sebenarnya. Sayangnya, rutin ini hanya bisa diimplemetasikan pada jalur lurus. Ada paper menarik, Penggunaan Kombinasi Sensor Array Depan dan Belakang pada Robot Pengikut Garis (Kasus Robot Otomatis ASKAF-i), yang menggunakan tambahan sensor belakang dalam kombinasi sensor Array. Jika Anda menginginkan navigasi line tracking yang lebih robust, paper ini dapat dijadikan acuan. Jika jalur yang digunakan tidak lurus, terdapat jalur melengkung, ada baiknya melihat robot ini.
Robot yang saya kerjakan saat ini (sudah selesai seminggu yang lalu) menggunakan fuzzy logic untuk navigasinya, baik untuk wall following (mengikuti dinding) dan obstacle avoidance (menghindari dinding). Karena menggunakan sensor ultrasonic, data untuk satu sensor tidak lagi berupa biner. Biner dalam bahasa pemrograman tingkat tinggi dapat di padankan sama halnya dengan tipe data boolean (true atau false). Engineer melihatnya sebagai level tegangan, apabila bekerja dengan komponen logika, yang mempresentasikan 0 atau 5 V. Tapi tidak absolut 0 atau 5 (tergantung spesifikasi komponen tersebut). Misal jika sebuah sensor memberi masukan 5 V, program melihatnya sebagai ‘1′ atau true, yang mengindikasikan sensor menangkap adanya objek yang berdekatan. Bila tidak objek yang menghalangi sensor dalam batas toleransinya, maka akan dihasilkan tegangan 0 V, dimana program merepresentasikan nya sebagai ‘0′ atau false. Secara sederhana program dapat di tulis seperti ini :

if (sensor==1) {
aksi(1); //aksi yang dilakukan sistem bila ada objek
} else {
aksi(0); //aksi yang dilakukan sistem bila tidak ada objek
}

Dalam teknik kontrol, ini termasuk kontrol ON-OFF. Bagaimana bila sistem yang kita inginkan dapat melakukan aksi yang berbeda untuk jarak yang sangat jauh, jarak jauh, sedang, cukup dekat dan dekat. Mungkin ini saatnya menggunakan Fuzzy logic. Teori fuzzy logic dipropose oleh seorang ahli matematika bernama Lotfi Zadeh pada tahun 1973. Sebelumnya Zadeh memperkenalkan teori fuzzy set pada tahun 1965.

Bersambung … (Ntar lagi ya lanjutinnya, banyak image nya soalnya bagian ke-II)

WP Themes for KSLUG

There are 2 WP themes i’ve made for KSLUG. Actually i didn’t design thus themes from scratch, i just redesigned some themes that i mix together. If you have interest with KSLUG themes, i made thus themes available for download. Current theme which KSLUG used, v1.1, is based on underground template. You can download this WP theme here. Another theme, v1.0, which is firstly redesigned is based on Sadish Bala’s theme called Intense (this blog uses this theme), but later i modified Porter’s lgblue3c-10 theme for KSLUG v1.0. You can download this theme here. There is no plugin added to this theme so fresh installation of WP should working with this theme. You can alter KSLUG’s logo with your own logo to suit your needs. If your logo has different size with KSLUG’s logo, you should modify style.css. If you have problem with these themes, just drop me a message :D

Kemudahan Memprogram LCD (Bagian II)

Merujuk pada tulisan saya terdahulu, serta beberapa komentator yang menanyakan program, maka pada tulisan kali ini saya akan memberikan contoh program (berdasarkan rutin siap pakai dari beberapa situs serta rutin yang built in
dari compiler tertentu) utk interfacing dengan lcd dengan berbagai macam compiler disesuaikan dengan mikrokontroller yang digunakan (MCS51 atau AVR RISC 8 bit).

Seperti yang saya paparkan pada postingan terdahulu, bahwa ada 2 cara utk berkomunikasi dengan LCD, yaitu 8 bit dan 4 bit jalur data. Selain 8 atau 4 jalur yang terhubung dengan kontroler, dibutuhkan 3 jalur lagi untuk kontrol, yaitu RS, RW dan EN.

Untuk MCS51 :

  1. Dalam Assembler Ada banyak rutin siap pakai di http://8052.com/codelib.phtml Yang sudah saya coba : http://8052.com/codelib/lcd_kepad.asm, rutin ini untuk komunikasi 8 bit. Jika menggunakan LCD 2 x 16, tidak perlu ada modifikasi pada rutin INITIALIZE. Contoh penggunaannya :
    ...
    DATA   EQU PORTx     ;misal x adalah PORT1
    LCD_RS EQU PORTy.0   ;misal y adalah PORT2
    LCD_RW EQU PORTy.1
    LCD_EN EQU PORTy.2
    CALL INITIALIZE      ;inisialisasi LCD
    CALL CLEAR_SCREEN    ;bersihkan layar
    MOV A,#80h           ;mengisi 0x80 ke accumulator untuk menset
    CALL ADDRESS         ;alamat DDRAM LCD. Ini akan menset posisi
                         ;LCD pada baris 1 kolom 1.
    MOV A,#'g'           ;Menulis karakter 'g'
    CALL WRITE_ON        ;pada baris 1 kolom 1
    MOV DPTR,#str1       ;menset data pointer ke alamat dgn label str1
    CALL TRANSFER        ;mencetak string 'gedex
    ...
    str1:
    DB 'gedex',offh      ;rutin TRANSFER akan mencetak karakter per karakter
                         ;dan memerlukan byte 0xff utk menandakan akhir dari
                         ;string.
    ...

    Jika saat kompilasi timbul error yang berhubungan dengan baris yang terdapat kata DATA, maka penamaan DATA perlu di rubah. Di beberapa compiler,DATA merupakan reserved word.
    Catatan : Saya mengcompilenya dengan Pinnacle v52 (Evaluation) dan ASM51.
    Pada Pinnacle tidak ada masalah terhadap penamaan DATA. Pada ASM51 timbul error, sehingga penamaan DATA perlu di rubah.

  2. Menggunakan BASCOM 8051 IDE.
    Komunikasi yang digunakan bisa 8 bit atau 4 bit. Jika menggunakan komunikasi 4 bit, maka pin LCD untuk data yang digunakan adalah DB4-DB7. Konfigurasi pin LCD ke port kontroller di inisialisasi dengan statement Config Lcdpin, misal :

    Config Lcdpin = Pin ,Db4 = P3.4,Db5 = P3.5,Db6 = P3.6,Db7 = P3.7,E = P2.4,Rs = P2.0

    Dengan pin RW terhubung ground. Tipe LCD yang digunakan diinisialisasi dengan statement Config LCD, misal :

    Config Lcd = 16 * 2

    Setelah pemanggilan statement di atas, LCD siap dikirimi data atau instruksi. BASCOM juga telah menyediakan syntax yang berhubungan dengan LCD seperti :
    CLS : untuk membersihkan layar
    CURSOR : dengan parameter ON/OFF, BLINK/NOBLINK
    LOCATE y,x : untuk memindahkan kursor ke posisi tertentu.
    LCD : mencetak konstanta atau variabel ke tampilan LCD.
    dsb.. Contoh penggunaannya :

    ...
    Config Lcdpin = Pin , Db4 = P3.4 , Db5 = P3.5 , Db6 = P3.6 , Db7 = P3.7 , E = P2.4 , Rs = P2.0
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    Locate 1 , 1 : Lcd "gedex"
    Locate 2 , 1 : Lcd "C"; "o"; "o"; "L"
    ...

    Komunikasi secara 8 bit pada BASCOM direkomendasikan untuk berkomunikasi dengan mikroprosesor, dimana DB0-DB7 harus terhubung dengan D0-D7 dan RS / EN dengan jalur A0. Saya sendiri belum pernah mencobanya.
    Catatan : Saya menggunakan BASCOM 8051 v2.0.11.0 Serial Demo.

Untuk AVR RISC Microcontroller 8 bit :

  1. Menggunakan AVR Studio
    Rutin dari OMIDKOMPANI, dapat di download di http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=904&item_type=project
  2. Menggunakan WinAVR
    Rutin dari by iamgotzaa. Contoh pada program main nya akan menampilkan hasil sampling ADC ke LCD. dapat di download di http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=440&item_type=project
    Rutin dari nasi, dapat didownload di : http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=293&item_type=project
  3. BASCOM utk AVR
    Penggunaannya hampir sama dengan BASCOM 8051 IDE
  4. Menggunakan CodeVisionAVR
    CodeVision menyediakan wizard, CodeWizardAVR, untuk menggenerate baris kode untuk mendefiniskan LCD. Interfacing ke LCD ini membutuhkan 7 pin pada port yang sama. Misal digunakan PORTB untuk LCD port, maka konfigurasi pin antara LCD dan chip AVR adalah :
    PORTB.0 : RS
    PORTB.1 : RW
    PORTB.2 : EN
    PORTB.4 : DB4
    PORTB.5 : DB5
    PORTB.6 : DB6
    PORTB.7 : DB7
    Langkah-langkah menggunakan CodeWizardAVR untuk LCD :

    1. Pilih Create new file
      Create New File
    2. Pilih File type project
      File type project
      Lalu pilih yes untuk menggunakan CodeWizardAVRPilih yes untuk menggunakan CodeWizardAVR
    3. Akan muncul jendela seperti gambar di bawah ini. Pilih chip yang digunakan serta clock yang dipakai. Misal menggunakan ATMega16 dengan frekuensi clock 4 MHz
      tampilan jendela untuk CodeWizardAVR
    4. Pindah ke tab LCD, pilih port yang akan di gunakan untuk LCD port. Misal pada PORTB, maka hubungan pin antara LCD dan PORTB akan ditampilkan.
      tab LCD pada CodeWizardAVR

Menggunakan rutin LCD yang sudah built in dari compiler tertentu dapat mempermudah pekerjaan dan menghemat waktu. Jika LCD yang digunakan hanya digunakan sesaat, misal nya hanya untuk debug data dari sensor atau bagian sistem yg tidak significant, maka saya menyarankan untuk menggunakan rutin bawaan dari compiler dengan komunikasi 4 bit. Gambar di bawah ini adalah LCD yang biasa saya pakai untuk memonitor nilai sensor atau debug sistem.

My typical lcd used for debuging