laporan modul 9 (sapto wijanarko r)

29
Robot Line Follower Digital Menggunakan ADC SAPTO WIJANARKO RUSTAMADI Fisika-Sains dan teknologi Universitas Islam Negeri Sunan Gunung Djati Bandung Bandung [email protected] Abstrak :-Dalam percobaan ini dilakukan simulasi rangkaian Robot Line Follower Digital menggunakan ADC. Tujuan dari praktikum ini salah satunya adalah Memahami prinsip kerja ADC untuk mengubah data analog sensor menjadi digital pada robot line follower digital.Sebelum membuat simuasi rangkaian terlebih dahulu dilakukan kalibrasi sensor terhadap warna. Analog to Digital Converter (ADC) adalah sebuah piranti yang dirancang untuk mengubah sinyal-sinyal analog menjadi sinyal – sinyal digital. Kata kunci : Digital, ADC, analog, sensor, kalibrasi. 1 Introduction (Q.S Al-imron 190) ِ ابَ بْ لَ ْ ال يِ ل و ِ لٍ ابَ ي َ لِ ارَ هَ ّ لن اَ وِ لْ بَ ّ ل ل اِ فَ لِ تْ خ اَ وِ ضْ رَ ْ الَ وِ ابَ اوَ مَ ّ س ل اِ قْ لَ خ يِ فَ ّ . نِ 0 اSesungguhnya dalam penciptaan langit dan bumi, dan silih bergantinya malam dan siang terdapat tanda-tanda bagi orang- orang yang berakal, (Qs.Al-imron:190) ٰ يَ لَ عَ ا وً ود ع قَ ا وً امَ تِ قَ َ ّ اَ . ون ر كْ ? ذَ يَ . ن يِ ذَ ّ الِ ضْ رَ ْ الَ وِ ابَ اوَ مَ ّ س ل اِ قْ لَ خ يِ فَ . ون رَ ّ كَ فَ تَ يَ وْ مِ هِ ب و ? ن خ اَ بَ ّ يَ رَ ابَ ذَ ا عَ بِ قَ قَ Q كَ ? ن اَ حْ ب سً لِ ط اَ ا يَ ذٰ َ هَ تْ قَ لَ خ اَ مِ ارَ ّ ب ل ا

Upload: sapto-gatacha

Post on 27-Oct-2015

135 views

Category:

Documents


0 download

TRANSCRIPT

Robot Line Follower Digital Menggunakan ADC

SAPTO WIJANARKO RUSTAMADI

Fisika-Sains dan teknologi

Universitas Islam Negeri Sunan Gunung Djati Bandung

Bandung

[email protected]

Abstrak :-Dalam percobaan ini dilakukan simulasi rangkaian Robot Line Follower Digital menggunakan ADC. Tujuan dari praktikum ini salah satunya adalah Memahami prinsip kerja ADC untuk mengubah data analog sensor menjadi digital pada robot line follower digital.Sebelum membuat simuasi rangkaian terlebih dahulu dilakukan kalibrasi sensor terhadap warna. Analog to Digital Converter (ADC) adalah sebuah piranti yang dirancang untuk mengubah sinyal-sinyal analog menjadi sinyal – sinyal digital.

Kata kunci : Digital, ADC, analog, sensor, kalibrasi.

1 Introduction

(Q.S Al-imron 190)

�ول�ي أل� ات� ي آل �هار� والن �ل� �ي الل ف� �ال ت واخ� ر�ض� واأل� ماوات� الس� �ق� ل خ ف�ي �ن� إ

اب� �ب ل األ�

Sesungguhnya dalam penciptaan langit dan bumi, dan silih bergantinya malam dan siang

terdapat tanda-tanda bagi orang-orang yang berakal,

(Qs.Al-imron:190)

ى# وعل وق�ع�ود&ا ام&ا ق�ي �ه الل ون �ر� ذ�ك ي �ذ�ين �ق� ال ل خ ف�ي ون �ر� فك ت وي �ه�م� �وب ن ج�

ض� ر� واأل� ماوات� عذاب الس� ا فق�ن ك ان �ح ب س� اط�ال& ب ه#ذا ق�ت ل خ ما ا �ن ب �ار� ر الن

(yaitu) orang-orang yang mengingat Allah sambil berdiri atau duduk atau dalam keadan

berbaring dan mereka memikirkan tentang penciptaan langit dan bumi (seraya berkata): "Ya

Tuhan kami, tiadalah Engkau menciptakan ini dengan sia-sia, Maha Suci Engkau, maka

peliharalah kami dari siksa neraka.

