Friday, January 12, 2018

Line Follower dengan Atmega16

Robot Line Follower adalah sebuah robot yang dapat mengikuti garis pada suatu bidang datar. Robot Line Follower ada dua jenis yaitu robot line follower analog dan robot line follower digital, perbedaan yang terlihat jelas antara kedua jenis robot ini yaitu pada robot line follower (LF) analog tidak menggunakan program sedangkan robot LF digital dijalankan menggunakan program. 

mikrokontroler

Disini kita akan membahas tentang LF digital yang dijalankan menggunakan program. Dalam membuat line follower ada 3 bagian penting;

  1. Modul elektronik robot line follower terdiri dari rangkaian pengendali utama (main controller), rangkaian sensor, dan rangkaian driver.
  2. Modul Mekanikal bagian mekanikal dari robot line follower merupakan bagian penggerak dari robot line follower yang terdiri dari dinamo/motor, gear box dan roda.
  3. Modul Program/firmware merupakan salah satu bagian terpenting dari robot line follower yang menggunakan microkontroler. 
LF yang saya buat ini menggunakan input sensor photodioda, pengendali utama menggunakan atmega16 dan modul driver menggunakan IC L293D. 

berikut adalah shortcode yang saya gunakan:

#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;
       }
      }
}

SEKIAN DAN SELAMAT MENCOBA

Komentar spam dilarang
EmoticonEmoticon