1. Perancangan
a. Power Supply

Gambar 3.15 Rangkaian power supply
Rangkaian power supply ini berfungsi sebagai pemberi tegangan kepada rangkaian lain yang digunakan pada robot yang kami buat.
Cara kerja rangkaian ini yaitu tegangan yang masuk dari baterai langsung melewati sebuah diode IN4002, dioda ini di pasang sebagai proteksi rangkaian ketika terjadi pemasangan kutub yang salah antara positif dan negatif maka secara langsung arus yang mengalir di blok sehingga tidak dapat mengalir dan mengganggu komponen berikutnya. Kemudian di pasang sebuah kapasitor yang berfungsi sebagai penyimpan muatan apabila terjadi putus sumber tegangan dalam waktu yang singkat rangkaian masih dapat berfungsi. Kemudian dipasang pula resistor yang berfungsi sebagai pembuang disipasi panas yang dihasilkan TIP42C, Sedangkan IC 7805 berfungsi sebagai penurun tegangan dari 12 volt DC baterai menjadi 5 volt DC, tetapi arus output yang dikeluarkan oleh IC ini sekitar 1 ampere, oleh karena itu dipasang transistor TIP42C yang berfungsi sebagai penguat arus. Setelah itu dipasang kapasitor pada output keluaran 5 volt DC dari IC 7805 yang berfungsi sebagai penyimpan tegangan. Pada output dari IC 7805 dilengkapi pula LED sebagai lampu indikator yang mengindikasikan untuk tegangan 5 volt DC. Akhirnya tegangan 5 volt DC yang disertai penguatan arus inilah yang menjadi sumber energi dari robot.
b. Minimum Sistem

Gambar 3.16 Rangkaian minimum sistem
Rangkaian minimum sistem yang digunakan pada kedua robot adalah dengan menggunakan mikrokontroler ATMega8535 yang dijadikan sebagai otak untuk mengatur segala pergerakan robot.
Port yang digunakan adalah Port A, Port C dan Port D. Port A yang digunakan adalah PIN A0 sampai PIN A2 digunakan sebagai output sistem lift. Port C yang digunakan adalah PIN C2 sampai PIN C7 digunakan outputan motor kiri dan motor kanan. Port D yang digunakan adalah PIN D0 sampai D5 digunakan sebagai input dari sensor.
Sedangkan pada robot Gatrik Port yang digunakan adalah Port A dan Port C. Port A digunakan sebagai inputan dari pengkondisi sinyal dan Port C digunakan sebagai outputan ke motor.c. Sensor dan Pengkondisi Sinyal
Gambar 3.17 Rangkaian sensor
Pada robot Gatrik ini sensor yang digunakakan adalah photodioda. Dalam membuat sensor pada robot Gatrik menggunakan 6 buah LED dan photodioda. Prinsip kerja dari sensor pada kedua robot ini adalah sama yaitu hanya memanfaatkan sifat cahaya yang akan dipantulkan jika mengenai benda berwarna terang dan akan diserap jika mengenai benda berwarna gelap. Sebagai sumber cahaya kita gunakan LED (Light Emiting Diode) yang akan memancarkan cahaya. Dan untuk menangkap pantulan cahaya dari LED, digunakan photodioda. Jika sensor berada diatas warna hijau maka photodioda akan menerima sedikit sekali cahaya pantulan, tetapi jika sensor berada diatas garis putih maka photodioda akan menerima banyak cahaya pantulan . Sifat dari photodioda adalah jika semakin banyak cahaya yang diterima, maka nilai resistansi diodanya semakin kecil, besaran resistansi tersebut dapat diubah menjadi tegangan. Sehingga jika sensor berada diatas garis hijau tegangan keluaran sensor akan kecil, demikian pula sebaliknya, jika sensor berada diatas garis putih, maka tegangan keluaran sensor akan besar.

