Horas.....horas....horas.......!!.... terima kasih atas kunjungannya salam kenal dan kompak selalu..


Rabu, 06 Mei 2009

Membuat Robot


Sesuai dengan tulisan pertama, disini saya akan membahas tentang Robot Cerdas Pemadam Api terkhusus yang sesuai spesifikasi KRCI.

Apa itu KRCI?

KRCI kepanjangan dari Kontes Robot Cerdas Indonesia. Kontes ini mulai diselenggarakan pada tahun 2004 bersamaan dengan pelaksanaan Kontes Robot Indonesia (KRI).

Kontes ini awalnya diusulkan oleh dosen ITB untuk mengimbangi KRI yang selalu didominasi oleh PENS-ITS dan Politeknik. Ternyata pada prakteknya KRCI tetap didominasi oleh Politeknik.

KRCI mengadopsi peraturan dari kontes robot pemadam api di Connecticut, Amerika. Dalam kontes ini sebuah robot berukuran maksimal 31 x 31 x 31 cm harus bisa memadamkan api lilin yang ditempatkan acak pada sebuah miniatur rumah dan kembali ke base (tempat start). Yang dinilai disini adalah kecepatan robot dalam menyelesaikan tugasnya.

image0022.jpg

Sebuah robot bersiap-siap didalam arena pertandingan

KRCI ini dibagi menjadi 2 divisi utama: senior dan expert. Senior dibagi lagi menjadi 2 beroda dan berkaki, adapun expert juga dibagi menjadi 2 single dan swarm. Divisi expert sendiri baru dimulai sejak tahun 2005 dan swarm baru dimulai pada tahun 2007. Tahun 2004 KRCI diselenggarakan di Balairung UI Depok diikuti oleh 14 peserta, 12 beroda dan 2 berkaki.

  1. S.M.A.R.T.1 - Institut Sains & Teknologi AKRPIND Yogyakarta – Beroda
  2. RADJA - Institut Teknologi Bandung – Beroda
  3. Fathonah - Politeknik Elektronika Negeri Surabaya – Beroda
  4. Kan_@yakan21 - Politeknik Manufaktur Bandung – Beroda
  5. EVO 113 - Politeknik Negeri Bandung – Beroda
  6. FIRE MOUSE - Universitas Bina Nusantara Jakarta – Beroda
  7. F R E E - Universitas Gajah Mada Yogyakarta – Beroda
  8. Zomblow - Universitas Indonesia Jakarta – Beroda
  9. F2R-UMJ - Universitas Muhammadyah Jember – Beroda
  10. EZI Universitas Negeri Jember – Beroda
  11. LOTUS TEAM - Universitas Negeri Malang –Beroda
  12. Smart Visy - Universitas Surabaya - Beroda
  13. Arachid - Universitas Surabaya – Berkaki
  14. IR-HEX - Institut Teknologi Sepuluh Nopember Surabaya – Berkaki

Pada KRCI ini kategori beroda dimenangkan oleh Evo 113 dan berkaki oleh Arachnid.

image006.jpg

Arachnid dari Universitas Surabaya, Juara 1 KRCI 2004 Divisi Senior Berkaki

image0041.jpg

Evo 113 dari Polban, Juara 1 KRCI 2004 Divisi Senior Beroda

Pada KRCI kali ini hanya Evo 113 yang berhasil dengan sempurna menyelesaikan tuugasnya dengan waktu yang relatif cepat dan bisa kembali ke tempat start.

Ada cerita menarik dibalik sukses Evo 113.

Langkah Evo 113 menjadi jawara KRCI tidak mulus, setidaknya ada 2 kendala serius yang dialami oleh Robot ini. Pertama adalah rusaknya sensor api yang dimiliki oleh Evo 113 sehingga harus melibatkan istri dari sang dosen pembimbing untuk mengantar spare part dari Bandung ke Jakarta pada jam 11.00 malam. Kedua adalah rusaknya microcontroller robot sehingga harus mengorbankan robot otomatis tim KRI Polban (dan itu adalah robot punya saya, hiks hiks hiks).

Contoh Program Sederhana Robot Pemadam Api (KRCI) dengan BS2 dan OOPIC

Dibuat oleh Mr. Widodo

HP:08569887384

