Anda di halaman 1dari 40

2012 WORKSHOP ROBOTIKA DASAR I

Mada Sanjaya WS, Ph.D


1
PENGENALAN ROBOT

Rekan-rekan pasti telah mengenal istilah robot??


Robot sering sekali di jadikan tema
utama dalam film-film Hollywood,
Semua mungkin tahu robot
transformer, RoboCOP, wall-E,
DoraEMON, ataupun astroBOY.
Robot menjadi trend, kemungkinan
karena robot adalah perwujudan
dari teknologi futuristic yang
paling canggih.

Gambar 1. Wall-E robot yang bisa jatuh cinta

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.

Perkembangan Dunia Robot

Trend perkembangan dunia robot, tidak hanya ada pada angan-angan


pembuat film Hollywood, Tetapi merupakan hasil nyata dari kerja
panjang para peneliti dan teknokrat yang bergelut di bidang otomasi dan
kecerdasan buatan. Perkembangan dunia robot salah satunya dapat
2
terlihat dari perkembangan robot ASIMO milik Honda yang telah
menghabiskan waktu riset selama 20 tahun.

Gambar 2. Perkembangan ASIMO

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).

3
Gambar 3. Interaksi KISMET dan Dr. Cynthia Breazeal

Saat ini, dunia robotika terus berkembang, bukan hanya robot


humanoid, robot berkembang dalam berbagai kondisi dan kebutuhan
manusia, seperti terlihat pada ilustrasi berikut.

Gambar 4. Bidang-bidang robotika

Secara umum robot terdiri dari tiga bagian utama yaitu mekanik,
elektronik, dan pemrograman/kontrol.

4
ROBOT MOBIL KONTROL
ANALOG
(Remote Control Analog Mobile Robot)

Tentu rekan-rekan sudah tidak asing lagi dengan mobil atau pesawat
remot kontrol, mobil remot kontrol merupakan salah satu jenis robot
teleoperated. Yang dapat di kendalikan arah geraknya. Mobil tersebut
dapat dikendalikan maju, mundur, belok kiri, ataupun belok kanan.

Gambar 1. Satu set mobil remot 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)

5
Gambar 2. Desain dan simulasi robot kontrol analog sederhana

Desain Aktual

Untuk membuat desain actual robot, dalam buku ini dibuat


menggunakan software Fritzing.

6
Gambar 3. Desain aktual robot kontrol analog sederhana

Robot kontrol analog ini dapat dibuat modifikasi dengan berbagai


bentuk dan fungsi, misalnya robot soccer, walking robot kontrol dan
lainnya. Berikut adalah robot beetlebot yang siap untuk di uji coba.

(a) (b)

7
(c)
Gambar 4. Robot mobil kontrol analog

Walking Robot Kontrol Analog 4 Kaki

Dengan sedikit memodifikasi roda menjadi bentuk kaki, maka akan


diperoleh walking robot kontrol analog berikut:

Gambar 5. Robot berkaki empat dengan kontrol analog

Ayo tunjukkan kreativitasmu !!!

8
PENGENALAN ELEKTRONIKA
DIGITAL: BERMAIN
DENGAN LED

Gambar 1. Ilustrasi aplikasi teknologi digital

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.

// kode-kode yang dihasilkan CodeWizard
..

while (1)
{

//program utama dapat dituliskan disini.



}
}

PROYEK DIGITAL 1. MEMBUAT BLINKING LED

Memulai Program

1. Double klik CodeVisionAVR Evaluation V2.05.0 untuk memulai


program

10
2. Membuat new file

3. Kemudian akan muncul dialog, pilih project, klik OK.

4. Kemudian muncul pula dialog confirm, klik Yes.

5. Setelah itu akan muncul dialog CodeWizardAVR, pilih AT90,


ATtiny, ATmega, FPSLIC, klik OK.

6. Maka akan muncul file CodeWizard-untitled.cwp , setelah itu buka


chip, kemudian isikan dengan jenis mikrokontroler yang digunakan,

11
dalam eksperimen ini kita gunakan ATmega16 dengan Clock dari
crystal sebesar 12 MHz.

