Archive for Desember, 2011

Robot Line Follower dengan Kendali PID-Fuzzy

Robot Line Follower dengan Kendali PID-Fuzzy

Ane mau… sharing lagi nih ma temen2 tentang LF… mungkin ada yg bosen kok isi blog ini kebanyakan robot LF aja heheheeehe 😀 Ya begitulah kondisinya temen2 ane maniak banget dengan ni robot LF makanya ane suka ber-eksperiment tentang bagaimana menerapkan berbagai kendali yg tepat untuk diterapkan di robot LF ini supaya pergerakannya itu halus cepat dan responsif. Yups ane dah menerapkan kendali PID pada ni robot dan saat ini ane mencobanya dengan menggabungkannya dengan kendali Fuzzy. Ide itu berawal dari setelah ane dapat matakuliah sistem pengaturan cerdas di Teknik Elektro ITS. Matakuliah (walaupun cuma 2 sks) itu saat ane senangi temen2… dimana dosennya mantep banget (perfect) jelasinnya (terimakasih banyak ya pak) tidak hanya teori tapi praktek juga… so ane terrapin deh di robot LF ane :D. Nah oleh sebab itu ane coba share ilmu yg sedikit ini kepada temen2 semua… semoga bermanfaat dan bisa dijadikan referensiya… ^_^

Nah sebelum ane jelasin tentang logika Fuzzy-nya ane kenalkan dahulu ye ma robot LF ane yang tersisa, maksudnya yang kondisinya masih FIT alias sehat (masih bisa nyala). Ni dia foto-fotonya:

Temen2 semua dah liatkan robot LF ane yang satu ini… Jelekkan (kurang estetika)… hehehe 😀 itu lah robot ane.. desain mekanik ala kadarnya… menggunakan acrylic sisa dan PCB bolong sebagai kerangka robotnya… sensornya pun langsung ditanam di PCB bolong gak pake desain layout langsung solder aja praktis bukan… komposisi gearbox-nya pake kanibal maenan tank terus ane tempel ke bodi robotnya pake Lem Tembak… itulah senjata ane gan ^_^  walaupun mekanik robotnya jelek,  setelah diberi kontroler yang tepat jalannya bisa halus lo hehehe 😀 ini dia salah satu aksi robotnya pada kasus Line Maze Robot.

Nah ni dia spesifikasi lengkap dari robot LF ane :

  • Mikrokontroler AVR = ATMega32
  • Sensor = LED Super Bright Putih – Photo Dioda (8 di depan, 3 di sayap kiri, 3 di sayap kanan dan 1 di tengah belakang sebagai kondisi NOS… total pake 15 sensor dengan Konfigurasi ADC-Multiplekser)
  • Motor DC = DVD 6.0 V
  • Gear  = Kanibal dari maenan Tank
  • Battery = LiPo 850mAH / 11,1V
  • Driver Motor = L293d
  • Dimensi = panjang; 18 cm × lebar; 15 cm
  • Bahasa Pemrograman = Bahasa C dengan compiler  CodeVision AVR

Selanjutnya untuk penjelasan logika Fuzzy ini temen2 bisa googling di mbah google ato baca sedikit penjelasnya disini ato sedot ni paper. Berikut ini aturan yang harus temen2 fahami tentang logika Fuzzy yang ane uraikan sebagai berikut (bila ada kesalahan mohon ane dikoreksi ya gan ^_^ ).

Tahap Pemodelan dalam logika Fuzzy:

Nah bila kita terapkan dalam pengendalian proses dapat diterapkan seperti blok di bawah ini:

Dari uraian blok diatas dapat kita fahami bahwa didalam logika Fuzzy terdapat tiga hal terpenting yang harus temen2 fahami diataranya:

  1. Fuzzifikasi adalah proses untuk mengubah variabel non fuzzy (variabel numerik) menjadi variabel fuzzy (variabel linguistik).
  2. Inferencing (Ruled Based) , pada umumnya aturan-aturan fuzzy dinyatakan dalam bentuk “IF……THEN” yang merupakan inti dari relasi fuzzy.
  3. Defuzifikasi adalah proses pengubahan data-data fuzzy tersebut menjadi data-data numerik yang dapat dikirimkan ke peralatan pengendalian.

