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

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.

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)

Gambar 2. Desain dan simulasi robot kontrol analog sederhana

Desain Aktual
Untuk membuat desain actual robot, dalam buku ini dibuat
menggunakan software Fritzing.

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)

(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 !!!

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

//semua led mati

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

Belok Kiri

D.0 = 0

Belok Kanan

D.1 = 0

Mundur

D.3 = 0

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
tahu

dulu

kita

diagram

blok

sistem

yang

bangun,

dengan

demikian

menjadi

mudah

mengerjakannya.

Blok

akan

akan

perlu

kita

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

Belok Kiri

Belok Kanan

Mati

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

Anda mungkin juga menyukai