Helo, jika Anda ingin membuat robot cerdas, bahkan ingin mencoba untuk mengikuti KRCI, maka ada beberapa masukan dari saya, antara lain :

  1. Gunakan mikrokontroler yang memiliki fitur yang memuaskan dengan kemampuan memory yang besar, mikro seperti ATMega8535, BasicMicro, dan OOPIC dapat dicoba.
  2. Gunakan Sensor yang berkualitas dengan jumlah yang memadai, semakin banyak sensor dengan algoritma yang bagus semakin baik.
  3. Gunakan sensor penting lainnya seperti UVTRON, TPA81 Thermal array, sharp GP2D02 dll.
  4. Gunakan motor dc atau servo motor kecepatan tinggi dan daya yang besar seperti Hitech, minimal servo continuous parallax, atau mini servo MX35.
  5. Software yang paling enak untuk belajar dari dasar dan gak ruwet, cobalah basic stamp, kalau ingin bahasa assembly, kuasai dulu pemrograman assembly dasar.

Berikut dasar pseudocode konsep membuat robot cerdas

MULAI

INISIALISASI VARIABLE

PANGGIL FUNGSI BACASENSORSHARP
PANGGIL FUNGSI BACAULTRASONIC

PANGGIL FUNGSI BACASENSORAPI

PANGGIL FUNGI SERVOMAJU

BACA SENSOR LAGI

JIKA ADA PENGHALANG DI KIRI BELOK KANAN

JIKA ADA PENGHALAN DI KANAN BELOK KIRI

JIKA NILAI AMBANG API TERCAPAI, BERHENTI

HIDUPKAN KIPAS PEMADAM

DST

Anda dapat bersilahturahmi ke Mr. Widodo untuk melihat contoh robot GATOT KACA yang akan diikutsertakan di KRCI.

KRCI.BS2

'{$STAMP BS2p}

'{$PBASIC 2.5}

' Robot Pemadam Api

'

ping PIN 7

#SELECT $stamp

#CASE BS2,BS2E

trigger CON 5

scale CON $200

#CASE BS2SX, BS2P, BS2PX

trigger CON 13

scale CON $0cd

#ENDSELECT

rawtoin CON 889

rawtocm CON 2257

isHigh CON 1

isLow CON 0

rawDist VAR Word

inches VAR Word

cm VAR Word

val01 VAR Byte ' sensor sebelah kanan

val02 VAR Byte ' sensor sebelah kiri

i VAR Byte ' count variable for loop

'--------------------------------------------------------

' deklarasi konstanta

cl CON 14 ' pin 14 is output (clock) pada sensor Sharp GP2D02 sebelah kanan

dt CON 15 ' pin 15 is the input (data)

c2 CON 12 ' pin 12 is output (clock) pada sensor Sharp GP2D02 sebelah kiri

dt2 CON 13 'pin 13 is the input

'--------------------------------------------------------

' I/O pin setup for detector

INPUT dt ' make pin 15 the input

INPUT dt2

HIGH cl ' make pin 14 output and high

HIGH c2

wDist VAR Word

wDistkanan VAR Word

wDistkiri VAR Word

'sensor srf04 sebelah kanan

INITSRFKANAN CON 10

ECHOSRFKANAN CON 11

'sensor srf04 sebelah kiri

INITSRFKIRI CON 6

ECHOSRFKIRI CON 8

'sensor srf04 belakang robot

INIT CON 4

ECHO CON 5

' berjalan 1 arah 1 uS

'jarak=(echo time)/ faktor konversi

'gunakan 74 inchi (73.74 uS per inchi)

'gunakan 29 untuk sentimeter ( 29.033 per 1 cm)

convfac CON 74 ' use inches

counter VAR Byte

main:

GOSUB PingDepan

inches=rawDist ** RawToIn

cm=rawDist ** RawToCm

DEBUG CRSRXY, 15, 3,

DEC rawDist, CLREOL,

CRSRXY, 15,4,

DEC inches, CLREOL,

CRSRXY, 15,5,

DEC cm, CLREOL

PAUSE 100

GOSUB sr_sonar ' baca jarak depan

GOSUB sharp ' baca jarak sisi samping

DEBUG "Sensor SRF04 belakang:"

DEBUG DEC wDist, CR