Oke deh… segitu aja ya penjelasan dari ane tentang teori logika Fuzzy-nya… selanjutnya ane jelasin tentang cara pengaplikasiannya pada robot LF… tapi logika Fuzzy yang ane terrapin pada robot LF ini tidak murni hanya dengan logika Fuzzy saja tapi digabungkan (hybrid) dengan kendali PID… so judulnya yang lebih tepat adalah Robot Line Follower dengan Kendali Hybrid PID-Fuzzy.

Diagram Blok Hybrid Kendali PID – Fuzzy

Nah untuk penjelasan Kendali PID-nya bisa temen2 lihat postingan ane yg lampau disini. Dan untuk penjelasan logika Fuzzy-nya ialah sebagai berikut:

Perhatikan step berikut temen2 :

Aplikasi pemrograman logika fuzzy ini ane terapkan dalam bahasa C (codevisonAVR), ini dia potongan program untuk penentuan membership pada proses penentuan crisp input dalam proses fuzzikasi-nya. Ane menggunakan 7 membership dalam proses cris input pada Fuzzifikasi error dan derror-nya, dengan fungsi keanggotaan segitiga (triangle membership function).  Berikut ini sample code fuzzifikasi-nya:

fuzzifikasi

Proses fuzzifikasi, fungsi keanggotaanya ane aktifkan dengan fungsi keanggotaan segitiga yang selanjutnya masuk ke proses Rule Base Evaluationnya. Proses Rule Evaluation-nya mengacu pada tabel MacVicar Whelan dengan menggunakan Mamdani Inference Rule, berikut ini contoh tabee proses rule evaluationya menggunakan teknik dari MacVicar Whelan dengan menggunakan 5 membership error dan derror. Untuk case pada robot ini, ane gunakan 7 membership error dan derror.

Nah berikut ini sample codenya untuk Mamdani Inference Rule using MacVicar Whelan Method:

Inference Rule

Dari hasil rule evaluasi ini kita dapatkan hasil kontrol logika fuzzy-nya yang selanjutnya kita defuzzifikasi yaitu dengan banyak cara (bisa lihat disini sebagai reference) diantaranya yang paling umum adalah dengan teknik Center of Gravity (COG). Nah untuk case robot ini, ane gunakan teknik dari Sugeno menggunakan Weighted Average (WA). Berikut ini sample code defuzzifikasi-nya:

defuzzifikasi

Dari proses defuzzifikasi ini baru lah kita dapatkan sinyal kontrol logika Fuzzy yang akan kita terapkan pada robot LF nantinya. Nah selajutnya proses pemberian nilai PWM motor robot LF ane adalah gabungan (hybrid) antara kendali PID dengan logika Fuzzy. Berikut sample code untuk ditransfer ke aktuator (driver motor robot) dalam bentuk PWM:

Dan ini dia video robot LF ane dengan kendali Kendali PID – Fuzzy…

Semoga informasi ini bermanfaat :)

Driver Motor DC pada Robot Beroda dengan Konfigurasi H-BRIDGE MOSFET

Nah berikut ini ane tulis tentang driver motor yang biasa ane gunakan pada robot beroda, driver motor ini menggunakan mosfet, nah berikut uraian penjelasannya:

Teori Motor DC:

Motor DC adalah piranti elektronik yang mengubah energi listrik menjadi energi mekanik berupa gerak rotasi. Pada motor DC terdapat jangkar dengan satu atau lebih kumparan terpisah. Tiap kumparan berujung pada cincin belah (komutator). Dengan adanya insulator antara komutator, cincin belah dapat berperan sebagai saklar kutub ganda (double pole, double throw switch). Motor DC bekerja berdasarkan prinsip gaya Lorentz, yang menyatakan ketika sebuah konduktor beraliran arus diletakkan dalam medan magnet, maka sebuah gaya (yang dikenal dengan gaya Lorentz) akan tercipta secara ortogonal diantara arah medan magnet dan arah aliran arus. Mekanisme ini diperlihatkan pada Gambar berikut ini.

Bagan mekanisme kerja motor DC magnet permanen