Sebagian besar sensor yang digunakan untuk membangun sebuah robot memiliki output sinyal analog, sedangkan mikrokontroler berbasis digital yang hanya dapat membaca

high (1) atau low (0) saja. Dalam paktikum yang sebelumnya telah dibahas desain dan pemograman untuk robot line follower berbasis IC komparator yang berfungsi untuk

mendigitalkan output dari sensor yg semula analog. Namun, sistem komparator terbatas hanya menghasilkan dta output high dan low saja sehingga mikrokontroler tidak dapat membedakan factor lainnya seperti jarak sensor kelantai, pengaruh lingkungan terhadap sensor, dan lainnya. Maka solusi masalah keterbatasan komparaator tersebut dapat diatasi dengan ADC ( Analog to Digital Convertion).

Analog to Digital Converter (ADC) adalah sebuah piranti yang dirancang untuk mengubah sinyal-sinyal analog menjadi sinyal – sinyal digital. IC ADC 0804 dianggap dapat memenuhi kebutuhan dari rangkaian yang akan dibuat. IC jenis ini bekerja secara cermat dengan menambahkan sedikit komponen sesuai dengan spesifikasi yang harus diberikan dan dapat mengkonversikan secara cepat suatu masukan tegangan. Hal-hal yang juga perlu diperhatikan dalam penggunaan ADC ini adalah tegangan maksimum yang dapat dikonversikan oleh ADC dari rangkaian pengkondisi sinyal, resolusi, pewaktu eksternal ADC, tipe keluaran, ketepatan dan waktu konversinya.Beberapa karakteristik penting ADC :1. Waktu konversi2. Resolusi3. Ketidaklinieran4. AkurasiAda banyak cara yang dapat digunakan untuk mengubah sinyal analog menjadi sinyal digital yang nilainya proposional. Jenis ADC yang biasa digunakan dalam perancangan adalah jenis successive approximation convertion atau pendekatan bertingkat yang memiliki waktu konversi jauh lebih singkat dan tidak tergantung pada nilai masukan analognya atau sinyal yang akan diubah.

Dalam bidang robotika, , dengan ADC dapat dibuat berbagai macam robot otomatis seperti line follower, light follower, robot kontrol suara, robot anti penghalang, robot detektor logam, dan lain-lain. Dalam mikrokontoler AVR, fasilitas ADC telah tertanam dalam chip mikrokontrolernya sehingga tidak perlu menambahkan IC ADC.

2 Tujuan

Tujuan dari praktikum mengenai robot line follower digital menggunakan ADC adalah :

1. Mengetahui dan memahami sistem sensor pada robot digital.

2. . Mengetahui dan memahami prinsip input – output mikrokontroler berbasis sensor cahaya.

3. Mampu menampilkan data dan karakter dengan interface LCD.

4. Memahami prinsip kerja ADC untuk mengubah data analog sensor menjadi digital pada robot line follower digital.

5. Mampu mendesain memprogram dan membuat robot line follower digital.

6. Mengetahui aplikasi robot line follower.

3 Diagram Alir

2. Simulasi Robot line follower berbasis ADC.

Berikut ini merupakan diagram alir percobaan mengenai Robot Line follower Digital menggunakan ADC :

1. Simulasi kalibrasi sensor cahaya terhadap warna

MENYUSUN RANGKAIAN SESUAI GAMBAR

MEMBUAT PROGRAM CV AVR

MASUKAN PROGRAM AVR KE MIKROKONTROLER

KALIBRASI

MENYUSUN RANGKAIAN SESUAI GAMBAR

MEMBUAT PROGRAM CV AVR

MASUKAN PROGRAM AVR KE MIKROKONTROLER

UJI DAN ANALISIS

4 Pembahasan

Dalam percobaan ini dibuat robot control digital berbasis ADC. Sebelum dibuat robot tersebut dibuat sistem kalibrasi data sensor ADC terhadap warna, kemudian membuat robot berdasarkan data kalibrasi sensor tersebut.

Pada fig.1 dpat dilihat merupakan desain rangkaian simulasi kaibrasi sensor LDR terhadap warna. Pada percobaan ini digunakan LED; LDR; dan mikrokontrler dengan ADC.

LED dan LDR merupakan resistor yang menangkap spectrum cahaya sehingga dapat

digunakan sebagai sensor cahaya. Pada mikrokontroler deprogram untuk mendeteksi cahaya Pada warna gelap penyerapan cahaya