DEBUG "Sensor SRF04 kanan:"

DEBUG DEC wDistKanan, CR

DEBUG "Sensor SRF04 kiri:"

DEBUG DEC wDistKiri, CR

jika di depan gak ada halangan dan cukup jauh >30cm

IF cm >30 AND val01 <145>

'maju terus

FOR counter = 1 TO 30

PULSOUT 0,1000arah putaran servo continuous Parallax

PULSOUT 1,3500

PAUSE 2

NEXT

ENDIF

'jika ada halangan dan sebelah kiri sempit

IF cm<=30 AND val01<140 class="SpellE">wdistKiri < class="SpellE">wdistKanan>8 THEN

'mundur dulu

FOR counter = 1 TO 50

PULSOUT 1,1000

PULSOUT 0,3500

PAUSE 2

NEXT

''belok kanan

FOR counter=1 TO 120

PULSOUT 1,3500

PAUSE 2

NEXT

ELSE

'selain dari itu

'maju dikit

FOR counter = 1 TO 20

PULSOUT 0,1000

PULSOUT 1,3500

PAUSE 2

NEXT

IF cm<=30 AND (wdistKiri < wdistKanan) THEN

'mundur dulu

FOR counter = 1 TO 50

PULSOUT 1,1000

PULSOUT 0,3500

PAUSE 2

NEXT

''belok kanan

FOR counter=1 TO 120

PULSOUT 1,3500

PAUSE 2

NEXT

ELSE

'selain dari itu

'maju dikit

FOR counter = 1 TO 20

PULSOUT 0,1000

PULSOUT 1,3500

PAUSE 2

NEXT

ENDIF

ENDIF

'jika ada halangan dan sebelah kanan sempit

IF cm<=30 AND wDistKiri >8 AND wDistKanan<8>

'mundur dulu

FOR counter = 1 TO 50

PULSOUT 1,1000

PULSOUT 0,3500

PAUSE 10

NEXT

'belok kiri

FOR counter=1 TO 120

PULSOUT 0,1000

PAUSE 10

NEXT

IF cm<=30 AND val02 <140 class="SpellE">wdistKiri > wdistKanan) THEN

'mundur dulu

FOR counter = 1 TO 50

PULSOUT 1,1000

PULSOUT 0,3500

PAUSE 2

NEXT

'belok kiri

FOR counter=1 TO 120

PULSOUT 0,1000

PAUSE 10

NEXT

ELSE

'selain dari itu

'maju dikit

FOR counter = 1 TO 20

PULSOUT 0,1000

PULSOUT 1,3500

PAUSE 2

NEXT

ENDIF

ENDIF

GOTO main

‘sensor ping di pasang di depan robot

PingDepan:

ping =IsLow

PULSOUT ping, trigger

PULSIN ping, isHigh, rawDist

rawDist=rawDist */Scale

rawDist =rawDist/2

RETURN

inches=rawDist ** RawToIn

cm=rawDist ** RawToCm

DEBUG CRSRXY, 15, 3,

DEC rawDist, CLREOL,

CRSRXY, 15,4,

DEC inches, CLREOL,

CRSRXY, 15,5,

DEC cm, CLREOL

PAUSE 100

sensor SRF04

sr_sonar:

PULSOUT INIT,5 ' 10us init pulse

PULSIN ECHO,1,wDist ' measure echo time

wDist=wDist/convfac ' convert to inches

PULSOUT INITSRFKANAN,5

PULSIN ECHOSRFKANAN, 1, WDistkanan

WdistKanan=wDistKanan/convfac

PULSOUT initSRFKIRI,5

PULSIN ECHOSRFKIRI,1 ,wDistKiri

WDistKiri=wDistKiri/convfac

RETURN

sensor SHARP

sharp:

GOSUB read01 ' call measurement routine

GOSUB read02

DEBUG "Sensor 1:"

DEBUG DEC val01, CR ' display the value

DEBUG "Sensor 2:"

DEBUG DEC val02, CR

PAUSE 10

RETURN

read01:

LOW cl ' turn on detector for reading

rl:

IF IN15 = 0 THEN rl ' wait for input high

SHIFTIN dt, cl, MSBPOST, [val01]

HIGH cl ' turn detector off