Gambar 3.18 Rangkaian pengkondisi sinyal
Prinsip kerja dari gambar rangkaian diatas adalah apabila sensor membaca garis maka arus akan mengalir melalui resistor variable agar arus dapat diatur sehingga arus yang mengalir ke basis transistor dapat mengalirkan arus ke kolektor seakan-akan transistor berfungsi sebagai saklar ON yang menghubungkan Vcc 5 volt yang melawati resistor 1K ke ground. Jika posisi ON maka tegangan yang mengalir ke IC menjadi kecil sekitar 0-2 volt. Tegangan yang masuk ke IC ini artinya sama dengan logika 0, maka akan di NOT kan menjadi logika 1, logika 1 ini kembali di NOT kan sehingga benar-benar menjadi logika 0. Tegangan ini di NOT kan 2 kali dengan inverter yang bertujuan sebagai penghalus sinyal yang didapat dari sensor. Sehingga benar-benar logika 0 (0-2 volt) dan 1 (3-5 volt). Sistem ini juga disebut sistem buffer. Karena output dari IC berlogika 0 atau kurang dari 2 volt maka indikator (LED) akan menyala karena tegangan anoda pada LED lebih besar dari pada katoda atau antara anoda dan katodanya berbeda tegangan.
d. Driver Motor L293D

Gambar 3.19 Rangkaian Driver motor L293D
Driver motor yang digunakan pada robot Gatrik ini menggunakan Driver motor dengan menggunakan IC L293D untuk Driver motor ke roda. Sedangkan Driver motor untuk system lift digunakan Driver motor L293D untuk robot Gatrik.
Prinsip dari Driver motor L293D adalah sebagai pengendali arah putaran motor DC dengan input yang didapat dari output mikrokontroler. Dalam IC L293D memiliki 4 buah pengendali motor DC, dengan 4 buah input yang terhubung mikrokontroler dan 4 buah ouput yang terhubung langsung dengan motor DC.
IC L293D membutuhkan dua buah tegangan, tegangan yang pertama diberi 5 volt yang berfungsi sebagai sumber agar IC dapat bekerja, sedangkan tegangan yang kedua bersifat variabel dapat di ubah sesuai kebutuhan motor DC yaitu bekisar antara 4,5 volt- 36 volt.
2. Pembuatan
a. Pembuatan lay-out PCB.
Pembuatan PCB diawali dengan merancang tata letak dan jalur rangkaian berdasarkan diagram skema yang sudah ada. Untuk mempermudah dalam merancang tata letak digunakan software ORCAD. Adapun langkah-langkah dalam pembuatan PCB menggunakan software ORCAD adalah, sebagai berikut:
1) Jalankan Orcad Unison Suite-Capture untuk membuat skematik rangkaian.

Gambar 3.20 Tampilan Awal ORCAD Capture.
2)
Klik menu File-New-Project, kemudian isikan pada kolom name dengan nama yang dikehendaki, misalnya hardwere robot. Kemudian tentukan folder dan klik OK.
Klik menu File-New-Project, kemudian isikan pada kolom name dengan nama yang dikehendaki, misalnya hardwere robot. Kemudian tentukan folder dan klik OK.Gambar 3.21 Tampilan Window Membuat Project Baru
3) Mulailah membuat rangkaian sesuai dengan skematik yang telah ditentukan.

Gambar 3.22 Tampilan Hasil Pembuatan Skematik Rangkaian
4)
Buatlah netlist, langkahnya: pilih window dan klik pada nama yang kita simpan sebelumnya (hardware.opj), seperti gambar 4 berikut.
Buatlah netlist, langkahnya: pilih window dan klik pada nama yang kita simpan sebelumnya (hardware.opj), seperti gambar 4 berikut.Gambar 3.23 Perintah untuk Membuat Netlis
5)
Kemudian klik pada nama yang hardware robot.dsn, seperti gambar dibawah ini.
Kemudian klik pada nama yang hardware robot.dsn, seperti gambar dibawah ini.Gambar 3.24 Jendela Hardware.dsn
6) Klik Tool-Create Netlist-Layout.
7)
Klik “OK” hingga muncul nama yang kita simpan.mnl.
Klik “OK” hingga muncul nama yang kita simpan.mnl.Gambar 3.25 File NamaHardware Robot.mnl yang Telah Terbentuk
8)
Buka program Orcad Unison Suite-Layout dan klik menu File-New sehingga muncul menu sebagai berikut:
Buka program Orcad Unison Suite-Layout dan klik menu File-New sehingga muncul menu sebagai berikut:Gambar 3.26 Tampilan Menu File Default.Tch
9) Kemudian klik pada folder yang kita simpan, klik OPEN-SAVE.
10) Jika muncul window link footprint to component, klik link exiting footprint to component.

