My Story.

Line Follower dengan Menggunakan ATMEGA16













Rangkaian Simulasi Line Follower pada ATMEGA16




1. Dasar Teori Line Follower [kembali]

       Line follower Robot atau bisa disebut juga sebagai line tracer robot adalah robot yang dapat mengikuti garis atau jalur. Robot line follower didesain dengan posisi sensor di atas permukaan putih. 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 maka arus akan bergerak melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 393 menjadi minimum, oleh IC LM 293D, 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 293D menjadi maksimum, oleh IC LM 293D, 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.   

2. Rangkaian Line Follower [kembali]

Berikut screnshoot rangkaian Line Follower
     
Gambar 1. Screnshoot Rangkaian Line Follower


Komponen yang diperlukan dalam rangkaian protheus :
  • Sensor cahaya LDR
  • LED
  • Non inverting amplifier
  • ATMEGA16
  • MOTOR DC
  • LCD
  • L293D
  • Resistor
  • Potensiometer
  • Crystal dan Push button untuk sistem reset dan Xtal
  • Kapasitor

3. Penjelasan Mikrokontroller Atmega16 [kembali]

Secara garis besar mikrokontroler ATMega16 terdiri dari :

1.  Arsitektur RISC dengan throughput mencapai 16 MIPS pada frekuensi 16Mhz.
2.  Memiliki kapasitas Flash memori 16Kbyte, EEPROM 512 Byte, dan SRAM 1Kbyte
3.  Saluran I/O 32 buah, yaitu Port A, Port B, Port C, dan Port D.
4.  CPU yang terdiri dari 32 buah register.
5.  User interupsi internal dan eksternal
6.  Port antarmuka SPI dan Port USART sebagai komunikasi serial
7.  Fitur Peripheral

Berikut konfigurasi pin mikrokontroler AVR ATMega16:

 Konfigurasi pin Mikrokontroler AVR ATMega16
 
Gambar 2. Konfigurasi pin ATMEGA16


Deskripsi Mikrokontroler ATMega16 :
 
a. VCC
 - Sumber tegangan
 
b. GND (Ground)
 - Ground

c. Port A (PA0 – PA7)
Merupakan pin input dan output dua arah dan pin masukan ADC

d. Port B (PB7 – PB0)
Merupakan pin input atau output dua arah dan pin masukan fungsi khusus, seperti dapat dlihat pada tabel berikut :


Port
Alternate Function
PB7
SCK (SPI Bus Serial Clock)
PB6
MISO (SPI Bus Master Input/Slave Output)
PB5
MOSI (SPI Bus Master Output/Slave Input)
PB4
SS (SPI Slave Select Input)
PB3
AIN1 (Analog Comparator Negative Input)
OCO (Timer/Counter0 Output Compare Match Output)
PB2
AIN0 (Analog Comparator Positive Input)
INT2 (External Interrupt 2 Input)
PB1
T1 (Timer/Counter1 External Counter Input)
PB0
T0 (Timer/Counter External Counter Input)
XCK (USART External Clock Input/Output)

Tabel 1. Fungsi khusus port B


e.  Port C (PC0 – PC7)
  Merupakan pin input atau output dua arah

Port
Alternate Function
PC7
TOSC2 (Timer Oscillator Pin 2)
PC6
TOSC1 (Timer Oscillator Pin 1)
PC5
TD1 (JTAG Test Data In)
PC4
TD0 (JTAG Test Data Out)
PC3
TMS (JTAG Test Mode Select)
PC2
TCK (JTAG Test Clock)
PC1
SDA (Two-wire Serial Bus Data Input/Output Line)
PC0
SCL (Two-wire Serial Bus Clock Line)
Tabel 2. Fungsi khusus port C
 
