Cara Membuat Robot Line Follower Microcontroller Tanpa LCD

Robot-ID.Com, Salam robotika.. apa kabarnya nih robolovers semua semoga selalu sehat dan menjalani rutinitas serta tugas kita dengan sebaik mungkin, kali ini saya +sudarmanto saputra  mau share tentang Cara Membuat Robot Line Follower Microcontroller Tanpa LCD.

Membuat robot line follower atau line tracer adalah pengalaman yang sangat berharga ketika saya membuat robot line follower untuk yang pertama kalinya, tentunya karena newbie atau pemula jadi saya mencari bahan atau tutorial yang tanpa LCD.

Mengapa tanpa LCD?
Dulu sekitar tahun 2010 saya memulai proyek ini proyek yang besar bagi saya karena saya masih belum punya pengalaman yang cukup terutama pemrograman dengan LCD 2X16 Character, pada waktu itu LCD seperti barang yg mewah saja karena harganya lumayan nyarinya pun cukup sulit harus ke glodok dulu baru dapet, tidak seperti sekarang serba online banyak yang menawarkan di grup facebook dengan harga murah serta model yang beragam.

Belajar pemrogramannya pun awalnya asembler dan untungnya sudah populer bahasa c itupun baru sedikit banget hanya bisa ngidupin led, ADC aja masih bingung, untungnya banyak bermunculan referensi tentang rangkaian maupun pemrograman dalam membuat robot line follower microcontroller di internet jadi pengembangannya pun bisa segera diwujudkan.

Dalam proses pembuatanya desain PCB-nya saya buat beberapa bagian misalnya bagian sensor saya buat sendiri dan masih menggunakan IC komparator LM324, kalo sekarang kita tinggal pake ADC ya nggak perlu repot nambah IC, tapi disini kita sebagai pemula mesti mencoba supaya kita tahu sistemnya, jika menggunakan IC LM324 keluarannya sudah digital jadi tinggal disambungkan ke port microcontroller saja, tetapi jika tidak menggunakan IC maka kita harus menggunakan ADC pada port A tentunya dengan program yang lumayan banyak.

Dalam gambar skema sensor masih menggunakan sensor IR dan LED, tapi jangan khawatir bisa juga diganti dengan photodioda dan Led super bright soalnya yang umum dipakai sekarang komponen itu, tapi jangan salah lho jika kita menggunakan sensor IR atau infrared maka sensor pada robot kita tidak tergantung dengan sinar UV yang ada pada lampu dan sinar matahari jadi robot kita akan tetap stabil walaupun diluar ruangan, jika kita menggunakan photodioda tanpa rangkaian filter maka robot kita akan rentan oleh gangguan cahaya, biasanya kita akali dengan menambahkan penutup atau busa tipis yang menutupi sensor agar cahaya dari luar dapat dihindari. 

Untuk minimum sistem saya masih menggunakan minimum sistem standar yang penting ada tombol resetnya bila perlu ditambah tombol untuk start, tapi kalo anda ingin membuatnya sekaligus dalam satu pcb tentunya lebih bagus kan sekarang mudah banget gambar layout pcb bisa dengan software diptrace, eagle, dan lainya, selanjutnya untuk driver motor saya menggunkan IC Driver L298 cukup lumayan untuk motor yang agak besar rpm-nya. 

Untuk rangkaian sensornya bisa dilihat dalam gambar dibawah ini, jangan lupa untuk membuat 8 sensor, cukup banget kalo kita gunakan 2 buah IC LM324.

Rangkaian Sensor LF
Berikut gambar skemanya minimum sistem menggunakan Atmega16 dan driver L298 :

Rangkaian Minimum Sistem dan Driver
Ini sekalian saya kasih source kode atau program robot line follower microcontroller dengan software AVR Studio bisa juga Code Vision AVR, tentunya akan lebih bagus dan mantap jika sedikit dipoles atau ditambah dengan LCD serta tombol supaya bisa jalan digaris atau arena yang berbeda-beda tapi ini juga sudah lumayan dan work di robot.

Source Code : Robot Line Follower Microcontroller Tanpa LCD

/*****************************************************
Project : Robot Line Follower Microcontroller Tanpa LCD
*****************************************************/

#include
#include
#ifdef debug
#include
#endif
#define FWD 0xAA
#define REV 0x55
#define R 0x22
#define L 0x88
#define CW 0x99
#define CCW 0x66
#define STOP 0x00
#define B 0xFF
#define RSPEED OCR1AL
#define LSPEED OCR1BL
#define SPEED0 255
#define SPEED1 0
#define SPEED2 0
#define SPEED3 0
#define MAX 3
#define HMAX 1
void move (unsigned char dir,unsigned char delay,unsigned char power);
unsigned char i,rdev,ldev,ip,delay,dir,power,dirl,history[MAX],hcount=0,rotpow;
#ifdef debug
unsigned char rep=0,prev=0;
#endif
void main(void)
{
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
Line Follower
Page 12 of 17
// 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=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=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 921.600 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0xA1;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0xFF;
OCR1BH=0x00;
OCR1BL=0xFF;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
Line Follower
Page 13 of 17
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
#ifdef debug
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 57600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x07;
#endif
// 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;
while (1){
#ifdef debug
if(rep<255 p="">rep++;
if(prev!=PINA) {
prev=PINA;
printf("%u\r",rep);
for(i=0;i<8 i="" p="">printf("%u\t",(prev>>i)&0x01);
rep=0;
}
#endif
if(PINA!=255){
rotpow=255;
ldev=rdev=0;
if(PINA.3==0)
rdev=1;
if(PINA.2==0)
rdev=2;
if(PINA.1==0)
rdev=3;
Line Follower
Page 14 of 17
if(PINA.0==0)
rdev=4;
if(PINA.4==0)
ldev=1;
if(PINA.5==0)
ldev=2;
if(PINA.6==0)
ldev=3;
if(PINA.7==0)
ldev=4;
if(rdev>ldev)
move(R,0,195+12*rdev);
if(rdevmove(L,0,195+12*ldev);
if(rdev==ldev)
move(FWD,0,200);
}
else {
for(i=0,dirl=0;iif(history[i]==L)
{dirl++;}
}
if(rotpow<160 rotpow="160;}</p">if(rotpow<255 p="" rotpow="">if(dirl>HMAX)
{move(CW,0,rotpow);}
else
{move(CCW,0,rotpow);}
}
};
}
void move (unsigned char dir,unsigned char delay,unsigned char power) {
PORTC=dir;
if(dir==L || dir==R) {
hcount=(hcount+1)%MAX;
history[hcount]=dir;
}
LSPEED=RSPEED=255;//power;
//delay_ms(delay);
}

0 Response to "Cara Membuat Robot Line Follower Microcontroller Tanpa LCD"