Latest Post

algoritm & Programming of Electrical Cases

| Friday 22 March 2013
Read more »


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



























algoritm & Programming of Electrical Cases

Posted by : dante99blogs on :Friday 22 March 2013 With 0comments
Next Prev
▲Top▲