Motor DC yang digunakan pada robot beroda umumnya adalah motor DC dengan magnet permanen. Motor DC jenis ini memiliki dua buah magnet permanen sehingga timbul medan magnet di antara kedua magnet tersebut. Di dalam medan magnet inilah jangkar/rotor berputar. Jangkar yang terletak di tengah motor memiliki jumlah kutub yang ganjil dan pada setiap kutubnya terdapat  lilitan. Lilitan ini terhubung  ke area kontak yang disebut komutator. Sikat  (brushes)  yang terhubung ke kutub positif dan negatif motor memberikan daya ke lilitan sedemikian rupa sehingga kutub yang satu akan ditolak oleh magnet permanen yang berada di dekatnya, sedangkan lilitan lain akan ditarik ke magnet permanen yang lain sehingga menyebabkan jangkar berputar. Ketika jangkar berputar, komutator mengubah lilitan yang mendapat pengaruh polaritas medan magnet sehingga jangkar akan terus berputar selama kutub positif dan negatif motor diberi daya. Kecepatan putar motor DC (N) dirumuskan dengan Persamaan berikut.

Pengendalian kecepatan putar motor DC dapat dilakukan dengan mengatur besar tegangan terminal motor VTM. Metode lain yang biasa digunakan untuk mengendalikan kecepatan motor DC adalah dengan teknik modulasi lebar pulsa atau Pulse Width Modulation (PWM).

Teori H-Bridge MOSFET:

H-bridge adalah sebuah perangkat keras berupa rangkaian yang berfungsi untuk menggerakkan motor.  Rangkaian ini diberi nama H-bridge karena bentuk rangkaiannya yang menyerupai huruf H seperti pada Gambar berikut.

Konfigurasi H-Bridge MOSFET

Rangkaian ini terdiri dari dua buah MOSFET kanal P dan dua buah MOSFET kanal N. Prinsip kerja rangkaian ini adalah dengan mengatur mati-hidupnya ke empat MOSFET tersebut. Huruf M pada gambar adalah motor DC yang akan dikendalikan.  Bagian atas rangkaian akan dihubungkan dengan sumber daya kutub positif, sedangkan bagian bawah rangkaian akan dihubungkan dengan sumber daya kutub negatif. Pada saat MOSFET A dan MOSFET D on sedangkan MOSFET B dan MOSFET C off, maka sisi kiri dari gambar motor akan terhubung dengan kutub positif dari catu daya, sedangkan sisi sebelah kanan motor akan terhubung dengan kutub negatif dari catu daya sehingga motor akan bergerak searah jarum jam dijelaskan pada Gambar berikut.

H-bridgekonfigurasi MOSFET A&D on, B&C off

 Sebaliknya,  jika MOSFET B dan MOSFET C on sedangkan MOSFET A dan MOSFET D off, maka sisi kanan motor akan terhubung dengan kutub positif dari catu daya sedangkan sisi kiri motor akan terhubung dengan kutub negatif dari catu daya. Maka motor akan bergerak berlawanan arah jarum jam dijelaskan pada Gambar berikut.

H-bridgekonfigurasi MOSFET A&D off, B&C on

Konfigurasi lainnya adalah apabila  MOSFET A dan MOSFET B sedangkan MOSFET C dan MOSFET D off. Konfigurasi ini akan menyebabkan sisi kiri dan kanan motor terhubung pada kutub yang sama yaitu kutub positif sehingga tidak ada perbedaan tegangan diantara dua buah polaritas motor, sehingga motor akan diam. Konfigurasi seperti ini disebut dengan konfigurasi break. Begitu pula jika MOSFET C dan MOSFET D saklar on, sedangkan MOSFET A dan MOSFET C off, kedua polaritas motor akan terhubung pada kutub negatif dari catu daya.Maka tidak ada perbedaan tegangan pada kedua polaritas motor, dan motor akan diam. Konfigurasi yang harus dihindari adalah pada saat MOSFET A dan MOSFET C on  secara bersamaan atau MOSFET B dan MOSFET D on  secara bersamaan. Pada konfigurasi ini akan terjadi hubungan arus singkat antara kutub positif catu daya dengan kutub negatif catu daya.

Konfigurasi Pengujian H-bridge MOSFET

Nah temen2 udah baca teorinya diataskan… sip semoga temen2 faham ^_^. Oke deh ni dia ane share rangkaian skematic driver motor DC MOSFET yang ane gunakan pada robot ane.