PAUSE 1 ' let detector reset

RETURN

read02:

LOW c2 ' turn on detector for reading

r2:

IF IN13 = 0 THEN r2 ' wait for input high

SHIFTIN dt2, c2, MSBPOST, [val02]

HIGH c2 ' turn detector off

PAUSE 1 ' let detector reset

RETURN

UVTRON.OSC

'

' UVTron Example for OOPic

'

dim uvOut as new oDio1 ' flame indicator

dim uvIn as new oDio1 ' UVTron input

dim uvPEvent as new oEvent ' UV pulse event

dim uvTEvent as new oEvent ' 1-second timer event

dim uvGate1 as new oGate ' UV event buffer

dim uvGate2 as new oGate ' Timer event buffer

dim uvCt as new oByte ' user pulse ct

dim uvCtx as new oByte ' temporary pulse ct

sub main()

call inituv

uvOut.ioline=17

uvOut.direction=cvOutput

do

if (uvCt >= 4) then

uvOut=1

else

uvOut=0

end if

loop

end sub

'------------------------------------------------------

' Event-Driven UVTron Monitoring routines

' uvCt is number of UVTron pulses per second

' (4 is a good flame threshold for stock UVTron)

'

sub inituv()

uvIn.ioline=8

uvIn.direction=cvInput

uvGate1.input1.link(uvIn)

uvGate1.output.link(uvPEvent.operate)

uvGate1.operate=cvtrue

uvGate2.input1.link(oopic.hz1)

uvGate2.output.link(uvTEvent.operate)

uvGate2.operate=cvtrue

uvCtx=0

uvCt=0

end sub

sub uvPEvent_code()

uvCtx=uvCtx+1

end sub

sub uvTEvent_code()

uvCt=uvCtx

uvCtx=0

end sub

Harga OOPI II+ Starter Package Rp 1.4jt.

Harga Kit Robot diatas 1.25 Jt (kit mikro BS2,2 servo, 1 ping dan body robot) ongkos kirim 30rb.

Membuat Robot Explorer Hexapod

(Artikel lengkap baca pada majalah Elkom ed 4)

widodo1.JPG

Widodo Budiharto

Guest Professor Univ. de Bourgogne, Prancis

Pendahuluan

Pada proyek robot kali ini, penulis memaparkan cara membuat robot berkaki 6 (hexapod) menggunakan 3 buah sensor, yaitu 1 sensor jarak SRF04 (Sonar Range Finder) dan 2 bh Sharp GP2D12. Dijamin dechhh penasaran dan menarik untuk dicoba J.

Blok Rangkaian

Robot ini bergerak berdasarkan informasi dari ketiga sensor jarak. Robot ini diharapkan dapat melakukaneksplorasike daerah yang dilaluinya, untuk memberikan informasi kepemiliknyamenggunakan kamera wireless misalnya, oleh karena itu robot ini dinamakan Explorer Hexapod. Gambar di bawah ini menampilkan blok rangkaian yang akan dibuat:




Gambar 1. Blok rangkaian robot Explorer Hexapod

Bahanbahan

Berikut ini ialah bahanbahan yang diperlukan, yang paling penting tentunya ialah kerangka dari kaki hexapod ini, yang dapat Anda buat sendiri atau membeli kit yang sudah jadi :

1. 2 buah servo motor HS311

2. Body dan kaki hexapod

(Dapat membeli kit kaki hexapod lengkap dengan 2 bh servo HS311)

3. Min. System ATmega 8535, ATmega16 atau Atmega32

4. Driver Motor DC 293D/ deKits SPC DC Motor

5. 1 sensor jarak ultrasonic SRF 04 (jarak 3cm-3m)

6. 2 sensor jarak infrared SharpGP2D12(10cm -80cm)

7. Tempat baterai 9V 2bh

Berikut ini ialah konstruksi dari kaki hexapod standar, yang digerakkan dari putaran motor servo continuous. Servo ini dikendalikan dari port B.0-3 melalui Driver motor yaitu kit DC motor Driver menggunakan IC L293D (dapat menggunakan juga kit dekits SPC DC Motor) atau jika ingin lebih kuat lagi menggunakan IC H bridge L298. Perlu diingat, kaki servo ini ada 3 pin, cukup gunakan 2 kaki yang menggerakan motor DC di dalam servo tersebut saja.