lebih besar daripada warna putih sehingga cahaya terpantul ke sensor menjadi lebih kecil. Dengan menggunakan LED-Photodiode, garis dapat dideteksi dengan menggunakan konsep transmitter-receiver. LED mengemisi cahaya. Dalam hal ini, LED melakukan kerjanya sebagai transmitter cahaya untuk dipantulkan kembali ke receiver. Setelah dipantulkan, cahaya diterima oleh Photodiode sebagai receiver. Pantulan cahaya yang diterima kemudian difilter untuk dikonversi ke frekuensi yang

didapatkan sehingga didapatkan tegangan tertentu. Tegangan ini merupakan sinyal analog sehingga perlu dikonversi ke sinyal digital dengan menggunakan ADC pada mikrokontroler. Isyarat digital tersebut kemudian diolah oleh mikrokontroler berdasarkan basis pengetahuan yang diprogram dalam mikrokontroler sehingga dihasilkan perintah aksi yang harus dilakukan. Perintah ini diproses lebih lanjut oleh subsistem perencanaan dan kendali sehingga akhirnya bagian aktuasi yang berupa motor dc bergerak sesuai dengan perintah. Dengan demikian

pergerakan robot akan bisa berjalan sesuai logika yang diberikan.

Pada gambar 2, dapat kita amati bahwa ketika LDR gelap LED D2 sebagai output dari mikrokontroler mati. Saat LDR gelap, resistansi LDR menjadi besar, dan mengakibatkan arus tidak dapat melewatinya dan tidak dapat pula diteruskan ke mikrokontroler.

5 Kesimpulan

Dari percobaan mengenai Robot control Digital menggunakan ADC dapat diambil kesimpulan bahwa ketika LDR gelap LED D2 sebagai output dari mikrokokntroler yang mati. Tetapi saat LDR gelap resistansi LDR menjadi besar dan mengakibatkan arus tidak dapat melewatinya dan tidak dapat pula diteruskan ke mikrokontroler.

Referensi :

[1] Sanjaya, M. Modul Membuat Robot Itu Asyik, Bolabot Tecno Robotic School, Bandung, 2012.

[2] Malvino “ Prinsip – prinsip elektronika 1” Erlangga. Jakarta.1994

[3] Floyd and Buchla “ Fundamental of analog circuits “ Prentice Hall. New jersey.2008

[4] Mc Comb, Gordon. Robot Builder’s Bonanza. 2001. Mc Graw Hills. United States of America

Lampiran

Fig 1. Desain Rangkaian Kalibrasi Sensor Cahaya (LDR) terhadap warna

Fig 2. Desain Rangkaian Kalibrasi sensor cahay ( LDR ) pada saat LDR terang.

Fig 3. Desain Rangkaian Kalibrasi sensor cahay ( LDR ) pada saat LDR gelap.

Fig 4. Desain Line Follower Berbasis Data ADC.

Fig 5. Simulasi Robot Line Follower Berbasis Data ADC saat Belok Kanan.

Fig 6. Simulasi Robot Line Follower Berbasis Data ADC saat Belok Kiri

Fig 7. Simulasi Robot Line Follower Berbasis Data ADC saat Maju.

Fig 8. Simulasi Robot Line Follower Berbasis Data ADC saat Mati.

Program CV AVR Kalibrasi Sensor Cahaya (LDR) Terhadap Warna :

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.0 Evaluation

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : Program Kalibrasi Sensor Cahaya (LDR) Terhadap Warna

Version : 1

Date : 10/12/2012

Author : Kelompok 1

Company : Fisika Sains UIN SGD Bandung

Comments:

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 <stdio.h>

#include <delay.h>

// Alphanumeric LCD Module functions

#include <alcd.h>

unsigned char dataku[16]; //mendefinisikan tipe data

#define FIRST_ADC_INPUT 0

#define LAST_ADC_INPUT 1

unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];

#define ADC_VREF_TYPE 0x60

// ADC interrupt service routine

// with auto input scanning

interrupt [ADC_INT] void adc_isr(void)

{

static unsigned char input_index=0;

// Read the 8 most significant bits

// of the AD conversion result

adc_data[input_index]=ADCH;

// Select next ADC input

if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))

input_index=0;

ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

}

// Declare your global variables here

void main(void)

{

// 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=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: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// 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=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: Timer2 Stopped

// Mode: Normal top=0xFF

// 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=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 Clock frequency: 750,000 kHz

// ADC Voltage Reference: AVCC pin

// ADC Auto Trigger Source: ADC Stopped

// Only the 8 most significant bits of

// the AD conversion result are used

ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);

ADCSRA=0xCC;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

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

// Global enable interrupts