Gambar 3.27 Tampilan Window Link Footprint to Component.
11) Kemudian mulailah memilih footprint yang cocok untuk masing-masing komponen.
![]() |
Gambar 3.28 Tampilan Jendela untuk Memilih Footprint Komponen.
12) Setelah proses automatic ECO utility selesai, lakukan penyetingan terlebih dahulu.

Gambar 3.29 Tampilan Jendela System SettingsGambar 3.30 Tampilan Jendela Edit Padstack
![]() |
Gambar 3.31 Tampilan Jendela Edit LayerGambar 3.32 Tampilan Jendela Edit Net
13)
Lakukan pengaturan tata letak komponen dan buatlah jalurnya dengan cara menghubungkan garis dari titik kaki komponen yang stu ke kaki komponen yang lainya yang terhubung.
Lakukan pengaturan tata letak komponen dan buatlah jalurnya dengan cara menghubungkan garis dari titik kaki komponen yang stu ke kaki komponen yang lainya yang terhubung.Gambar 3.33 Hasil Tampilan Akhir
14) Print-lah layout dari rangkaian tersebut pada kertas foto.
15) Dan hasilnya seperti gambar dibawah ini:
![]() |

Gambar 3.34 Layout sensor

Gambar 3.35 Layout Driver motor L293D
Gambar 3.36 Layout minimum sistem dan pengkondisi sinyal
b. Pencetakan,Perakitan dan Penyolderan Komponen pada PCB
1) Minimum Sistem dan Pengkondisi Sinyal
a) Untuk minimum sistem dan pengkondisi sinyal yang disatukan kita mencetak dengan memesan ke Spectra dan dihasilkan papan PCB yang sudah dicetak dan dilubangi.
b) Lalu mulailah melakukan pemasangan komponen sesuai skematik rangkaian minimum sistem dan pengkondisi sinyal pada PCB tersebut.
c) Lakukan proses penyolderan komponen, kemudian potong kaki-kaki komponen dengan gunting kuku/tang untuk merapihkan PCB.
d) Dan hasilnya seperti gambar dibawah ini:

Gambar 3.37 Minimum Sistem Tampak Bawah

