Rabu, 20 Maret 2013

DESAIN PROTEUS & PROGRAM Code Vision AVR ROBOT LINE FOLLOWER DIGITAL RA04




Silahkan download file pdf berikut:
Robot autonomous line follower bolabot

Untuk yang membutuhkan simulasi Robot Line Follower Digital, silahkan download File berikut:

1. Desain Proteus dan Code Vision AVR Line Follower ATMega 16
2. Desain Proteus dan Code Vision AVR Line Follower ATMega 8

Line follower Robot (Robot Pengikut Garis) adalah robot yang dapat berjalan mengikuti sebuah lintasan, ada yang menyebutnya dengan Line Tracker, Line Tracer Robot dan sebagainya. Garis yang dimaksud adalah garis berwarna hitam diatas permukaan berwarna putih atau sebaliknya, ada juga lintasan dengan warna lain dengan permukaan yang kontras dengan warna garisnya. Ada juga garis yang tak terlihat yang digunakan sebagai lintasan robot, misalnya medan magnet.


Gambar 1. Ilustrasi robot line follower dengan posisi sensor di atas permukaan putih

Seperti layaknya manusia, bagaimana manusia dapat berjalan mengikuti jalan yang ada tanpa menabrak dan sebagainya, tentunya karena manusia memiliki “mata” sebagai penginderanya. Begitu juga robot line follower ini, dia memiliki sensor garis yang berfungsi seperti “mata” pada manusia. Sensor garis ini mendeteksi adanya garis atau tidak pada permukaan lintasan robot tersebut, dan informasi yang diterima sensor garis kemudian diteruskan ke prosesor untuk diolah sedemikian rupa dan akhirnya hasil informasi hasil olahannya akan diteruskan ke penggerak atau motor agar motor dapat menyesuaikan gerak tubuh robot sesuai garis yang dideteksinya.


Gambar 2. Diagram blok robot line follower


Untuk merangkai rangkaian elektroniknya kita perlu tahu dulu diagram blok sistem yang akan kita bangun, dengan demikian akan menjadi mudah mengerjakannya. Blok sistem yang akan kita bagun paling tidak tampak seperti gambar berikut. Sistemnya terdiri dari sensor garis, rangkaian komparator, sistem minimum AT Mega dan motor driver.

ROBOT LINE FOLLOWER DIGITAL MIKROKONTROLER ATMEGA 16

Desain berikut menggunakan mikrokontroler ATmega 16, LCD 2x 16, 2 buah sensor phototransistor

Skema Lengkap Line follower Digital IC Komparator

Pada skema lengkap robot line follower didesain dengan posisi sensor di atas permukaan putih. Dua buah sistem sensor di pasang pada pin B.0 dan B.1, sedangkan sistem actuator motor DC dipasang pada Port D.0 dan D.1 untuk motor kiri, D.2 dan D.3 untuk motor kanan. Prinsip kerja robot line follower berikut adalah saat sistem sensor berada di atas permukaan putih, akan ada pantulan cahaya dari LED yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR berkurang sehingga arus bergerak melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 393 menjadi minimum, oleh IC LM 393, arus di non-inverting sehingga output menuju pin mikrokontroler menjadi LOW (0). Sebaliknya, saat sistem sensor berada di atas garis hitam, tidak akan ada pantulan cahaya dari LED yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR sangat besar sehingga arus tidak akan melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 393 menjadi maksimum, oleh IC LM 393, arus di non-inverting sehingga output menuju pin mikrokontroler menjadi HIGH (1). Oleh mikrokontroler data logika pin tersebut kemudian diolah untuk mengerakan motor, motor akan bergerak jika kedua pin motor tersebut memiliki beda polaritas. Selengkapnya mengenai logika gerak robot dapat dilihat pada Tabel 1 dan 2.

Tabel 1. Kondisi Gerak Motor dan pengaruh Sensor
Kondisi
B.0 = 0
B.0 =1
B.1 = 0
Maju
Belok Kiri
B.1 = 1
Belok Kanan
Mati

Tabel 2. Kondisi Gerak Motor dan Kondisi Logika Tiap Pin Motor
Kondisi
D.0
D.1
D.2
D.3
Maju
0
1
0
1
Belok Kiri
1
0
0
1
Belok Kanan
0
1
1
0
Mati
1
1
1
1

Gambar 3. Skema lengkap robot line follower menggunakan AT Mega 16


PROGRAM ROBOT LINE FOLLOWER DIGITAL ATMEGA 16 MENGGUNAKAN CODE VISION AVR


/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : Robot Line follower
Version : I
Date    : 11/8/2012
Author  : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School
Comments: www. bolabot. com

Chip type                 : ATmega16
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/
#include <mega16.h>
# include <delay.h> //tambahan program untuk membuat waktu tunda

// Alphanumeric LCD Module functions
#include <alcd.h>

// Declare your global variables here

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=0x00;

// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x30;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
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: Timer2 Stopped
// Mode: Normal top=0xFF
// 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;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);