Transistor jenis Mosfet dipilih karena transistor ini terkenal karena kesanggupan dilalui arus  yang relatif besar jika  dibandingkan dengan transistor lain, serta memiliki daya disipasi yang kecil. Sehingga Transistor ini dapat menghemat pemakaian daya. Sisi masukan  tegangan  rendah dengan sisi tegangan motor dipisahkan dengan optocoupler. Ground untuk tegangan motor dan tegangan rendah juga dipisahkan. Hal ini dimaksudkan untuk memproteksi pengendali dari arus besar  yang mungkin terjadi apabila ada komponen pada tegangan besar yang mengalami kerusakan.

Nah temen2 bisa menggunakan optocoupler dari sharp tipe PC817 datasheetnya dapat didownload disini atau menggunakan optocouler ISP521 datasheetnya dapat di download disini.

IRF530

datasheet IRF540 (mosfet tipe N, current 22 A) disini.

IRF640

datasheet IRF740 (mosfet tipe N, current 10 A) disini.

datasheet IRF9530 (mosfet tipe P, current 12 A) disini.

datasheet IRF9540 (mosfet tipe P, current 19 A) disini.

IRF9640

Dan ini dia hasil rancangan board nya (bukan ane yg buat jadi gak bisa ane share hasil rancangan board nya di sini maaf ya ^_^)

Semoga bermanfaat buat temen2 dan dapat dijadikan referensi. Salam Robotika ^_^

Akses Motor Servo dengan Pemrograman BASCOM AVR

Nah pada postingan kali ini ane mau ngeshare nih buat temen2 yg mungkin saat ini pengen tahu tentang apa itu motor servo dan bagaimana pemrogramannya… ni ane jelasin sedikit yg ane tahu ya… 😀

Nah dipasaran itu terdapat dua jenis tipe motor servo yaitu servo standard dan servo rotation (continuous). Dimana biasanya untuk tipe standar hanya dapat melakukan pergerakan sebesar 180° sedangkan untuk tipe continuous dapat melakukan rotasi atau 360°. Contoh gambar di bawah ini adalah Servo dari Hitech dan dalemannya (hush saru c*k… hehehe ^_^)

Nah didalam motor servo tersebut terdapat motor DC, komposisi gearbox dan rangkaian kontrolernya.  Rangkaian kontrol pada motor servo digunakan untuk mengendalikan motor DC yang ada pada motor servo tersebut, oleh sebab itu untuk mengendalikan motor servo cukup hanya dengan cara memberikan pulsa-pulsa tertentu kepada rangakain kontrolernya. Nah kalo Gearbox pada motor servo berfungsi untuk meningkatkan torsi. Dikarenakan bentuknya yang compact motor servo sering  digunakan di dunia robotika, aeromodeling, car remote controler dsb.


hmmm cuma segitu teori yg ane tahu… langsung deh selanjutnya ane jelasin tentang pin pada motor servo yaitu mempunyai 3 buah pin yang terdiri dari VCC, GND dan SIGNAL/KONTROL. Berikut adalah konfigurasi pin motor servo berdasarkan merk.

Hehehe sama aja ya… Cuma beda warna doank… buat yg suka warna putih beli aja futaba begitu juga buat yg suka ma warna kuning beli ja hitec (ngaco…. :D)

Nah selanjutnya yang temen2 harus fahami lebih jauh lagi ato yg paling penting adalah mengetahui timing penggunaan servo tersebut (biasanya dijelasin di datasheetnya). Secara umum untuk mengakses motor servo tipe standard adalah dengan cara memberikan pulsa high selama 1,5 ms dan mengulangnya setiap 20 ms, maka posisi servo akan berada ditengah atau netral (0°). Untuk pulsa 1 ms maka akan bergerak berkebalikan arah jarum jam dengan sudut -90°.  Dan pulsa high selama 2 ms akan bergerak searah jarum jam sebesar 90°. Untuk lebih jelasnya perhatikan gambar berikut ini.