7. Untuk menyimpan file, pilih program, pilih Generate, Save and


Exit seperti berikut

8. Setelah itu, isikan nama file yang ingin digunakan dengan mengisi
kotak dialog berikut

12
9. File yang tersimpan terdiri dari tiga file, dengan masing-masing
nama ditulis sama, dan klik save. Setelah itu akan tampil
running_led.prj yang merupakan file program project yang siap
untuk diisi logika program. Kemudian isikan Keterangan Project,
Version, Author, Company, Comment sesuai kebutuhan.

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
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Blinking LED


Version : I
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>

#include <delay.h>

void main(void)
{

//mendefinisikan output berupa LED


DDRD=0xFF;

while (1)
{

PORTD=0x00; // LED menyala


delay_ms(1000); // LED menyala selama satu detik
PORTD=0xFF; // LED mati
delay_ms(1000); // LED mati selama satu detik

}
}

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

Gambar 2. Simulasi proteus rangkaian blinking led

15
Cara mengcompile program CV AVR ke Proteus

1. Klik kanan, pada bagian mikrokontroler, kemudian pilih edit


properties

2. Cari program file, berupa file Exe, dari program yang telah dibuat,
dalam proyek ini, file bernama running_led.hex. Kemudian klik OK.

3. Kemudian klik Play untuk memulai simulasi, dan Stop untuk


menghentikan simulasi Proteus.

16
PROYEK DIGITAL 2. MENYALAKAN LED DENGAN TOMBOL

Simulasi Proteus Menghidupkan LED dengan Tombol

Gambar 3. Simulasi Proteus menghidupkan LED dengan tombol

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; //semua led mati
PORTD.2=1;
PORTD.3=1;
PORTD.4=1;
}
}
}

SELAMAT MENCOBA !!! (^v^)

19
ROBOT KONTROL DIGITAL
REMOTE KABEL

Film Real steel !!?, Gambar

disamping menampilkan impian

robot masa depan yang dapat

dikontrol langsung mengikuti

gerak manusia yang menjadi

pengontrolnya.
Gambar 1. Ilustrasi robot kontrol

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.

Tombol Push Button

Push button merupakan


sebuah device untuk menghubungkan dan
memutuskan rangkaian listrik antara 2
titik. Penggunaan push button dikehidupan
sehari-hari hampir menyentuh semua
bidang. Di bidang komputer dengan
keyboard dan mouse, dibidang otomotif
dengan panel-panel kontrolnya, bahkan
diperalatan rumah tangga sekalipun seperti kontrol peralatan listrik
juga menggunakan push button.

Aktif high pushbutton

Aktif high pushbutton merupakan push button yang memiliki


karakteristik saat tidak ada penekanan maka dalam keadaan
terputus (off) sedangkan saat ditekan akan tersambung (on).

Gambar 2. Bentuk Fisik Push Button 4 pin

21
Aktif low pushbutton

Aktif low push button merupakan push button yang memiliki


karakteristik saat tidak ada penekanan maka dalam keadaan
tersambung (on) sedangkan saat ditekan akan terputus (off).

Desain Lengkap Robot Kontrol Digital

Gambar 3. Skema proteus robot kontrol digital

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
untuk membuat sebuah robot kontrol dapat diringkas dalam tabel

berikut

Tabel 1. Kondisi Gerak Motor dan Kondisi Logika Tiap Pin Motor

Kondisi Tombol D.5 D.6 D.7 B.0

Push-Button

Maju D.2 = 0 1 0 1 0

Belok Kiri D.0 = 0 1 0 0 0

Belok Kanan D.1 = 0 0 0 1 0

Mundur D.3 = 0 0 1 0 1

Ingat motor hanya akan


bergerak jika diberi beda
polaritas antara dua pin
motor!

Membuat Program Robot Kontrol Digital dengan CV AVR

/*****************************************************
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 : Robot Kontrol Digital


Version : I
Date : 11/20/2012
Author : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School

23
Comments: Bekerja untuk Kebangkitan Teknologi Indonesia
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model : Small
External RAM size :0
Data Stack size : 256
*****************************************************/
#include <mega8.h>

#include <delay.h>
// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization


// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T
PORTB=0x00;
DDRB=0x06;

// 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
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization


// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=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) //robot gerak ke kanan
{
PORTD.5=0;
PORTD.6=0;

27
PORTD.7=1;
PORTB.0=0;
}
else if (PIND.2==0) //robot gerak maju
{
PORTD.5=1;
PORTD.6=0;
PORTD.7=1;
PORTB.0=0;
}
else if (PIND.3==0) //robot gerak mundur
{
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
ROBOT LINE FOLLOWER
DIGITAL DENGAN IC KOMPARATOR

Line follower Robot (Robot Pengikut Garis) adalah robot yang dapat

berjalan mengikuti sebuah lintasan, ada yang menyebutnya dengan Line

Tracker, Line Tracer Robot dan sebagainya. Garis yang dimaksud adalah

garis berwarna hitam diatas permukaan berwarna putih atau sebaliknya,

ada juga lintasan dengan warna lain dengan permukaan yang kontras

dengan warna garisnya. Ada juga garis yang tak terlihat yang digunakan

sebagai lintasan robot, misalnya medan magnet.

Gambar 1. Ilustrasi robot line follower


dengan posisi sensor di atas permukaan
putih

Seperti layaknya manusia, bagaimana manusia dapat berjalan mengikuti

jalan yang ada tanpa menabrak dan sebagainya, tentunya karena manusia

memiliki mata sebagai penginderanya. Begitu juga robot line follower

29
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.

Untuk merangkai rangkaian

elektroniknya kita perlu

tahu dulu diagram blok

sistem yang akan kita

bangun, dengan demikian

akan menjadi mudah

mengerjakannya. Blok

sistem yang akan kita bagun Gambar 2. Diagram blok robot line follower

paling tidak tampak seperti gambar berikut. Sistemnya terdiri dari

sensor garis, rangkaian komparator, sistem minimum AT Mega 16 dan

motor driver.

30
Skema Lengkap Line follower Digital IC Komparator

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

mikrokontroler data logika pin tersebut kemudian diolah untuk

mengerakan motor, motor akan bergerak jika kedua pin motor tersebut

31
memiliki beda polaritas. Selengkapnya mengenai logika gerak robot

dapat dilihat pada Tabel 1 dan 2.

Tabel 1. Kondisi Gerak Motor dan pengaruh Sensor

Kondisi 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 0 1 0 1

Belok Kiri 0 0 0 1

Belok Kanan 0 1 0 0

Mati 1 1 1 1

32
Gambar 3. Skema lengkap robot line follower menggunakan AT Mega 16

Bentuk Robot Line Follower

Gambar 4. Bentuk jadi robot line follower menggunakan AT Mega 16

33
Membuat Program Robot Line Follower dengan CV AVR

/*****************************************************
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 : Robot Line follower


Version : I
Date : 11/8/2012
Author : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School
Comments: www. bolabot. com

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>
# include <delay.h> //tambahan program untuk membuat waktu tunda

// Alphanumeric LCD Module functions


#include <alcd.h>

// Declare your global variables here

void main(void)

34
{
// Declare your local variables here

// Input/Output Ports initialization


// Port A 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
PORTA=0x00;
DDRA=0x00;

// 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;

// External Interrupt(s) initialization


// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

37
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);

// Tambahan kode mendefinisikan input output


DDRB.0=0;
DDRB.1=0;
DDRD.0=1;
DDRD.1=1;
DDRD.2=1;
DDRD.3=1;
// Tambahan kode mendefinisikan kecepatan motor PWM
OCR1A=200;
OCR1B=200;
// Tambahan kode mendefinisikan kondisi awal
PORTB.0=1; //sensor kiri
PORTB.1=1; //sensor kanan
PORTD.0=0;
PORTD.1=0;
PORTD.2=0;
PORTD.3=0;
while (1)
{
if (PINB.0==1 & PINB.1==0) // Tambahan kode sensor kiri hitam, kanan putih, maka belok kiri
{

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) // Tambahan kode sensor kiri putih, kanan hitam, maka belok
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
BEKERJA UNTUK KEBANGKITAN
TEKNOLOGI INDONESIA

40