// Tambahan kode mendefinisikan input output
DDRB.0=0; // input sensor kiri
DDRB.1=0; // input sensor kanan
DDRD.0=1; // output motor kiri
DDRD.1=1; // output motor kiri
DDRD.2=1; // output motor kanan
DDRD.3=1; // output motor kanan
// Tambahan kode mendefinisikan kecepatan motor PWM
OCR1A=200;// kecepatan dapat diubah sesuai kebutuhan
OCR1B=200;// kecepatan dapat diubah sesuai kebutuhan
// Tambahan kode mendefinisikan kondisi awal
PORTB.0=1;   //sensor kiri
PORTB.1=1;   //sensor kanan
PORTD.0=0;
PORTD.1=0;
PORTD.2=0;
PORTD.3=0;
while (1)
      {
if (PINB.0==1 &  PINB.1==0)   //    Tambahan kode sensor kiri hitam, kanan putih, maka belok kiri
{ 
PORTD.0=1;
PORTD.1=0;
PORTD.2=0;
PORTD.3=1;
lcd_clear ();
lcd_gotoxy(0,0);
lcd_putsf("B0=1 B1=0");
lcd_gotoxy(0,1);
lcd_putsf("BELOK KIRI");
delay_ms(100);
}
else if (PINB.0==0 &  PINB.1==1)   //    Tambahan kode sensor kiri putih, kanan hitam, maka belok kanan
{ 
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("B0=0 B1=1");
lcd_gotoxy(0,1);
lcd_putsf("BELOK KANAN");
delay_ms(100);
}
else if (PINB.0==1 &  PINB.1==1)   //    Tambahan kode sensor kiri hitam, kanan hitam, maka mati
{ 
PORTD.0=0;
PORTD.1=0;
PORTD.2=0;
PORTD.3=0;
lcd_clear ();
lcd_gotoxy(0,0);
lcd_putsf("B0=1 B1=1");
lcd_gotoxy(0,1);
lcd_putsf("MATI");
delay_ms(100);
}
else      //    Tambahan kode sensor kiri putih, kanan putih, maka bergerak maju
{ 
PORTD.0=0;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("B0=0 B1=0");
lcd_gotoxy(0,1);
lcd_putsf("MAJU");
delay_ms(100);
}
      }
}


ROBOT LINE FOLLOWER DIGITAL SEDERHANA DENGAN ATMEGA 8

Jika desain diatas dibuat menggunakan mikrokontroler AT mega 8, maka berikut ini merupakan desain robot line follower digital menggunakan mikrokontroler ATmega 8, dan 2 buah sensor phototransistor yang lebih sederhana.

Gambar 4. Skema lengkap robot line follower menggunakan AT Mega 8

PROGRAM ROBOT LINE FOLLOWER DIGITAL ATMEGA 8 MENGGUNAKAN CODE VISION AVR

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Bolabot Line Follower Digital AT Mega 8
Version : I
Date    : 3/3/2013
Author  : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic Institute
Comments: Semangat!!


Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega8.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T 
PORTB=0x00;
DDRB=0x06;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D 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 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;
DDRD.5=1;   // ke motor
DDRD.6=1;   // ke motor
DDRD.7=1;   // ke motor
DDRB.0=1;   // ke motor

DDRC.4=0;    // input sensor
DDRC.3=0;    // input sensor

PORTD.5=1;
PORTD.6=1;
PORTD.7=1;
PORTB.0=1;

OCR1A=150;  // kecepatan motor dapat diatur sesuai kebutuhan
OCR1B=150;  // kecepatan motor dapat diatur sesuai kebutuhan
while (1)
      {
if (PINC.3==1 & PINC.4==0 )
{
PORTD.5=1;
PORTD.6=0;
PORTD.7=0;
PORTB.0=1;
}
else if (PINC.3==0 & PINC.4==1)
{
PORTD.5=0;
PORTD.6=1;
PORTD.7=1;
PORTB.0=0;
}
else
{
PORTD.5=1;
PORTD.6=0;
PORTD.7=1;
PORTB.0=0;
}

      }
}


Berikut adalah video robot line follower digital sederhana karya Profesor Bolabot menggunakan ATMega 8 dan 2 sensor cahaya Phototransistor


Selamat Mencoba!!!


Copyright 2013 @ Profesor Bolabot





Share:

12 komentar:

  1. bos itu script yg buat atmega 16 indikator lcd itu script udah jadi ya apa harus dimodifikasi lagi....

    BalasHapus
  2. om itu programnya kok pas dicompile eror. minta include lcdnya om.
    pake yg di folder hex bisa ya om?

    BalasHapus
  3. ommm o bisa tau sih kata kata program nyaa itu tuh belajar sendiri atau copas

    BalasHapus
  4. gan bisa tlong krimin ke email ane gan !!
    bonararagem@gmail.com
    simulasi n progrmnya robot line follower digital atmega 16!!thx

    BalasHapus
  5. terimaksi pak prof bolabot. akan saya coba menggunakan ATMEGA16

    BalasHapus
  6. maaf bisa kirim simulasi rangkaian dan list program ke kiszron@gmail.com ? soalnya simulasi rangkaian di blognya kurang jelas. terima kasih

    BalasHapus
  7. maaf bisa minta daftar alat yg di pake dproteusnya gk

    BalasHapus
  8. maaf bisa minta daftar alat yg di pake dproteusnya gk

    BalasHapus
  9. Kak terimakasih ilmunya sangat membanth

    BalasHapus
  10. kak bisa minta PROGRAMnya yang atmega 16 ngga? soalnya koding diatas dicoba error??

    BalasHapus
  11. terima kasih untuk programnya pak mada! saya jadi punya referensi untuk pembuatan LF tugas besar.

    BalasHapus