Untuk servo tipe continuous berbeda timing pengontrolannya… ya gitu deh teori timingnya hehehee 😀 Karakteristik lamanya pulsa high yang diberikan  untuk mengatur motor servo tergantung dari merk servo yang kita gunakan dengan mengacu kepada datasheet. So jangan terpaku pada teori timming diatas. Itu cuma buat pemahaman saja temen2… untuk lebih akurat dan presisinya temen dapat melakukannya secara ekperiment berlandaskan teori tersebut dan melihat spesifikasi servo temen2 pada datasheetnya. Good luck selamat berekperiment ^_^

Capek ya… baca tulisan diatas heheee maaf ya ane gak to do point alias muter2 dulu ke teorinya… maksud ane supaya temen2 dapat lebih faham tentang apa itu motor servo. Oke deh selanjutnya kita coba untuk memprogram motor servo dengan BASCOM AVR (hush ini bukan temen nya ember bukan juga bakso complit wkwkwkwk :D) oiya untuk ekperiment servo kali ini ane di bantu software PROTEUS so gak perlu punya servo dulu buat mrogramnya cukup maen simulasi aja dan baru dari hasil simulasi ini ane terapkan ke REAL WORLD 😀 nah ni dia susunan komponenya pada PROTEUS:

Kalo di running hasilnya kayak gini temen2:

Nah yg ane lingkaran merah itu adalah kondisi netral dari servo… di simulasi aja susah untuk presisi pada sudut 0 derajat ada error sebesar +3 derajat (ya masih kecil sih dan biasa ditolerir ^_^), nah ni dia potongan program untuk posisi netral.

Pada pemrograman servo menggunakan BASCOM AVR terlebih dahulu temen2 konfigurasi jumlah servo yang temen2 ingin gunakan dan status dari port servo temen2 diset sebagai output, contohnya temen2 gunakan 3 servo (maksimum yg dapat digunakan adalah 16 servo). Nah kalo untuk reload penjelasanya adalah “The reload value specifies the interval of the timer in uS” sebagai contoh reload temen set pada nilai 10 itu artinya “servos with 10 uS resolution(steps)”. Nah yang terpenting terakhir temen2 jangan lupa untuk mengaktifkan interrupt timernya cukup dengan menuliskan “Enable Interrupts

Berikut ini contoh program dengan kondisi:

  1. Servo 1 berputar ke kiri dengan sudut -90 derajat
  2. Servo 2 berputar ke kanan dengan sudut +90 derajat
  3. Servo 3 meneng ae hehehehehee ^_^

Dan ni dia potongan programmnya :

Hasil simulasi proteus :

Nah untuk ekperiment temen2 semua nih… coba deh lakukan perubahan nilai pada reload dan nilai pada step nya lalu amati apa yg terjadi… nanti temen2 akan memahaminya. Selamat mencoba ^_^

Akses LCD Graphic dengan Pemrograman BASCOM AVR

Jika pada postingan sebelumnya ane sharing tentang bagaimana menuliskan dan mendesain karakter LCD Text pada BASCOM AVR, nah kali ini ane mencoba memprogram LCD Graphic dengan BASCOM AVR. Dan ternyata mudah sekali…. hehehehee 😀 untuk temen2 yang familiar dengan codevision ni ane kasih link ke blog sahabat ane, monggo…

Sebelum dimulai tutorialnya… sedikit ane jelasin mengenai apa itu LCD Graphic dan apa bedanya dengan LCD text yang biasa temen2 gunakan saat ini. Secara umum, cara akses dan mengkonfigurasinya ga jauh beda dengan LCD Text yang sering temen2 gunakan. Bedanya, kalo di LCD Teks koordinat yang temen2 tulis untuk menuliskan data atau teks adalah koordinat baris dan kolom, sedangkan pada LCD Grafik adalah koordinat pixel nya tapi tetep biasa juga dengan koordinat kolom dan baris. Selain itu temen2 juga memiliki kebebasan bereksperimen jika temen2 menggunakan LCD Graphic. Nah ni dia beberapa contoh yg dapat temen2 aplikasikan pada LCD Graphic.

Untuk mengaplikasikan suatu gambar pada LCD Graphic dengan BASCOM AVR adalah dengan cara mengkonvert suatu gambar ke format *.bgf (Bascom Graphical File) yang sebelumnya berasal dari file gambar yg berekstensi *.bmp menggunakan “Graphic Converter” (Tools => Graphic Converter)

