LINE FOLLOWER

LINE FOLLOWER
          Robot line follower adalah robot yang bisa bergerak mengikuti jalur panduan garis. Garis pandu yang di gunakan dalam hal ini adalah garis hitam yang di tempatkan pada permukaan berwarana putih. Robot line follower terbagi menjadi dua jenis yaitu line follower analog tanpa menggunakan program dan line follower dengan program microkontroler. Line follower yang menggunakan program microkontroler lebih komplek dan lebih sempurna jika dibanding line follower analog yang tanpa menggunakan program.
          Pada robot line follower terdapat 3 bagian penting yang menyusun robot line follower tersebut, yaitu modul elektronikal, mekanikal dan firmware. Modul elektronik robot line follower terdiri dari rangkaian pengendali utama (main controller), rangkaian sensor, dan rangkaian driver.
          Modul pengendali utama (main controller)
          Pada modul ini memiliki fungsi utama sebagai main control, modul main control ini biasa menggunakan rangkaian sismin/minsis yang terintegrasi dengan berbagai macam IC seperti atmega 8, atmega 16, atmega 32 dan sebagainya.
          Modul sensor
          Fungsi dari modul ini adalah sebagai "pembaca" garis pandu yang akan dikonversi sebagai sinyal input. Komponen utama dari modul ini adalah InfraRed / LED putih dan Photodioda.
          Modul driver
          Driver Motor adalah modul untuk motor yang memungkinkan kita mengontrol kecepatan kerja dan arah dua motor secara bersamaan. Driver Motor ini dirancang dan dikembangkan berdasarkan IC L293D.
          Mekanikal robot line follower
          Bagian mekanikal dari robot line follower merupakan bagian penggerak dari robot line follower yang terdiri dari dinamo/motor, gear box dan roda.

          Firmware
          Program/firmware merupakan salah satu bagian terpenting dari robot line follower yang menggunakan microkontroler. Berikut ini contoh listing program yang digunakan untuk menjalankan robot line follower.

#include <io.h>

void diam()
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTD.0=0;
PORTD.1=0;
PORTD.2=0;
}
void maju()
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTD.0=0;
PORTD.1=1;
PORTD.2=0;
}
void kiri()
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTD.0=1;
PORTD.1=0;
PORTD.2=0;
}
void kiri_banting()
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTD.0=1;
PORTD.1=0;
PORTD.2=0;
}
void kanan()
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTD.0=0;
PORTD.1=0;
PORTD.2=1;
}
void kanan_banting()
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTD.0=0;
PORTD.1=0;
PORTD.2=1;
}

void main(void)
{
DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

while (1)
      {
       switch(PINA)
       {
       case 0b00000000 : kiri_banting();break;
       case 0b00000010 : maju();break;
       case 0b00000110 : kiri();break;
       case 0b00000100 : kiri_banting();break;
       case 0b00000011 : kanan();break;
       case 0b00000001 : kanan_banting();break;
       default : break;
       }
      }
}