f.   Port D (PD0 – PD7
        Merupakan pin input/output dua arah dan pin fungsi khusus, selengkapnya dapat dilihat pada tabel dibawah :


Port
Alternate Function
PD7
OC2 (Timer / Counter2 Output Compare Match Output)
PD6
ICP (Timer/Counter1 Input Capture Pin)
PD5
OCIA (Timer/Counter1 Output Compare A Match Output)
PD4
OCIB (Timer/Counter1 Output Compare B Match Output)
PD3
INT1 (External Interrupt 1 Input)
PD2
INT0 (External Interrupt 0 Input)
PD1
TXD (USART Output Pin)
PD0
RXD (USART Input Pin)
 Tabel 3. Fungsi khusus port D
 
g. RESET
Merupakan pin yang digunakan untuk me-reset mikrokontroler

h. XTAL1 dan XTAL2
Merupakan pin masukan clock eksternal

i. AVCC
Merupakan pin masukan untuk tegangan ADC

j. AREF
Merupakan pin masukan tegangan referensi ADC


 4. Penjelasan Sistem Sensor [kembali]
   
    Sensor yang digunakan terdiri dari photo dioda. Sensor ini nilai resistansinya akan berkurang bila terkena cahaya dan bekerja pada kondisi riverse bias. Untuk sensor cahayanya digunakan LED Superbright, komponen ini mempunyai cahaya yang sangat terang, sehingga cukup untuk mensuplai cahaya ke photo dioda.
  


Gambar 3. Skema Sensor
  
Gambar 4. Skema Sensor 

Jika photo dioda tidak terkena cahaya, maka nilai resistansinya akan besar atau dapat diasumsikan menjadi tak hingga. Sehingga arus yang mengalir pada komparator sangat kecil atau dapat diasumsikan berlogika 0. Jika photo dioda terkena cahaya, maka photo dioda akan bersifat sebagai sumber tegangan dan nilai resistansinya akan menjadi kecil, sehingga akan ada arus yang mengalir ke komparator atau berlogika 1.

 5. Penjelasan LS293D [kembali]

Digunakan untuk mengatur kecepatan dan arah putar sebuah motor DC

                                                               Gambar 5. Screnshoot LS293D 

       Pin EN1 merupakan sebuah pin yang difungsikan untuk meng-enable-kan motor DC (ON/OFF motor DC), oleh karena itu pin EN1 dapat dihubungkan dengan output PWM dari mikrokontroler. Sedangkan pin IN1 dan IN2 digunakan sebagai input logika untuk mengatur putaran motor DC dan dapat juga digunakan untuk memberhentikan motor DC secara cepat (fast motor stop). Jika diinginkan motor berputar searah jarum jam, maka pin mikrokontroler PD6 (IN1) diberi logika low dan PD7 (IN2) diberi logika high. Sedangkan EN1 dihubungkan dengan output PWM mikrokontroler (PD4).
    Dari gambar diatas, untuk pengaturan arah dan kecepatan 2 buah motor DC maka hanya tinggal menambahkan sebuah motor pada output3 dan output4. Pin EN2 merupakan sebuah pin yang difungsikan untuk meng-enable-kan motor DC 2 (ON/OFF motor DC), oleh karena itu pin EN2 dapat dihubungkan dengan output PWM dari mikrokontroler. Sedangkan pin IN3 dan IN4 digunakan sebagai input logika untuk mengatur putaran motor DC 2 dan dapat juga digunakan untuk memberhentikan motor DC 2 secara cepat (fast motor stop)



 6. Penjelasan LCD [kembali]

  LCD (Liquid Cristal Display) berfungsi sebagai penampil data baik dalam bentuk karakter, huruf, angka ataupun grafik.


                                                    Gambar 6. Screnshoot LCD

 Fitur LCD 16 x 2  

Adapun fitur yang disajikan dalam LCD ini adalah :



  • Terdiri dari 16 karakter dan 2 baris. 
  • Mempunyai 192 karakter tersimpan.
  • Terdapat karakter generator terprogram. 
  • Dapat dialamati dengan mode 4-bit dan 8-bit. 
  • Dilengkapi dengan back light.



Spesifikasi Kaki LCD 16 x 2


Pin
Deskripsi
1
Ground
2
VCC
3
Pengatur Kontras
4
RS/Register Select
5
R/W, Read/Write LCD Registers
6
EN/Enable
7-14
Data I/O Pins
15
VCC
16
Ground
                                                 Tabel 4. Spesifikasi LCD 16x2

Register control yang terdapat dalam suatu LCD diantaranya adalah.
  • Register perintah yaitu register yang berisi perintah-perintah dari mikrokontroler ke panel LCD (Liquid Cristal Display) pada saat proses penulisan data atau tempat status dari panel LCD (Liquid Cristal Display) dapat dibaca pada saat pembacaan data.
  • Register data yaitu register untuk menuliskan atau membaca data dari atau keDDRAM. Penulisan data pada register akan menempatkan data tersebut keDDRAM sesuai dengan alamat yang telah diatur sebelumnya.
Pin, kaki atau jalur input dan kontrol dalam suatu LCD (Liquid Cristal Display) diantaranya adalah :
  • Pin data adalah jalur untuk memberikan data karakter yang ingin ditampilkan menggunakan LCD (Liquid Cristal Display) dapat dihubungkan dengan bus data dari rangkaian lain seperti mikrokontroler dengan lebar data 8 bit.
  • Pin RS (Register Select) berfungsi sebagai indikator atau yang menentukan jenis data yang masuk, apakah data atau perintah. Logika low menunjukan yang masuk adalah perintah, sedangkan logika high menunjukan data.
  • Pin R/W (Read Write) berfungsi sebagai instruksi pada modul jika low tulis data, sedangkan high baca data.
  • Pin E (Enable) digunakan untuk memegang data baik masuk atau keluar.
  • Pin VLCD berfungsi mengatur kecerahan tampilan (kontras) dimana pin ini dihubungkan dengan trimpot 5 Kohm, jika tidak digunakan dihubungkan ke ground, sedangkan tegangan catu daya ke LCD sebesar 5 Volt.

 7. Listing Program [kembali]

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

Project : Microprocessor ATMEGA16
Version :
Date    : 15/07/2017
Author  : Hafiz
Company :
Comments:


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> // library atmega 16
#include <delay.h> // Fungsi waktu

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

// Declare your global variables here

void main(void) //menu utama
{
// 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; //Diberikan nilai 00, atau logika low, tidak aktif
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; // Diberikan nilai 00, atau logika low, tidak aktif
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; // Diberikan nilai 00, atau logiak low, tidak aktif
DDRC=0x00;

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


// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;  // Timer/Counter 0 tidak aktif
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; // inisialisasi Timer/Counter 1
TCCR1B=0x0D; // Inisialisasi timer/Counter 2

// 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); // Inisialisasi lcd, 16 karakter
//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

// Kecepatan motor PWM
OCR1A=200; // Kecepatan motor 1
OCR1B=200; //Kecepatan motor 2

while (1)
      {
      // Place your code here
      if(PINB.0==1 & PINB.1==0) //Sensor kiri hitam, kanan putih, robot belok kiri
      {
       PORTD.0=1; // Berarti untuk Port D.0 diberikan nilai 1, pada motor kiri
       PORTD.1=0; // PortD.1 diberikan nilai 0, pada motor kiri
       PORTD.2=0; //PORTD.2 diberikan nilai 0, pada motor kanan
       PORTD.3=1; //PORTD.3 diberikan nilai 1 pada motor kanan
       lcd_clear(); //perintah untuk meng-clearkan layar lcd
       lcd_gotoxy(0,0); //inisialisasi kolom 0 baris 0
       lcd_putsf("B0=1 & B1=0"); //Pada LCD, akan dimunculkan B0=1 & B1=0
       lcd_gotoxy(0,1); //inisialisasi kolom o, baris 1
       lcd_putsf("BELOK KIRI"); //Pada LCD, akan dimunculkan belok kiri

       delay_ms(100); // delay selama 100 mili sekon
       }
       else if (PINB.0==0 & PINB.1==1) // Sensor kanan hitam, kiri putih, robot belok kanan
        {
       PORTD.0=0; // Port D.0 diberikan nilai 0 atau low, motor kiri
       PORTD.1=1; // PortD.1 diberikan nilai 1 atau high, motor kiri
       PORTD.2=1; // PortD.2 diberikan nilai 1 atau high, motor kanan
       PORTD.3=0; // PortD.3 diberikan nilai 0 atau low, motor kanan
       lcd_clear(); // menclear kan LCD
       lcd_gotoxy(0,0);// inisialisasi kolom o baris 0
       lcd_putsf("B0=0 & B1=1"); // Pada Lcd, akan dimnculkan B0=0 & B1=1
       lcd_gotoxy(0,1); // inisialisasi kolom 0 baris 1
       lcd_putsf("BELOK KANAN"); // Pada Lcd, akan dimunculkan Belok kanan
       delay_ms(100); // delay atau waktu tunda selama 100 mili sekon
       }
       else if (PINB.0==1 & PINB.1==1) // Jika kedua sensor sama sama membaca hitam, maka robot akan mati
      {
       PORTD.0=0; // Pada PortD.0 diberikan logika low. motor kiri
       PORTD.1=0; // Pada PortD.1 diberikan logika high, motor kiri
       PORTD.2=0; // Pada PortD.2 diberikan logika low , motor kanan
       PORTD.3=0; // Pada PortD.3 diberikan logika low, motor kanan
       lcd_clear(); // Perintah untuk mengclearkan lcd
       lcd_gotoxy(0,0); // Inisialisasi kolom 0 baris 0
       lcd_putsf("B0=1 & B1=1"); // Pada LCD, akan ditampilkan B0=1 & B1=1
       lcd_gotoxy(0,1); // Inisialisasi kolom 0 baris 1
       lcd_putsf("Berhenti"); // Pada Lcd, akan ditampilkan kata-kata berhenti
       delay_ms(100); // Waktu tunda selama 100 ms
       }
       else //Jika Sensor sama sama mebaca warna putih, maka bergerak maju
        {
       PORTD.0=0; // Pada PortD.0 diberikan logika low, motor kiri
       PORTD.1=1; // Pada PortD.1 diberikan logika high, motor kiri
       PORTD.2=0; // Pada PortD.2 diberikan logika low, motor kanan
       PORTD.3=1; // Pada PortD.3 diberikan logika high, motor kanan
       lcd_clear(); // Perintah untuk mengclearkan LCD
       lcd_gotoxy(0,0); // Inisialisasi kolom 0 baris 0 pada Lcd
       lcd_putsf("B0=0 & B1=0"); // Pada Lcd, akan ditampilkan B0=0 & B1=0
       lcd_gotoxy(0,1); // Inisialisasi kolom 0 baris 1 pada Lcd
       lcd_putsf("MAJU"); // Pada LCD, akan dtampilkan Maju
       delay_ms(100); // Waktu tunda selama 100 ms
       }
        }
}            
        
 8. Video [kembali]







Haze Haze Author

About

Popular Posts

Find Us

Contact Us

Nama

Email *

Pesan *