1.1 Penjelasan Umum
Line Follower Robot
adalah sebuah alat yang dapat berjalan secara otomatis mengikuti garis berdasarkan perubahan warna pada garis baik
hitam dan putih. Hasil dari perubahan warna tersebut menyebabkan nilai pada
photo diode berubah sehingga menyebabkan nilai yang masuk ke dalam port ADC
pada mikrokontroller berubah, dan nilai ADC tersebut yang akan kita oleh
menjadi sebuah input. Di bawah ini adalah gambar flowchartnya
Line Follower ini
mempunyai dua buah motor DC 6 Volt yang dapat digerakkan maju dan mundur dengan
menggunakan driver motor L293D, saat
sensor mendeteksi adanya garis hitam ditengah dari wilayah sensor maka kedua
motor akan berjalan searah jarum jam sehingga robot maju, dan ketika sensor
mendeteksi adanya garis hitam dipinggir wilayah sensor maka salah satu motor akan berputar searah jarum
jam dan yang satu berlawanan arah jarum jam sehingga robot akan bergerak ke arah
kanan atau kiri. Dan ketika sensor tidak mendeteksi adanya garis pada wilayah
sensor maka robot akan berjalan mundur.
Robot
ini dapat dikembangkan lagi menjadi sebuah aplikasi yang berguna baik di
masyarakat maupun di industri, contohnya sebagai sebuah alat pengantar barang
secara otomatis atau terprogram.
1.2 ATMEGA 16
ATMEGA 16 adalah IC low-power yang dibuat berdasarkan arsitektur dari RISC.
Dengan memberikan perintah yang tepat dalam satu single clock cycle, ATMEGA
16 dapat merespon perintah tersebut 1 MIPS per MHz untuk mengoptimalkan
konsumsi tegangan.
Gambar 1.2 Pin Out dari ATMEGA 16
IC ATMEGA 16 mempunyai empat buah port. Port A
sebagai inputan pngonversi dari sinyal analog menjadi sinyal digital. Port B
dapat difungsikan sebagai port download dan upload program. Port C sebagai port
I/O biasa. Dan port D dapat digunakan sebagai port komunikasi serial.
Minimum sistem pada robot ini kita menggunakan
dua buah port yaitu port A sebagai input, dan port C sebagai ouput. Setiap port
pada minimum sistem di robot telah kita lengkapi dengan pin Vcc, dan pin Ground
pada pin 8 dan pin 9.
1.3 Photo Diode Sebagai Pembagi Tegangan
Pengaplikasian sensor cahaya pada robot ini, dibuat dengan menggunakan 4 buah infrared, dan 4 buah photo diode. Sebuah
photo diode akan berubah nilai R-nya
tergantung dengan cahya yang dikenakan padanya.
Dengan
demikian kata dapat membuat suatu pembagi tegangan dengan menggunakan photo
diode ini. Dapat dicontohkan dengan rangkaian berikut :
Gambar 1.4. Photo diode saat tidak mendapat
cahaya.
Gambar 1.5. Photo diode saat mendapat cahaya.
Pada gambar terlihat pada saat LDR tidak mendapat
cahaya nilai R pada LDR tinggi, dan ketika mendapat cahaya nilai R dari LDR
mengecil sehingga tegangan pada R6 mendekati supply. Dapat dicontohkan jika
pada saat tidak mendapat cahaya LDR (RL) = 1 Kohm
VR6 =
=
= 0,8 Volt
dan ketika
mendapat cahaya nilai Rl = 20 Kohm maka
;
VR6 =
=
= 8.65 Volt (simulasi)
= 16,36 Volt (perhitungan)
Dengan cara tersebut
maka dapat kita dapat memperoleh nilai yang akan kita masukkan pada input ADC
pada mikrokontroller.
1.4 Driver Motor L293D
L293 dan L293D adalah driver yang digunakan untuk
arus tinggi. L293 dibuat untuk menyediakan arus yang dapat diarahkan hingga 1 A
pada tegangan 4,5 Volt 36 volt. Sedangkan L293D dibuat untuk menyediakan arus
yang dapat diarahkan hingga 600 mA pada
tegangan 4,5 volt hingga 36 volt. Kedua driver tersebut didisain untuk dapat
mengendalikan beban yanng bersifat induktif seperti relay, solenoid, dc, dan
motor stepping bipolar, maupun beban
yang mempunyai tegangan tinggi dan arus tinggi dalam penggunaan positif-supply.
Gambar 1.6. Tampak atas LM293
II PERANCANGAN DAN PEMBUATAN
2.1 Bagian Utama Robot
2.2.1 Rangka
Dan Body
Gambar 2.1
Rangka dari Line Follower
Bagian ini digunakan untuk meletakkan semua komponen
yang melengkapi robot seperti minimum sistem, baterai, sensor, driver motor,
dan lain – lain. Bagian ini juga yang menentukan kestabilan dari pergerakkan
robot tersebut.
2.2.2 Minimum
System
Gambar 2.2
Minimum system ATMEGA 16 pada Line
Follower
Minimum sistem merupakan bagian utama dari robot
ini, dimana pada bagian ini digunakan untuk meletakkan semua komponen dari
mikrokontroller baik ATMEGA 16, port I/O, supply utama, dan lain – lain.
2.2.3 Sensor
Gambar 2.3
Sensor garis pada Line Follower
Sensor digunakan sebagai input dari robot, pada
sensor ini terdapat 4 buah photo diode, 4 buah infra red, dan beberapa resistor
sebagai pembagi tegangan. Pada gambar dibawah
diperlihatkan salah satu penggunaan photo diode dan infra red sebagai
input.
Dengan rangkaian diatas kita dapat memperoleh
perbedaan nilai yang ditangkap oleh photo diode melalui Output CN1, output
tersebut kita jadikan input pada mikrokontroller melalui port A (ADC)
Dari hasil percobaan didapatkan nilai
perbandingan untuk setiap sensor pada tabel dibawah :
Tabel 2.1
Perbandingan Nilai pada sensor.
Sensor
|
Keadaan
(Volt)
|
|
Putih
|
Hitam
|
|
S1
|
0.04
|
0.08
|
S2
|
0.06
|
0.11
|
S3
|
0.05
|
0.1
|
S4
|
0.04
|
0.14
|
Tabel diatas menunjukkan nilai yang ditangkap
oleh photo diode, terlihat nilai – nilai tersebut sangat kecil untuk
diperbandingkan, sehingga untuk mendapatkan range yang lebih luas kita akan
memodifikasi pada program robot. Dengan catatan pada program yang kita
modifikasi adalah nilai ADC dari input yang didapat dari sensor.
2.2.4 Driver
Motor
Driver motor digunakan untuk mengendalikan motor sehingga dapat berputar
searah maupun berlawanan jarum jam sehingga membuat motor dapat bergerak maju
dan mundur.
2.2.5 Motor
Motor yang kita gunakan disini adalah motor DC 6
Volt, tepatnya motor untuk pemutar kaset, motor ini dapat dibeli ditoko
elektronik terdekat. Kelemahan dari motor ini adalah tidak mempunyai torsi yang
cukup besar untuk menahan beban, walaupun mempunyai kecepatan yang cukup baik.
2.2
Flow Chart Dan Cara Kerja
Flow Chart dari program robot
Keterangan Flow Chart
< 135 : sensor medeteksi warna putih
> 135 : sensor medeteksi warna hitam
Robot maju : motor kanan berputar searah jarum jam,
motor kiri berputar searah jarum jam (dilihat pada satu sisi)
Robot belok kiri :
motor kanan berputar searah jarum jam, motor kiri berputar berlawanan jarum jam
(dilihat pada satu sisi)
Robot belok kanan :
motor kanan berputar berlawanan jarum jam, motor kiri berputar searah jarum jam
(dilihat pada satu sisi)
Robot mundur :
motor kanan berputar berlawanan jarum jam, motor kiri berputar berlawanan jarum jam
(dilihat pada satu sisi)
Cara Kerja Robot
- Pada saat sensor S2 dan S3 mendeteksi warna hitam
serta S1 dan S4 mendeteksi warna putih maka robot akan bergerak maju sebab S2
dan S3 bernilai > 135 dan S1, S4 < 135
-
Ada tiga kondisi untuk robot
agar belok ke kiri yaitu pada saat S1
> 135, atau S1 dan S2 > dari 135, atau S1, S2, dan S3 > 135
-
Dan ada tiga kondisi juga
untuk robot agar belok ke kanan yaitu pada saat
S4 > 135, atau S4 dan S3 > dari 135, atau S4, S3, dan S2 > 135
-
Untuk perintah mundur akan
dieksekusi pada saat sensor membaca S1, S2, S3, S4 < 135 atau S1, S4 >
135 dan S2, S3 > 135.
Tabel 2.2 Input Output dari
robot
Input
|
Output
|
|||
Sensor
|
Port A
|
Pin
Driver
|
Port C
|
Putaran
Motor
|
S1
|
Pin 1
|
1A
|
Pin 1
|
M Kanan CW
|
S2
|
Pin 3
|
2A
|
Pin 3
|
M Kanan CCW
|
S3
|
Pin 5
|
3A
|
Pin 5
|
M Kiri CCW
|
S4
|
Pin 7
|
4A
|
Pin 7
|
M Kiri CW
|
2.3 Program Robot
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#define ADC_VREF_TYPE 0x20
int i;
int mj,md;
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed
for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void maju()
{
PORTC=0x77;
delay_ms(70);
PORTC=0xFF;
delay_ms(100);
}
void mundur()
{
PORTC=0xDD;
delay_ms(70);
PORTC=0xFF;
delay_ms(100);
}
void blkkiristgh()
{
PORTC=0xF7;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0;
}
void blkkananstgh()
{
PORTC=0x7F;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0;
}
// Declare your global variables here
void main(void)
{
unsigned int ADCIN1, ADCIN3, ADCIN5,
ADCIN7,S4,S3,S2,S1;
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
/*
// USART initialization
// Communication Parameters: 8 Data, 1
Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600UCSRA=0x00;
UCSRB=0x48;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D; */
DDRC=0xFF;
DDRB=0xFF;
while (1)
{
ADCIN1=read_adc(1);
ADCIN3=read_adc(3);
ADCIN5=read_adc(5);
ADCIN7=read_adc(7);
ADCIN1=ADCIN1+2; // 2 adalah penyamaan nilai
S4=ADCIN7*20; // 20 adalah
penguatan nilai
S3=ADCIN5*20;
S2=ADCIN3*20;
S1=ADCIN1*20;
//==========KONDISI BELOK
KANAN=========================
if (S1
> 135 && S2 < 135 && S3 < 135 && S4 < 135)
{ PORTC=0x7D;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0; // belok kanan full
}
else if
(S1 > 135 && S2 > 135 && S3 < 135 && S4 <
135)
blkkananstgh();
else if
(S1 > 135 && S2 > 135 && S3 > 135 && S4 <
135)
blkkananstgh();
//=================KONDISI BELOK KIRI=====================
else if
(S1 < 135 && S2 < 135 && S3 < 135 && S4 >
135)
{
PORTC=0xD7;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0; // belok kiri full
}
else if
(S1 < 135 && S2 < 135 && S3 > 135 && S4 >
135)
blkkiristgh();
else if (S1 <
135 && S2 > 135 && S3 > 135 && S4 > 135)
blkkiristgh();
//==================KONDISI
MAJU===========================
else if
(S2 >135 && S3 > 135 && S1 < 135 && S4 <
135)
{
maju();
mj=mj+1;
}
else if (S2 >135 && S3 < 135
&& S1 < 135 && S4 < 135)
{
maju();
mj=mj+1;
}
else if
(S2 < 135 && S3 > 135 && S1 < 135 && S4 <
135)
{
maju();
mj=mj+1;
}
else if
(S2 > 135 && S3 > 135 && S1 > 135 && S4 >
135)
{
maju();
mj=mj+1;
}
//================KONDISI MUNDUR=======================
else
if (S2 < 135 && S3 < 135
&& S1 < 135 && S4 < 135)
{
mundur();
md=md+2;
}
else if
(S2 < 135 && S3 < 135 && S1 > 135 && S4
> 135)
{
mundur();
md=md+2;
}
else
PORTC=0x77;
if
(md>mj)
{
mj=0;
md=0;
for(i=1;i>1000;i++) // perintah
mundur jika menemukan jalan buntu beberapa kali
{
PORTC=0xDD;
}
}
//==================KOMUNIKASI
TO HYPERTERMINAL=============
/*
printf("S4
= %u ",S4);
printf("S3 = %u ",S3);
printf("S2 = %u ",S2);
printf("S1 = %u ",S1);
printf("mj = %u ",mj);
printf("md
= %u \r ",md); */
};
}
Rangkaian sensor dan schematic AVR

Gambar shcematic AVR
bayyou2.files.wordpress.com%2F2009%2F01%2Fline-follower-robot.doc
0 comments:
Post a Comment