Berikut ini ane akan mengaplikasikan dua buah gambar (*.bmp) ke LCD Graphic dengan BASCOM AVR:

  • Pertama temen2 buka Graphic Converter… lalu temen2 lakukan proses pekonversian dari file gambar yg berekstensi *.bmp menjadi *.bgf.

  • Temen2 pilih jenis LCD graphic yang akan temen2 gunakan… disini ane menggunakan LCD Graphic type 128*128
  • Selanjutnya temen “Save” Agar temen2 mendapatkan file Gambar yg berektensi *bgf
  • Nah temen2 harus menyimpan file *.bgf dalam satu folder yang sama dengan program utamanya, jika tidak akah terjadi kesalahan dan program tidak dapat dicompile oleh BASCOM AVR
  • Nah berikut ini hasil simulasinya dengan PROTEUS…

Dan berikut ini listing programmnya… semoga bermanfaat ^_^

$regfile = “m8535.dat”

$crystal = 12000000

Config Graphlcd = 128 * 128 , Dataport = Porta , Controlport = Portc , Cd = 0 , Rd = 1 , Wr = 2 , Ce = 3 , Reset = 4 , Fs = 5 , Mode = 8

Cursor Off

Do

Cls

Showpic 0 , 0 , Its

Waitms 500

Cls

Showpic 0 , 0 , Elektro

Waitms 500

Loop

End

Its:

$bgf “its.bgf”

Elektro:

$bgf “elektro_its.bgf”

Semoga informasi ini bermanfaat :)

Tutorial Software Downloader Firmware Mikrokontroler (Khazama AVR Programmer)

Jika pada postingan sebelumnya ane menjelaskan tentang bagaimana cara menggunakan PonyProg2000 maka kesempatan ini ane akan sedikit ngeshare bagaimana cara dan troubleshooting menggunakan downloader Khazama. Sedikit info tentang ni software, dibuat oleh programmer dari negeri Iran, seorang muslim tentunya (sedikit bangga…hehe :D). Nah langsung saja deh temen2 sekalian berkunjung kesitus resminya dan download programnya  di http://khazama.com/project/programmer. Nah bagi yg belum ngerancang hardwarenya, silakan mencoba rangkaian USBasp yang telah ane design di sini.

Setelah temen2 semua memiliki software dan hardwarenya berikut ini langkah penggunaan dan troubleshooting-nya:

  1. Pertama temen2 install dulu drivernya… tinggal cek di device manager PC ato laptop temen2.
  2. Kedua Instal software Khazamanya… tinggal Next…Finish dan Yes :D.
  3. Jalankan software Khazama AVR Programmer, berikut tampilannya:Pada menu “ AVR : “ Pilih tipe mikrokontroler yang digunakan, misalkan ATMEGA32.
  4. Untuk mendownload program yang telah di compile ( file dalam bentuk    *.hex) berikut langkahnya:
  • Klik Menu File kemudian pilih “ load FLASH file to Buffer “ atau tinggal klik icon seperti gambar berikut:

  • Cari file *.hex hasil compile di folder dimana program tersebut disimpan, kemudian pilih open.

Maka tampilan jendela khazama akan menjadi:Langkah selanjutnya tinggal meng-klik tombol “ Auto Program “ maka proses downloading akan berlangsung.

  • Kemudian akan muncul jendela seperti berikut, yang menandakan proses downloading telah selesai dan berhasil ^_^

Berikut beberapa kejadian error saat penggunaan khazama dan troubleshootingnya.

Error diatas, terjadi jika Khazama downloader belum ditancapkan pada computer PC ato laptop anda.

Error diatas, terjadi jika Khazama downloader belum di sambungkan dengan sistem minimum mikrokontroler yang akan diprogram, solusinya adalah dengan menghubungkan keduanya. Ato dapat juga terjadi saat sistem minimum mikrokontroler dengan Khazama downloader telah terhubung, namun mikrokontroler yang digunakan adalah mikrokontroler baru (baru dari pabrikan) yang belum di konfigurasi fuse bit-nya. Maka solusinya adalah mengatur fuse bitnya terlebih dahulu. Langkah tersebut dapat temen2 kunjungi di postingan https://fahmizaleeits.wordpress.com/2011/02/26/security-and-configuration-bits-pada-mikrokontroler-avr/

Semoga informasi ini bermanfaat :)