Robot
 Line Follower merupakan robot yang dapat bergerak mengikuti garis 
secara otomatis. Robot Line Follower merupakan robot yang sederhana 
bahkan sekarang anak SMA dan SMP sudah bisa membuatnya selain dalam 
membuatnya tidak terlalu sulit atau dapat dikatakan mudah selain itu 
juga komponen yang dibutuhkan dalam membuatnya cukup mudah kita dapatkan
 serta buku ataupun tutorial yang ada di internet sudah banyak sekali 
yang membahas cara membuat line follower baik itu tanpa mikrokontroler 
ataupun dengan mikrokontroler.
 
  
Gambar Robot Line Follower
Untuk
 membaca garis, robot dilengkapi dengan sensor proximity yang dapat 
 membedakan antara garis hitam dengan lantai putih. Sensor proximity ini
 dapat kalibrasi untuk menyesuaikan pembacaan sensor terhadap kondisi 
pencahayaan ruangan. Sehingga pembacaan sensor selalu akurat. Sensor 
proximity bisa kita buat sendiri. Prinsip kerjanya sederhana, hanya 
memanfaatkan sifat cahaya yang akan dipantulkan jika mengenai benda 
berwarna terang dan akan diserap jika mengenai benda berwarna gelap. 
Sebagai sumber cahaya kita gunakan LED (Light Emiting Diode)yang
 akan memancarkan cahaya merah. Dan untuk menangkap pantulan cahaya LED,
 kita gunakan photodiode. Jika sensor berada diatas garis hitam maka 
photodioda akan menerima sedikit sekali cahaya pantulan. Tetapi jika 
sensor berada diatas garis putih maka photodioda akan menerima banyak 
cahaya pantulan. Berikut adalah ilustrasinya :
 
  
Pada robot line follower, sensor robot yang dapat digunakan ada 3 jenis, yaitu LDR (Light Dependent Resistor), Photo Dioda atau Photo Transistor.
Baca Juga postingan saya mengenai Membuat Program Line Follower Dengan Fuzzy Logic 
Berikut program robot line follower :
#define s1  PINA.0                        //Pendekalrasian sensor 1 di pinA.0
#define s2  PINA.1                      //Pendekalrasian sensor 2 di pinA.1
#define s3  PINA.2                      //Pendekalrasian sensor 3 di pinA.2
#define s4  PINA.3                      //Pendekalrasian sensor 4 di pinA.3          
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=0xFF;
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=T State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 12000,000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x09;
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: Timer 2 Stopped
// Mode: Normal top=FFh
// 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;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;     
// Tambahkan kode program dibawah u/mengatur Kecepatan motor Dc(pwm=50)
OCR1AL=50;      
OCR1BL=50;
while (1)
      {    
/*posisi sensor
             s1     s2      s3      s4    
   kiri                                  kanan       
*/
if (s1==0&&s2==1&&s3==1&&s4==0)                 //Sensor 2 & 3 yang mendeteksi line(inp>=3 volt)
        {
        PORTC.0=1;
        PORTC.1=0; 
        PORTC.2=1;
        PORTC.3=0;                                                                        //Motor maju  semua
        }   
if(s1==1&&s2==1&&s3==0&&s4==0)                    //Sensor 1 & 2 yang mendeteksi line
        {
        PORTC.0=1;
        PORTC.1=1; 
        PORTC.2=1;
        PORTC.3=0;                                                                        //Motor 1 stop motor 2 maju
        }                        
if(s1==1&&s2==1&&s3==1&&s4==0)                  //Sensor 1, 2 & 3 yang mendeteksi line
        {
        PORTC.0=0;
        PORTC.1=1; 
        PORTC.2=1;
        PORTC.3=0;                                                                       //Motor 1 Mundur motor 2 maju  
        }
if(s1==1&&s2==0&&s3==0&&s4==0)                 //Hanya Sensor 1 yang mendeteksi line
        {
        PORTC.0=1;
        PORTC.1=1; 
        PORTC.2=1;
        PORTC.3=0;                                                                   //Motor 1 Stop motor 2 maju 
        }
if(s1==0&&s2==1&&s3==0&&s4==0)              //Hanya Sensor 2 yang mendeteksi line
        {
        PORTC.0=1;
        PORTC.1=1; 
        PORTC.2=1;
        PORTC.3=0;                                                                  //Motor 1 Stop motor 2 maju        
        }
if(s1==0&&s2==0&&s3==1&&s4==1)            //Sensor 3 & 4 yang mendeteksi line
        {
        PORTC.0=1;
        PORTC.1=0; 
        PORTC.2=1;
        PORTC.3=1;                                                                //Motor 1 maju motor 2 stop      
        }
if(s1==0&&s2==1&&s3==1&&s4==1)          //Sensor 2, 3 & 4 yang mendeteksi line
        {    
        PORTC.0=1;
        PORTC.1=0; 
        PORTC.2=0;
        PORTC.3=1;                                                               //Motor 1 maju motor 2 mundur      
        }                  
if (s1==0&&s2==0&&s3==0&&s4==1)       //Hanya Sensor 4 yang mendeteksi line
        {
        PORTC.0=1;
        PORTC.1=0; 
        PORTC.2=1;
        PORTC.3=1;                                                            //Motor 1 maju motor 2 stop  
        }   
if (s1==0&&s2==0&&s3==1&&s4==0)     //Hanya Sensor 3 yang mendeteksi line
        {
        PORTC.0=1;
        PORTC.1=0; 
        PORTC.2=1;
        PORTC.3=1;                                                          //Motor 1 maju motor 2 stop  
        }   
if(s1==0&&s2==0&&s3==0&&s4==0)     //Tidak ada sensor yang mendeteksi line
        { 
        PORTC.0=1;
        PORTC.1=0; 
        PORTC.2=1;
        PORTC.3=0;                                                         //Motor 1 maju motor 2 maju 
        }                  
if (s1==1&&s2==1&&s3==1&&s4==1)  //Semua sensor mendeteksi line
        {
        PORTC.0=1;
        PORTC.1=0; 
        PORTC.2=1;
        PORTC.3=0;                                                      //Motor 1 maju motor 2 maju 
        }
      };
}
 
 
 



BalasHapusAssalamualaikum bang
bisa buatin program untuk 8 sensor dan pake atmega16 gak bang ? tlong bang kirim ke email saya ya sumas.rendi@gmail.com