Membuat Robot Line Follower itu Mudah
– April 23, 2011Posted in: Mikrokontroller, Rangkaian Elektronika
Robot line follower ada dua kategori,
yaitu robot line follower yang menggunakan program dan robot line
follower yang tidak menggunakan program atau sering disebut robot
analog. Robot analog paling sering digunakan untuk keperluan praktek sederhana karena biaya yang dikeluarkan tidak terlalu banyak.
Anda bisa memesan kit Robot Line
Follower pada admin blog ini. Kit seharga Rp.200.000 untuk robot line
follower analog ini sudah dilengkapi dengan gear box, sensor, battery
holder, roda, dan body sehingga dalam perakitan yang sudah disertakan
skema anda tidak usah bingung untuk merakitnya dari nol hingga jadi.
Dibawah ini merupakan robot line follower yang menggunakan program buatan admin aput.
Sensor proximity bisa kita buat sendiri.
Prinsip kerjanya sederhana, hanya memanfaatkan sifat cahaya yang akan
dipantulkan jika mengenai benda berwarna terang dan akan diserap jika
mengenai benda berwarna gelap. Jika sensor berada diatas garis hitam
maka photodioda akan menerima sedikit sekali cahaya pantulan. Tetapi
jika sensor berada diatas garis putih maka photodioda akan menerima
banyak cahaya pantulan. Berikut adalah ilustrasinya :
dalam robot line follower yang saya
rancang memakai 6 pasang sensor infra merah, itu sudah cukup untuk
membaca garis antara pertigaan maupun perempatan. Selanjutnya untuk
dapat mengubah nilai keluaran sensor yang masih analog ke digital
diperlukan op amp LM324 yang berisi 4 buah built in op amp yang lansung
masuk ke microkontroler sebagai input sensor.
dengan menggunakan PCB fiber hasilnya
pun cukup baik dan cukup mudah untuk memotongnya walaupun sedikit dalam
merogoh kocek. untuk kontruksi robot yang saya gunakan berupa acrylic
3mm dengan bentuk silinder berdiameter 14cm yang dipotong menggunakan
sistem laser sehingga hasilnya cukup mengesankan. motor dc yang dipakai
menggunakan motor DC gearbox 12v dengan perbandingan 1:45 185rpm
dengan torsi 4 kg, dipasang sejajar terhadap tumpuan terluar dari body
acrylic untuk mendapatkan keseimbangan yang baik.
karena banyaknya permintaan schematic
lengkap dari robot line follower ini maka penulis mencoba untuk
mengupdate artikel ini dengan menambahkan beberapa rangkain yang
mendukung pembuatan robot ini. berikut ii merupakan gambar schematic
sensor dari line follower dan dan penguat op-amp 324.
- Schematic Sensor dan Penguat
gambar di atas merupakan schematic
sensor array yang berjumlah 6 pasang sensor (photodiode dan infra red)
dimana pada tiap kaki mendapat resitor bernilai 330 ohm. pada kaki
photodiode dari sensor yang mendapatkan resitor adalah kaki katoda (-)
dalam gambar diberi tanda RD1 sampai RD6 sedangkan pada kaki infrared
juga diberikan tahanan sebesar 330 ohm pada kaki anoda (+) yang dimulai
dari R1 sampai R6. selanjutnya kita akan membahas penguat sensor (LM324)
gambar scematiknya ditunjukkan seperti gambar di bawah ini :
gambar diatas merupakan konfigurasi dari
sensor. Agar dapat dibaca oleh mikrokontroler, maka tegangan sensor
harus disesuaikan dengan level tegangan TTL yaitu 0 – 1 volt untuk
logika 0 dan 3 – 5 volt untuk logika 1. Hal ini bisa dilakukan dengan
memasang operational amplifier yang difungsikan sebagai
komparator. Output dari photodiode yang masuk ke input inverting
op-amp akan dibandingkan dengan tegangan tertentu dari variable
resistor VR. Tegangan dari VR inilah yang kita atur agar
sensor proximity dapat menyesuaikan dengan kondisi cahaya
ruangan. dan berikut ini merupakan gamabr penguat (op-amp) dari sensor
yang sudah menjadi scematicnya.
karena ic op-amp L324 memilki 4 buah
opm-amp maka kita membutuhkan 2 buah ic L324 karena jumlah sensor adalah
6 buah. tampak seperti gambar diatas bagaimana konfigurasi penguat L324
saling berhubungan. selanjutnya gambar berikut ini merupakan gambar
lay-out dari konfigurasi sensor :
- Driver Motor
Untuk menggerakkan dua buah motor dc,
digunakan IC H-Bridge Motor Driver L298, yang mampu memberikan arus
maksimum sebesar 1A ke tiap motor. Input L298 ada 6 jalur, terdiri dari
input data arah pergerakan motor dan input untuk PWM (Pulse Width
Modulation). Untuk mengatur kecepatan motor, pada input PWM inilah
akan diberikan lebar pulsa yang bervariasi dari mikrokontroler.
- Minimum System
Sebagai ”otak” robot digunakan
mikrokontroler AVR jenis ATmega8535 yang akan membaca data dari sensor
proximity, mengolahnya, kemudian memutuskan arah pergerakan robot. Pada
robot line track ini, keluaran sensor proximity dihubungkan ke PortD.0
dan PortD.5 pada mikrokontroler. Sedangkan driver motor dihubungkan ke
PortC.0 s/d PortC.5 seperti terlihat pada gambar berikut :
- Program
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
| Chip type : ATmega8535LProgram type : ApplicationClock frequency : 11,059200 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 128*********************************************/#define SkiXX PIND.0#define SkiX PIND.1#define Ski PIND.2#define Ska PIND.3#define SkaX PIND.4#define SkaXX PIND.5#define EnKi PORTC.4#define dirA_Ki PORTC.0#define dirB_Ki PORTC.1#define EnKa PORTC.5#define dirC_Ka PORTC.2#define dirD_Ka PORTC.3#include <mega8535.h>#include <delay.h>bit x;unsigned char xcount,lpwm,rpwm;// Timer 0 overflow interrupt service routineinterrupt [TIM0_OVF] void timer0_ovf_isr(void){// Place your code here xcount++;if(xcount<=lpwm)EnKi=1;else EnKi=0; if(xcount<=rpwm)EnKa=1; else EnKa=0;TCNT0=0xFF; // Timer0 Value Menentukan periode pulsa PWM}void maju(){ dirA_Ki=1;dirB_Ki=0; dirC_Ka=1;dirD_Ka=0;}void belok_kiri(){unsigned int i;lpwm=50; rpwm=50;delay_ms(60); // dimajukan sedikit dirA_Ki=0;dirB_Ki=1;dirC_Ka=1;dirD_Ka=0;for(i=0;i<=1000;i++) while (!SkiXX ||!SkiX) {};for(i=0;i<=1000;i++) while ( SkiXX || SkiX) {};lpwm=0; rpwm=0;}void belok_kanan(){unsigned int i;lpwm=50; rpwm=50;delay_ms(60); // dimajukan sedikit dirA_Ki=1;dirB_Ki=0;dirC_Ka=0;dirD_Ka=1;for(i=0;i<=1000;i++) while (!SkaXX ||!SkaX) {};for(i=0;i<=1000;i++) while ( SkaXX || SkaX) {};lpwm=0; rpwm=0;}// Declare your global variables hereunsigned char sensor;void scan_rule1(){ maju(); sensor=PIND; sensor&=0b00111111; switch(sensor){ case 0b00111110: rpwm=0; lpwm=200; x=1; break; case 0b00111100: rpwm=50; lpwm=200; x=1; break; case 0b00111101: rpwm=75; lpwm=200; x=1; break; case 0b00111001: rpwm=100; lpwm=200; x=1; break; case 0b00111011: rpwm=150; lpwm=200; x=1; break; case 0b00110011: rpwm=200; lpwm=200; break; case 0b00110111: rpwm=200; lpwm=150; x=0; break; case 0b00100111: rpwm=200; lpwm=100; x=0; break; case 0b00101111: rpwm=200; lpwm=75; x=0; break; case 0b00001111: rpwm=200; lpwm=50; x=0; break; case 0b00011111: rpwm=200; lpwm=0; x=0; break; case 0b00111111: break;if(x) {lpwm=50; rpwm=0; break;}else {lpwm=0; rpwm=50; break;}}}void scan_count(unsigned char count){ unsigned int i;unsigned char xx=0;while(xx<count){ for(i=0;i<1000;i++) while((sensor & 0b00011110)!=0b00000000) scan_rule1(); for(i=0;i<1000;i++) while((sensor & 0b00011110)==0b00000000) scan_rule1(); xx++;}}void main(void){// Declare your local variables here// Input/Output Ports initialization// Port A initialization// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTA=0x00;DDRA=0x00;// Port B initialization// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTB=0x00;DDRB=0x00;// Port C initialization// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0PORTC=0x00; DDRC=0xFF;// Port D initialization// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In// State0=P State1=P State2=P State3=P State4=P State5=P State6=P State7=P PORTD=0xFF;DDRD=0x00;// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: 10,800 kHz// Mode: Normal top=FFh// OC0 output: DisconnectedTCCR0=0x05; TCNT0=0x00; OCR0=0x00;// Timer/Counter 1 initialization// Clock source: System Clock// Clock value: Timer 1 Stopped// Mode: Normal top=FFFFh// OC1A output: Discon.// OC1B output: Discon.// Noise Canceler: Off// Input Capture on Falling EdgeTCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;// Timer/Counter 2 initialization// Clock source: System Clock// Clock value: Timer 2 Stopped// Mode: Normal top=FFh// OC2 output: DisconnectedASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; |
- Video

+ comments + 3 comments
Gan kalau mau beli yang jadi bisa ga
masih bisa messan ?
wahhh bolehh nichh
thank's dachhh
Post a Comment
Silahkan Tinggalkan Pesan Anda