#asm("sei")

//mendefinisikan output LED indikator

DDRD.0=1;

PORTD.0=0;

while (1)

{

if(adc_data[0]<100)

{

PORTD.0=1;

lcd_clear();

lcd_gotoxy(0,1);

lcd_putsf("MENYALA");

lcd_gotoxy(0,0);

sprintf(dataku,"D=%d",adc_data[0]);

lcd_puts(dataku);

delay_ms(100);

}

else

{

PORTD.0=0;

lcd_clear();

lcd_gotoxy(0,1);

lcd_putsf("MATI");

lcd_gotoxy(0,0);

sprintf(dataku,"D=%d",adc_data[0]);

lcd_puts(dataku);

delay_ms(100);

}

}

}

Program CV AVR Robot Line Follower Berbasis Data ADC :

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.0 Evaluation

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : Robot Line Follower Berbasis Data ADC

Version : 1

Date : 10/12/2012

Author : Kelompok 1

Company : Fisika UIN SGD Bandung

Comments:

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 <stdio.h>

#include <delay.h>

// Alphanumeric LCD Module functions

#include <alcd.h>

#define FIRST_ADC_INPUT 0

#define LAST_ADC_INPUT 1

unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];

#define ADC_VREF_TYPE 0x60

unsigned char dataku[16];

float data1;

float data2;

// ADC interrupt service routine

// with auto input scanning

interrupt [ADC_INT] void adc_isr(void)

{

static unsigned char input_index=0;

// Read the 8 most significant bits

// of the AD conversion result

adc_data[input_index]=ADCH;

// Select next ADC input

if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))

input_index=0;

ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

}

// Declare your global variables here

void main(void)

{

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

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;

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 Clock frequency: 750,000 kHz

// ADC Voltage Reference: AVCC pin

// ADC Auto Trigger Source: ADC Stopped

// Only the 8 most significant bits of

// the AD conversion result are used

ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);

ADCSRA=0xCC;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

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

// Global enable interrupts

#asm("sei")

//mendefinisikan input output

DDRD.0=1;

DDRD.1=1;

DDRD.2=1;

DDRD.3=1;

//kecepatan motor

OCR1A=200;

OCR1B=200;

//kondisi awal

PORTD.0=0;

PORTD.1=0;

PORTD.2=0;

PORTD.3=0;

while (1)

{

//sensor kiri dan kanan mendeteksi putih

if(data1<100 & data2<100)

{

PORTD.0=1;

PORTD.1=0;

PORTD.2=1;

PORTD.3=0;

lcd_clear();

lcd_gotoxy(0,1);

lcd_putsf("MAJU");

lcd_gotoxy(0,0);

data1=adc_data[0]*0.5;

data2=adc_data[1]*0.5;

sprintf(dataku,"s1=%0.1f s2=%0.1f",data1,data2);

lcd_puts(dataku);

delay_ms(100);

}

//sensor kiri mendeteksi hitam, kanan mendeteksi putih

else if (data1>100 & data2<100)

{

PORTD.0=0;

PORTD.1=0;

PORTD.2=1;

PORTD.3=0;

lcd_clear();

lcd_gotoxy(0,1);

lcd_putsf("BELOK KIRI");

lcd_gotoxy(0,0);

data1=adc_data[0]*0.5;

data2=adc_data[1]*0.5;

sprintf(dataku,"s1=%0.1f s2=%0.1f",data1,data2);

lcd_puts(dataku);

delay_ms(100);

}

//sensor kiri mendeteksi putih, kanan mendeteksi hitam

else if (data1<100 & data2>100)

{

PORTD.0=1;

PORTD.1=0;

PORTD.2=0;

PORTD.3=0;

lcd_clear();

lcd_gotoxy(0,1);

lcd_putsf("BELOK KANAN");

lcd_gotoxy(0,0);

data1=adc_data[0]*0.5;

data2=adc_data[1]*0.5;

sprintf(dataku,"s1=%.1f s2=%0.1",data1,data2);

lcd_puts(dataku);

delay_ms(100);

}

//Sensor kiri dan kanan mendeteksi garis hitam

else

{

PORTD.0=0;

PORTD.1=0;

PORTD.2=0;

PORTD.3=0;

lcd_clear();

lcd_gotoxy(0,1);

lcd_putsf("MATI");

lcd_gotoxy(0,0);

data1=adc_data[0]*0.5;

data2=adc_data[1]*0.5;

sprintf(dataku,"s1=%0.1f s2=%0.1f",data1,data2);

lcd_puts(dataku);

delay_ms(100);

}

}

}