Gambar 2. Susunan sisi kaki hexapod

Servo HS311 merupakan servo dengan torsi yang cukup besar untuk menggerakkan robot dengan beban maksimal 1.5kg.

Cara kerja

Pertama, kita lihat dulu bagian sensor. Sensor SRF04 digunakan untuk mengetahui jarak depan robot, apakah ada penghalang atau tidak, yang mampu mendeteksi jarak dari 3cm hingga 3 meter. Sensor ini bekerja berdasarkan prinsip gelombang ultrasonic. Pencari jarak ini bekerja dengan cara memancarkan pulsa suara dengan kecepatan suara (0.9 ft/milidetik) berfrekwensi 40 KHz. Keluaran sensor ini dihubungkan ke Port C.0 dan Port C.1, dan dengan nilai trigger input sebesar 10 uS pada pulsa TTL. Alasan mengapa digunakan sensor ini, ialah karena sensor jarak ini paling banyak digunakan pada Kontes Robot Cerdas di Indonesia, sehingga pembaca pemula menjadi familiar. Anda dapat menambah sensor ini hingga 4 buah untuk digunakan pada sisi kanan, kiri dan belakang robot biar lebih akurat.

Gambar 3. Susunan kaki SRF04

Sedangkan 2 sensor infrared GP2D12 di sisi samping kanan dan kiri dapat mengukur jarak sejauh 10cm- 80cm dengan output analog, sehingga dapat langsung dihubungkan ke port A.0 dan port A.1 dari mikrokontroler AVR tersebut. Karakteristik dari sensor ini tidak linear, oleh karena itu idealnya perlu digunakan look up table untuk mengolah raw data dari sensor tersebut.

Hasil pembacaan sensor-sensor jarak ini diolah oleh mikrokontroler, untuk memutuskan gerakan yang akan dilakukan apakah maju, mundur atau belok. Dengan memutarnya servo, menyebabkan bagian kaki yang terhubung ke servo bergerak bergantian sehingga robot dapat berjalan.

Explorer.bas:

‘Program Demo Robot Explorer Hexapod

‘By Mr. Widodo Budiharto

‘Univ. de Bourgogne 2007

deklarasi fungsi dan variabel

Declare Sub Initialize_ultrasonic()

Declare Function Ultrasonic_depan() As Integer

Dim Jarakdepan As Integer

Dim Jaraksampingkanan As Word

Dim Jaraksampingkiri As Word

Dim W As Word

Config Portb = Output

Config Portd = Input

Config Portc = Output

Config Adc = Single , Prescaler = Auto , Reference = Avcc 'konfigurasi ADC

Start Adc

Call Initialize_ultrasonicpanggil fungsi

Do

baca SRF04 untuk jarak depan

Print "jarak sampingkiri" ; Jaraksampingkiri

‘Demo jika ada halangan, maka belok kiri

If Jarakdepan > 40 Then

Portb = 8 'maju

Wait 2 ‘delay

Else if jarak depan <40 class="SpellE">jaraksampingkanan >150 then

Portb = 0 'belok kiri

Wait 2

End If

Loop

End

Function Ultrasonic_depan() As Integer

' set initial state pin trigger

' buat pulsa 5us @ 4 MHz

' ukur return pulse

End Function

Sub Initialize_ultrasonic inisialisasi sensor ultrasonik

End Sub

Gambar berikut merupakan hasil yang sudah jadi yang dapat berjalan dengan cukup cepat dan kuat karena menggunakan servo torsi tinggi dari Hitec.

A. B.

Gambar 4. Robot in action a). Tampak samping b). Tampak depan

Pengembangan Selanjutnya

Untuk keperluan riset atau hobi, Anda dapat menambahkan kemampuan Artificial Intelligent menggunakan Fuzzy Logic, Algoritma Genetic atau Neural Network, agar robot ini menjadi robot yang cerdas. Silahkan baca artikel selanjutnya mengenai Neural Network di majalah kesayangan Anda ini.

Daftar Pustaka:

1. www.atmel.com

2. www.acroname.com

3. www.hitec.com

4. Delta Hexapod robot

5. Situs-situs dan buku pendukung lainnya.