laporan modul 9 (sapto wijanarko r)
TRANSCRIPT
Robot Line Follower Digital Menggunakan ADC
SAPTO WIJANARKO RUSTAMADI
Fisika-Sains dan teknologi
Universitas Islam Negeri Sunan Gunung Djati Bandung
Bandung
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);