Gambar 3.38 Minimum Sistem Tampak Atas
2) Driver Motor
a) Tempelkan kertas foto/plastik transparan pada PCB, kemudian setrika-lah kertas tersebut sambil digosok-gosok. Setelah 10-15 menit, diamkan PCB sampai dingin kemudian angkat kertas foto tersebut secara perlahan.
b) Tebalkan jalur yang terputus pada papan PCB menggunakan spidol permanent.
c) Larutkan PCB menggunakan bahan pelarut FeCl dengan campuran air panas, lalu goyangkan sampai akhirnya semua lapisan tembaga yang tidak terkena tinta hilang (larut).
d) Bersihkan PCB tersebut dengan menggunakan tiner atau juga bisa dibersihkan dengan cara membasahi PCB tersebut oleh air dengan menggunakan kawat pencuci piring atau amplas, kemudian bersihkan lagi dengan air.
e) Tandailah PCB tersebut dengan menggunakan penitik pada lubang-lubang komponen yang akan dibor, lalu borlah PCB tersebut menggunakan bor tangan dengan mata bor yang sesuai ukuran lubang komponen.
f) Setelah dibor, haluskan PCB dengan amplas.
g) Kemudian mulailah melakukan pemasangan komponen sesuai skematik rangkaian pada PCB tersebut.
h) Lakukan proses penyolderan komponen, kemudian potong kaki-kaki komponen dengan gunting kuku/tang untuk merapihkan PCB.
i) Rapihkan kembali alat dan bahan yang digunakan.
j)
Dan hasilnya seperti gambar dibawah ini:
Dan hasilnya seperti gambar dibawah ini:Gambar 3.39 Driver Motor
3) Sensor
a) Tempelkan kertas foto/plastik transparan pada PCB, kemudian setrika-lah kertas tersebut sambil digosok-gosok. Setelah 10-15 menit, diamkan PCB sampai dingin kemudian angkat kertas foto tersebut secara perlahan.
b) Tebalkan jalur yang terputus pada papan PCB menggunakan spidol permanent.
c) Larutkan PCB menggunakan bahan pelarut FeCl dengan campuran air panas, lalu goyangkan sampai akhirnya semua lapisan tembaga yang tidak terkena tinta hilang (larut).
d) Bersihkan PCB tersebut dengan menggunakan tiner atau juga bisa dibersihkan dengan cara membasahi PCB tersebut oleh air dengan menggunakan kawat pencuci piring atau amplas, kemudian bersihkan lagi dengan air.
e) Tandailah PCB tersebut dengan menggunakan penitik pada lubang-lubang komponen yang akan dibor, lalu borlah PCB tersebut menggunakan bor tangan dengan mata bor yang sesuai ukuran lubang komponen.
f) Setelah dibor, haluskan PCB dengan amplas.
g) Kemudian mulailah melakukan pemasangan komponen sesuai skematik rangkaian pada PCB tersebut.
h) Lakukan proses penyolderan komponen, kemudian potong kaki-kaki komponen dengan gunting kuku/tang untuk merapihkan PCB.
i) Rapihkan kembali alat dan bahan yang digunakan.
j) Dan hasilnya seperti gambar dibawah ini:
![]() |
Gambar 3.40 Sensor Garis
A. Program
1. Perancangan
a. ALGORITMA
![]() |
Gambar 3.41 Flowchart Algoritma Pemrograman
Program dimulai dengan diasumsikan robot dengan kondisi sempurna dan sudah berada diatas line. Robot maju dengan diikuti fungsi scan_rule dimana fungsi scan_rule adalah berfungsi untuk membuat robot supaya tidak lepas dari garis dengan pengaturan PWM (pulse width modulation) dibagian motor kiri dan kanan, jika robot membaca simpangan (kondisi simpangan dimana sensor garis membaca seluruh garis) dengan jumlah sebanyak 2 maka akan dilakukan aksi belok kiri, setelah melakukan belok kiri robot akan maju dengan secara rutin memanggil fungso scan_rule.
Langkah selanjutnya jika robot membaca suatu kondisi dimana hanya sensor bagian kanan yang membaca garis sedangkan sensor bagian kiri tidak mendeteksi garis akan dilakukan aksi belok kanan. robot akan kembali maju dengan memanggil fungsi scan_rule secara berkala.
Langkah selanjutnya jika robot mendeteksi simpangan sebanyak 2 kali akan dilakukan aksi belok kiri dan kemudian robot akan kembali maju dengan memanggil fungsi scan_rule secara berkala.
Jika robot kembali mendeteksi kondisi sensor kanan membaca garis sedangkan sensor kiri tidak mendeteksi garis sensor akan melakukan aksi belok kanan. robot akan kembali maju dengan memanggil fungsi scan_rule secara berkala. Kondisi deteksi kanan akan dilakukan lagi jika kondisi terpenuhi robot akan belok kanan dan robot akan kembali maju.
Langkah selanjutnya bila kondisi sensor kiri membaca garis sedangkan sensor kanan tidak membaca garis robot akan melakukan belok kiri . robot akan kembali maju dengan memanggil fungsi scan_rule secara berkala.
Selanjutnya jika jumlah pembacaan simpangan oleh robot berjumlah 3 robot akan berhenti dahulu dan melakukan gerakan maju dengan memakai delay kemudian robot melakukan aksi capit benda dan diteruskan dengan aksi angkat benda selanjutnya robot akan maju dan jika robot membaca simpangan akan dilakukan aksu putar balik.
Sampai disini robot telah siap untuk melakukan aksi pulang dengan diasumsikan robot sudah mendapatkan benda. Jika pembacaaan simpangan berjumlah 2 akan dilakukan aksi belok kiri dilanjutkan gerakan dengan memanggil fungsi scan_rule secara berkala kemudian jika jumlah simpangan berjumlah 4 akan dilakukan aksi turunkan benda diikuti dengan capit membuka sampai disini robot telah selesai melakukan tugas dan melakukan aksi stop.
2. Pembuatan
a. Langkah pertama adalah membuat desain kebutuhan sistem kontrol robot:
1) Untuk sebuah intruksi dalam satu waktu terdapat dua intruksi antara eksekusi program utama dan penggerak aktuator (digunakan untuk control PWM).
2) Intruksi yang digunakan hanya menggunakan satu timer untuk pengaturan PWM
3) prosesor yang digunakan hanya satu.
4) Bahasa pemograman yang digunakan adalah bahasa C dengan compiler AVR codevision.
b. Langkah kedua penyusunan skema mekanisme system control robot
1) Jenis prosesor yang digunakan adalah mikrokontroler jenis AVR ATMEGA 8535.
2) Fungsi yang digunakan dalam algoritma pemograman ini diantaranya fungsi utama, fungsi line follower,counter simpangan, fungsi PWM, fungsi belok kanan, fungsi belok kiri, fungsi ambil benda dan turunkan benda.
3) Karena system tidak terlalu komplek, maka tipe data yang digunakan berpatokan pada jenis variable yang akan digunakan, untuk tipe data jenis integer dan unsigned char masih memungkinkan.
c. Langkah ketiga pembuatan sintaks program
Pembuatan sintaks program dilakukan dengan menggunakan Compiler AVR CodeVision:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.6 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version : I
Date : 3/20/2010
Author : BATRAI III
Company : KOMPOR
Comments:
Chip type : ATmega8535
Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
#define l2 PIND.0
#define l1 PIND.1
#define r PIND.2 //sensor
#define l PIND.3
#define r1 PIND.4
#define r2 PIND.5
#define enki PORTC.7 //kanan
#define ki1 PORTC.6
#define ki2 PORTC.5
#define enka PORTC.4 //kiri
#define ka1 PORTC.3
#define ka2 PORTC.2
#define enli PORTA.0
#define li1 PORTA.1 //lengan
#define li2 PORTA.2
bit x;
unsigned char xcount,lpwm,rpwm,lipwm;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
xcount++;
{
if (xcount<=lpwm)enki=1;
else enki=0;
if (xcount<=rpwm)enka=1;
else enka=0;
if (xcount<=lipwm)enli=1;
else enli=0;
TCNT0=0xFF;
}
// Place your code here
}
void maju()
{
rpwm=205;ka1=1;ka2=0;
lpwm=250;ki1=1;ki2=0;
}
void belok_kiri()
{
unsigned int i;
lpwm=255; rpwm=255;
ki1=0;ki2=1;
ka1=1;ka2=0;
for(i=0;i<=1000;i++) while (!r2 || !r1 ) {};
for(i=0;i<=1000;i++) while ( r2 || r1 ) {};
for(i=0;i<=1000;i++) while (!r2 || !r1 ) {};
lpwm=0; rpwm=0;
}
void belok_kanan()
{
unsigned int i;
lpwm=255; rpwm=255;
ki1=1;ki2=0;
ka1=0;ka2=1;
for(i=0;i<=1000;i++) while (!l2 || !l1 ) {};
for(i=0;i<=1000;i++) while ( l2 || l1 ) {};
for(i=0;i<=1000;i++) while (!l2 || !l1 ) {};
lpwm=0; rpwm=0;
}
void naik()
{
lipwm=250;li1=1;li2=0;
}
void turun()
{
lipwm=250;li1=0;li2=1;
}
// Declare your global variables here
unsigned char sensor;
void baca_garis()
{
maju();
sensor=PIND;
sensor&=0b00111111; //sensor dimaks kan dengan
switch(sensor)
{
case 0b00111110: lpwm=250; rpwm=0; x=1; break;
case 0b00111100: lpwm=250; rpwm=5; x=1; break;
case 0b00111101: lpwm=250; rpwm=55; x=1; break;
case 0b00111001: lpwm=250; rpwm=105; x=1; break;
case 0b00111011: lpwm=250; rpwm=200; x=1; break;
case 0b00110011: lpwm=250; rpwm=205; break;
case 0b00110111: lpwm=200; rpwm=205; x=0; break;
case 0b00100111: lpwm=180; rpwm=205; x=0; break;
case 0b00101111: lpwm=130; rpwm=205; x=0; break;
case 0b00001111: lpwm=60; rpwm=205; x=0; break;
case 0b00011111: lpwm=0; rpwm=205; x=0; break;
// kiri
case 0b00000001: lpwm=200; rpwm=250; ki1=0;ki2=1;ka1=1;ka2=0;delay_ms(300); x=0; break;
case 0b00000111: lpwm=200; rpwm=250; ki1=0;ki2=1;ka1=1;ka2=0;delay_ms(300); x=0; break;
case 0b00100011: lpwm=200; rpwm=250; ki1=0;ki2=1;ka1=1;ka2=0;delay_ms(300); x=0; break;
case 0b00000011: lpwm=200; rpwm=250; ki1=0;ki2=1;ka1=1;ka2=0;delay_ms(300); x=0; break;
//kanan
case 0b00110000: lpwm=250; rpwm=200; ki1=1;ki2=0;ka1=0;ka2=1;delay_ms(300); x=1; break;
case 0b00111000: lpwm=250; rpwm=200; ki1=1;ki2=0;ka1=0;ka2=1;delay_ms(300); x=1; break;
case 0b00110001: lpwm=250; rpwm=200; ki1=1;ki2=0;ka1=0;ka2=1;delay_ms(300); x=1; break;
case 0b00100000: lpwm=250; rpwm=200; ki1=1;ki2=0;ka1=0;ka2=1;delay_ms(300); x=1; break;
case 0b00111111: break;
// ketika sensor tidak membaca garis masuk kondisional if
if(x==0) {rpwm=250; lpwm=0;}
else if (x==1) {rpwm=0; lpwm=250;}
break;
}
}
void scan_count(unsigned char count)
{
unsigned int i;
unsigned char xx=0;
sensor=PIND;
while(xx<count)
{
for(i=0;i<1000;i++) while((sensor & 0b00011110)!=0b00000000) baca_garis();
for(i=0;i<1000;i++) while((sensor & 0b00011110)==0b00000000) baca_garis();
xx++;
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTA=0xFF;
DDRA=0xFF;
// 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=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTC=0xFF;
DDRC=0xFF;
// 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;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
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: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
lpwm=0;rpwm=0;delay_ms(2000);
scan_count(2); //2 simpangan belok kiri
belok_kiri();
scan_count(2); //2 simpangan belok kanan
rpwm=100; lpwm=250; delay_ms(1000); //belok_kanan
rpwm=0; lpwm=0; delay_ms(1000);//berhenti 1000 ms.
baca_garis(); delay_ms(1000); //scan_rule
scan_count(1); //1 simpangan maju
maju();
scan_count(5); //angkat benda
baca_garis();delay_ms(4000);
lpwm=0;rpwm=0;delay_ms(8000);
naik();delay_ms(20000);lipwm=0;
//lpwm=0;rpwm=0;lipwm=0;delay_ms(8000);
rpwm=200; lpwm=200;ki1=1;ki2=0;
ka1=0;ka2=1; delay_ms(6000); baca_garis();delay_ms(3000);
// scan_count(1);
scan_count(4);
baca_garis();
// scan_count(3);
// rpwm=0;lpwm=0;
scan_count(1);
maju(); delay_ms(2000); baca_garis();
scan_count(2);
rpwm=100; lpwm=250; delay_ms(1000); //belok_kanan
rpwm=0; lpwm=0; delay_ms(1000);//berhenti 1000 ms.
baca_garis(); delay_ms(1000); //scan_rule
scan_count(2);
rpwm=200; lpwm=200;ki1=1;ki2=0;
ka1=0;ka2=1; delay_ms(3500);
baca_garis();delay_ms(1000);
//rpwm=0; lpwm=0; delay_ms(5000);
scan_count(2);
rpwm=0; lpwm=0;
turun();delay_ms(20000);lipwm=0;
break;
// Place your code here
};
}




