PENGENALAN ROBOT
Robot menurut kamus bahasa, berasal dari kata robota yang artinya
pekerja. Sehingga robot dapat didefinisikan sebagai sebuah alat mekanik
yang dapat bekerja secara terus menerus untuk membantu pekerjaan
manusia, yang dalam menjalankan tugasnya dapat dikontrol langsung oleh
manusia ataupun bekerja secara otomatis sesuai program yang telah
ditanamkan pada chip kontroler robot.
Kecerdasan Buatan
Mungkinkah robot akan dapat berfikir dan dapat berinteraksi dengan
manusia. Wahhh,,,itu sudah terjadi, meski masih sangat sederhana.
KISMET adalah robot social pertama yang dapat berinteraksi dengan
manusia. KISMET adalah robot buatan Dr. Cynthia Breazeal yang
merupakan salah satu ilmuwan robot wanita di Dunia. Beliau bekerja di
lab kecerdasan buatan MIT (ITB-nya Amrik).
Secara umum robot terdiri dari tiga bagian utama yaitu mekanik,
elektronik, dan pemrograman/kontrol.
Pada pembahasan kali ini, kita akan membuat sebuah robot remot
kontrol sederhana yang sangat mudah untuk dibuat.
Simulasi Proteus
Berikut adalah sebuah desain sederhana dari robot kontrol analog.
(Untuk simulasinya dapat di lihat pada CD lampiran)
Desain Aktual
Untuk membuat desain actual robot, dalam buku ini dibuat
menggunakan software Fritzing.
(a)
(b)
(c)
Gambar 4. Robot mobil kontrol analog
PENGENALAN ELEKTRONIKA
DIGITAL: BERMAIN
DENGAN LED
Berbagai jenis aplikasi teknologi yang ada saat ini, sebagian besar
merupakan produk teknologi digital. Begitupula dengan bidang robotika,
sebagian besar merupakan pengembangan teknologi digital yang
dikombinasikan dengan kecerdasan buatan (soft computing).
PENGENALAN PROGRAM CODE VISION AVR
CodeVisionAVR merupakan salah satu software untuk menmprogram
mikrokontroler yang berfungsi sebagai text editor dalam menulis baris
perintah sekaligus sebagai compiler yang dapat mengubah file sumber
9
menjadi file hexa. Software CodeVision AVR versi demo dapat di unduh
dari http://www.hpinfotech.ro/html/cvavr.htm.
CodeVisionAVR menyediakan berbagai fasilitas yang memudahkan
pengguna. Salah satunya adalah CodeWizardAVR yang memberikan
kemudahan dalam melakukan konfigurasi fungsi-fungsi pin dan fitur
yang yang ingin digunakan. Selain itu juga CodeVisionAVR menyediakan
toolbar yang memudahkan pengguna untuk melakukan berbagai interaksi
yang diinginkan.
Berikut adalah metode penulisan program pada CV AVR:
#include <mega16.h>
//deklarasi variabel global dapat dituliskan disini.
void main(void)
{
//deklarasi variabel local dapat dituliskan disini.
}
}
10
8. Setelah itu, isikan nama file yang ingin digunakan dengan mengisi
kotak dialog berikut
12
10.
Kemudian lengkapi program sesuai project yang dibuat,
dalam eksperimen membuat rangkaian blinking LED kita dapat
menambahkan kode program pada Preprocessor (#), inisialisasi
pada bagian void main(void), serta program utama dalam while(1).
Berikut adalah contoh tambahan kode program untuk membuat
rangkaian blinking LED.
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
13
11. Setelah semua kode program ditulis dengan benar. Tekan tombol
F9 untuk compile, maka akan muncul kotak informasi ada tidaknya
error. Jika sudah tidak ada error klik OK.
14
12.
Program siap di upload pada hardware mikrokontroler untuk
menghidupkan sistem yang telah dibuat.
Simulasi Proteus Program Blinking LED
15
2. Cari program file, berupa file Exe, dari program yang telah dibuat,
dalam proyek ini, file bernama running_led.hex. Kemudian klik OK.
16
Membuat Program
Untuk langkah 1-8, prosedurnya sama dengan proyek digital 1.
9. Isikan nama tiga file: tombol_led.c, tombol_led.cwp, tombol_led.prj.
10. Isikan program berikut:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Menghidupkan LED dengan tombol
Version : I
17
Date : 11/17/2012
Author : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School
Comments: "SEMANGAT!!!"
Chip type
: ATmega16
Program type
: Application
AVR Core Clock frequency: 12.000000 MHz
Memory model
: Small
External RAM size
:0
Data Stack size
: 256
*****************************************************/
#include <mega16.h>
void main(void)
{
// Mendefinisikan input tombol
DDRB.0=0;
DDRB.1=0;
//Mendefinisikan output LED
DDRD.1=1;
DDRD.2=1;
DDRD.3=1;
DDRD.4=1;
//kondisi awal PORT
PORTD.1=1; //semua led mati
PORTD.2=1;
PORTD.3=1;
PORTD.4=1;
while (1)
{
if (PINB.0==0)
{
PORTD.1=0; //led biru nyala
PORTD.2=0; //led biru nyala
PORTD.3=1; //led kuning mati
PORTD.4=1; //led kuning mati
}
else if (PINB.1==0)
{
PORTD.1=1; //led biru mati
PORTD.2=1; //led biru mati
PORTD.3=0; //led kuning nyala
PORTD.4=0; //led kuning nyala
}
else
{
18
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTD.4=1;
}
}
}
19
Secara umum robot tergolong menjadi dua bagian yaitu robot otomatis dan robot
teleoperated. Robot otomatis dapat bekerja tanpa kontrol langsung oleh manusia, robot
tersebut bekerja berdasarkan program yang ditanamkan seperti robot line follower,
robot avoider obstacle, robot humanoid, lampu lalu lintas, pintu otomatis, dan
sebagainya. Sedangkan robot teleoperated harus dikontrol langsung oleh manusia,
seperti robot kontrol, televisi, komputer dan lainnya.
20
Pada eksperimen dalam bab ini, kita akan membuat robot digital
teleoperated sederhana yang dapat dikontrol untuk bergerak maju,
mundur, belok kiri, belok kanan, serta berputar.
Untuk robot kontrol dalam eksperimen didalam bab ini masih
menggunakan kontrol berbasis kabel.
21
Sesuai desain pada tombol gerak kiri dihubungkan dengan PIN D.0,
tombol gerak kanan dihubungkan dengan PIN D.1, tombol gerak maju
dihubungkan dengan PIN D.2, serta gerak mundur dihubungkan dengan
PIN D.3. Motor kiri diatur oleh PORTD.5 dan PORTD.6, sedangkan
motor kanan diatur oleh PORTD.7 dan PORTB.0. Logika yang dibuat
22
Tombol
D.5
D.6
D.7
B.0
Push-Button
Maju
D.2 = 0
Belok Kiri
D.0 = 0
Belok Kanan
D.1 = 0
Mundur
D.3 = 0
23
: ATmega8
Program type
: Application
: Small
:0
: 256
*****************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
24
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
25
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
26
// TWI disabled
TWCR=0x00;
DDRD.0=0; // mendefinisikan sebagai input dari tombol gerak ke kiri
DDRD.1=0; // mendefinisikan sebagai input dari tombol gerak ke kanan
DDRD.2=0; // mendefinisikan sebagai input dari tombol gerak maju
DDRD.3=0; // mendefinisikan sebagai input dari tombol gerak mundur
DDRD.5=1; // mendefinisikan sebagai ouput motor kiri
DDRD.6=1; // mendefinisikan sebagai ouput motor kiri
DDRD.7=1; // mendefinisikan sebagai ouput motor kanan
DDRB.0=1; // mendefinisikan sebagai ouput motor kanan
PORTD.0=1; // kondisi awal
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTD.5=1;
PORTD.6=1;
PORTD.7=1;
PORTB.0=1;
OCR1A=200; // pengatur kecepatan motor menggunakan PWM untuk motor kiri
OCR1B=200; // pengatur kecepatan motor menggunakan PWM untuk motor kanan
while (1)
{
if (PIND.0==0) //robot gerak ke kiri
{
PORTD.5=1;
PORTD.6=0;
PORTD.7=0;
PORTB.0=0;
}
else if (PIND.1==0)
{
PORTD.5=0;
PORTD.6=0;
27
PORTD.7=1;
PORTB.0=0;
}
else if (PIND.2==0)
{
PORTD.5=1;
PORTD.6=0;
PORTD.7=1;
PORTB.0=0;
}
else if (PIND.3==0)
{
PORTD.5=0;
PORTD.6=1;
PORTD.7=0;
PORTB.0=1;
}
else
//robot diam
{
PORTD.5=0;
PORTD.6=0;
PORTD.7=0;
PORTB.0=0;
}
}
}
28
ini, dia memiliki sensor garis yang berfungsi seperti mata pada
manusia. Sensor garis ini mendeteksi adanya garis atau tidak pada
permukaan lintasan robot tersebut, dan informasi yang diterima sensor
garis kemudian diteruskan ke prosesor untuk diolah sedemikian rupa
dan akhirnya hasil informasi hasil olahannya akan diteruskan ke
penggerak atau motor agar motor dapat menyesuaikan gerak tubuh
robot sesuai garis yang dideteksinya.
dulu
kita
diagram
blok
sistem
yang
bangun,
dengan
demikian
menjadi
mudah
mengerjakannya.
Blok
akan
akan
perlu
kita
30
Pada skema lengkap robot line follower didesain dengan posisi sensor di
atas permukaan putih. Dua buah sistem sensor di pasang pada pin B.0
dan B.1, sedangkan sistem actuator motor DC dipasang pada Port D.0
dan D.1 untuk motor kiri, D.2 dan D.3 untuk motor kanan. Prinsip kerja
robot line follower berikut adalah saat sistem sensor berada di atas
permukaan putih, akan ada pantulan cahaya dari LED yang akan
mengenai sensor cahaya LDR sehingga resistansi sensor LDR berkurang
sehingga arus bergerak melalui LDR. Kondisi tersebut menyebabkan
arus output sensor menuju IC komparator LM 393 menjadi minimum,
oleh IC LM 393, arus di non-inverting sehingga output menuju pin
mikrokontroler menjadi LOW (0). Sebaliknya, saat sistem sensor
berada di atas garis hitam, tidak akan ada pantulan cahaya dari LED
yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR
sangat besar sehingga arus tidak akan melalui LDR. Kondisi tersebut
menyebabkan arus output sensor menuju IC komparator LM 393
menjadi maksimum, oleh IC LM 393, arus di non-inverting sehingga
output
menuju
pin
mikrokontroler
menjadi
HIGH
(1).
Oleh
31
B.0 = 0
B.0 =1
B.1 = 0
Maju
Belok Kiri
B.1 = 1
Belok Kanan
Mati
Tabel 2. Kondisi Gerak Motor dan Kondisi Logika Tiap Pin Motor
Kondisi
D.0
D.1
D.2
D.3
Maju
Belok Kiri
Belok Kanan
Mati
32
33
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Chip type
: ATmega16
Program type
: Application
: Small
:0
: 256
*****************************************************/
#include <mega16.h>
# include <delay.h> //tambahan program untuk membuat waktu tunda
void main(void)
34
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x30;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
35
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
36
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
37
38
PORTD.0=0;
PORTD.1=0;
PORTD.2=0;
PORTD.3=1;
lcd_clear ();
lcd_gotoxy(0,0);
lcd_putsf("B0=1 B1=0");
lcd_gotoxy(0,1);
lcd_putsf("BELOK KIRI");
delay_ms(100);
}
else if (PINB.0==0 & PINB.1==1)
//
kanan
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=0;
PORTD.3=0;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("B0=0 B1=1");
lcd_gotoxy(0,1);
lcd_putsf("BELOK KANAN");
delay_ms(100);
}
else if (PINB.0==1 & PINB.1==1) // Tambahan kode sensor kiri hitam, kanan hitam, maka mati
{
PORTD.0=0;
PORTD.1=0;
PORTD.2=0;
PORTD.3=0;
lcd_clear ();
lcd_gotoxy(0,0);
lcd_putsf("B0=1 B1=1");
39
lcd_gotoxy(0,1);
lcd_putsf("MATI");
delay_ms(100);
}
else
// Tambahan kode sensor kiri putih, kanan putih, maka bergerak maju
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("B0=0 B1=0");
lcd_gotoxy(0,1);
lcd_putsf("MAJU");
delay_ms(100);
}
}
}
SELAMAT MENCOBA
MARI BERJUANG BERSAMA BOLABOT
40