LAPORAN
Diajukan untuk memenuhi sebagian persyaratan
Kelulusan Mata Kuliah Robotik
Disusun oleh
BAYU PUTRA KUSUMA
NIM : 71 05 040 089
I KAJIAN TEORI
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.
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
tegangan pada R6 mendekati supply. Dapat dicontohkan jika pada saat tidak
mendapat cahaya LDR (RL) = 1 Kohm
RL
VR6 = xVin
RL R 6
1
= x9
1 10
= 0,8 Volt
dan ketika mendapat cahaya nilai Rl = 20 Kohm maka ;
RL
VR6 = xVin
RL R 6
20
= x9
20 10
= 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.
2.2.3 Sensor
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.5 Motor
inisialisasi
Ya
S1 < 135 && S2 < Tidak
135 && S3 > 135 &&
S4 < 135
Ya
S1 > 135 && S2 < Tidak
135 && S3 < 135 &&
S4 < 135
Ya
Tidak
Robot Belok
Robot Maju Robot Belok Kiri Robot mundur
Kanan
Looping
End
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);
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); */
};
}
6.50
2.00
3.50
7.00
13.00
10.00 0.83
7.00
6.50
4.79