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.
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.
- S.M.A.R.T.1 - Institut Sains & Teknologi AKRPIND Yogyakarta – Beroda
 - RADJA - Institut Teknologi Bandung – Beroda
 - Fathonah - Politeknik Elektronika Negeri Surabaya – Beroda
 - Kan_@yakan21 - Politeknik Manufaktur Bandung – Beroda
 - EVO 113 - Politeknik Negeri Bandung – Beroda
 - FIRE MOUSE - Universitas Bina Nusantara Jakarta – Beroda
 - F R E E - Universitas Gajah Mada Yogyakarta – Beroda
 - Zomblow - Universitas Indonesia Jakarta – Beroda
 - F2R-UMJ - Universitas Muhammadyah Jember – Beroda
 - EZI Universitas Negeri Jember – Beroda
 - LOTUS TEAM - Universitas Negeri Malang –Beroda
 - Smart Visy - Universitas Surabaya - Beroda
 - Arachid - Universitas Surabaya – Berkaki
 - IR-HEX - Institut Teknologi Sepuluh Nopember Surabaya – Berkaki
 
Pada KRCI ini kategori beroda dimenangkan oleh Evo 113 dan berkaki oleh Arachnid.
Arachnid dari Universitas Surabaya, Juara 1 KRCI 2004 Divisi Senior Berkaki
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 :
- Gunakan mikrokontroler yang memiliki      fitur yang memuaskan dengan kemampuan memory yang      besar, mikro seperti ATMega8535, BasicMicro,      dan OOPIC dapat dicoba. 
 - Gunakan      Sensor yang berkualitas dengan      jumlah yang memadai, semakin banyak sensor dengan algoritma yang bagus semakin baik. 
 - Gunakan      sensor penting lainnya      seperti UVTRON, TPA81 Thermal array, sharp      GP2D02 dll. 
 - Gunakan motor      dc atau servo motor kecepatan      tinggi dan daya yang besar seperti Hitech, minimal      servo continuous parallax, atau mini servo MX35.      
 - 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 
JIKA 
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,1000 ‘arah 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.
Membuat Robot Explorer Hexapod
                (Artikel lengkap baca pada majalah Elkom ed 4)
                                                                               
                                                                                 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 (
Blok Rangkaian
Robot ini bergerak berdasarkan informasi dari ketiga sensor jarak.  Robot ini diharapkan dapat melakukan “eksplorasi” ke daerah yang dilaluinya, untuk memberikan informasi ke “pemiliknya” menggunakan 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
Bahan –bahan 
Berikut ini ialah bahan – bahan 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_ultrasonic ‘panggil 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
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:
4.       Delta Hexapod robot 
5. Situs-situs dan buku pendukung lainnya.



Tidak ada komentar:
Posting Komentar