ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA PRAKTIKUM III Robot Line Follower Sederhana A. Tujuan 1. Mahasiswa dapat mengkombinasikan antara pengontrolan motor dengan PWM, dengan sensor proximity dengan ADC. 2. Mahasiswa dapat membuat program robot line follower sederhana. 3. Mahasiswa dapat mensimulasikan pada program Proteus, antara pengontrolan motor dengan PWM, dengan sensor proximity dengan ADC. 4. Mahasiswa mampu merangkai robot line follower sederhana. B. Teori Dasar Robot Line Follower adalah robot yang dapat bergerak mengikuti garis secara otomatis tanpa ada remot yang mengaturnya. Prinsip dasarnya, sama seperti manusia, mata digunakan untuk melihat, kaki/roda digunakan untuk berjalan, dan otak digunakan untuk berpikir. 3 Komponen utama pada setiap robot : mata, kaki, dan otak. Pada percobaan sebelumnya kita telah membuat program kontrol motor dengan PWM, lalu pembacaan sensor proximity dengan ADC. Pada praktikum ini, akan dikombinasikan kedua metode tersebut sehingga dapat menghasilkan robot line follower sederhana. C. Peralatan yang Dibutuhkan 1. Alat dan Bahan a. Sistem minimum Atmega 8535 b. Downloader USBAsp c. Sensor proximity (8 buah) d. Modul LCD e. Motor DC (2 buah) f. Driver motor L293D g. Kabel jumper secukupnya h. Kabel USB i. Catu Daya 2. Software a. CodeVision AVR b. Proteus ISIS c. Progisp 1.72
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA D. Gambar Rangkaian LCD1
RV9
LM016L
0%
RV8 0%
RV7 0%
RV6 0%
RV5 0%
RV4 0%
RV3 0%
0%
RV2
1k
1k
1k
U1
14 15 16 17 18 19 20 21
IN1 IN2 IN3 IN4 EN2 EN1
13 12 9
PB0/T0/XCK PB1/T1 PB2/AIN0/INT2 PB3/AIN1/OC0 PB4/SS PB5/MOSI PB6/MISO PB7/SCK PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/OC1B PD5/OC1A PD6/ICP1 PD7/OC2
40 39 38 37 36 35 34 33
PA0/ADC0 PA1/ADC1 PA2/ADC2 PA3/ADC3 PA4/ADC4 PA5/ADC5 PA6/ADC6 PA7/ADC7
1K
22 23 24 25 26 27 28 29
PC0/SCL PC1/SDA PC2 PC3 PC4 PC5 PC6/TOSC1 PC7/TOSC2
XTAL1 XTAL2 RESET
1 2 3
1 2 3 4 5 6 7 8
+5V
+12V
32 30
AREF AVCC
D0 D1 D2 D3 D4 D5 D6 D7
1k
7 8 9 10 11 12 13 14
1k
4 5 6
1k
VSS VDD VEE
1k
RS RW E
RV1 1k
16
8
U2
ATMEGA8535 IN1 IN2 EN1 EN2 IN3 IN4
D8
D7
D6
D5
D4
D3
D2
D1
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
R8
R7
R6
R5
R4
R3
R2
R1
330R
330R
330R
330R
330R
330R
330R
330R
2 7 1 9 10 15
IN1 IN2 EN1 EN2 IN3 IN4
VSS
VS OUT1 OUT2
3 6 +88.8
GND
OUT3 GND OUT4
11 14 L293D
+88.8
Gambar 3.1 Rangkaian robot line follower sederhana E. Langkah Kerja Adapun langkah kerja pada praktikum ini adalah sebagai berikut: 1. Merangkai peralatan sesuai dengan rangkaian percobaan 2. Menjalankan program Codevision AVR 3. Pilih menu File -> New dan Buat “Project” baru
Gambar 3.2. Window untuk membuat Project baru 4. Pilih tipe chip AVR “AT90,Attiny,ATmega,FPSLIC” karena mikrokontroler yang akan digunakan adalah ATmega8535.
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA
Gambar 3.3. Window untuk memilih tipe Chip 5. Pada window yang muncul, pilih Tab “Chip”. Konfigurasi jenis chip yang akan digunakan yaitu ATmega8535, dan Clock 12Mhz.
Gambar 3.4. Konfigurasi Chip pada CodevisionAVR 6. Pilih Tab “Ports”, lalu PORTD. Atur agar “Data Direction” menjadi output. Begitupun dengan PORTB diatur agar menjadi Output.
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA Gambar 3.5. Konfigurasi Port pada CodevisionAVR 7. Pilih Tab ”Timer”. Lalu pilih Timer1. Atur seperti pada gambar beikut.
Gambar 3.6. Konfigurasi Port pada CodevisionAVR 8. Pilih Tab “Alphanumeric LCD”, lalu ganti semua kode pada LCD Module AVR menjadi PORTC. Pada bagian “Characters/line” set menjadi “8”.
Gambar 3.7. Konfigurasi Port pada CodevisionAVR 9. Pilih Tab “ADC”, lalu centang ADC Enabled dan use 8 bit. Sesuiakan seperti gambar
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA
Gambar 3.8. Konfigurasi Port pada CodevisionAVR 10. Klik tombol “Generate program, save and exit” untuk menghasilkan dan menyimpan konfigurasi program. Simpan dengan nama Percobaan 2.
Gambar 3.9. Tombol untuk menyimpan project pada window CodeWizardAVR 11.
Pada file Percobaan 3.c , ketikkan listing program berikut ini: #include <mega8535.h> #include <delay.h> #include <stdio.h> #include <stdlib.h> #include
#define IN1 PORTD.0 #define IN2 PORTD.1 #define IN3 PORTD.2 #define IN4 PORTD.3 #define EN1 OCR1A #define EN2 OCR1B #asm .equ __lcd_port = 0x15; #endasm #define ADC_VREF_TYPE 0x20 unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); delay_us(10); ADCSRA|=0x40; while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } int P1,P2,P3,P4,P5,P6,P7,P8; unsigned char lcd[15]; void lcd_sensor(){
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA lcd_gotoxy(0,0); sprintf(lcd,"%X",P1); lcd_puts(lcd); lcd_gotoxy(3,0); sprintf(lcd,"%X",P2); lcd_puts(lcd); lcd_gotoxy(6,0); sprintf(lcd,"%X",P3); lcd_puts(lcd); lcd_gotoxy(9,0); sprintf(lcd,"%X",P4); lcd_puts(lcd); lcd_gotoxy(0,1); sprintf(lcd,"%X",P5); lcd_puts(lcd); lcd_gotoxy(3,1); sprintf(lcd,"%X",P6); lcd_puts(lcd); lcd_gotoxy(6,1); sprintf(lcd,"%X",P7); lcd_puts(lcd); lcd_gotoxy(9,1); sprintf(lcd,"%X",P8); lcd_puts(lcd); if (P1 >= 180){ PORTB.0 = 1; }else{ PORTB.0 = 0; } if (P2 >= 180){ PORTB.1 = 1; }else{ PORTB.1 = 0; } if (P3 >= 180){ PORTB.2 = 1; }else{ PORTB.2 = 0; } if (P4 >= 180){ PORTB.3 = 1; }else{ PORTB.3 = 0; } if (P5 >= 180){ PORTB.4 = 1; }else{ PORTB.4 = 0; } if (P6 >= 180){
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA PORTB.5 = 1; }else{ PORTB.5 = 0; } if (P7 >= 180){ PORTB.6 = 1; }else{ PORTB.6 = 0; } if (P8 >= 180){ PORTB.7 = 1; }else{ PORTB.7 = 0; } } void maju(){ IN1 = 1;IN2=0;IN3=1;IN4=0; EN1 = 100; EN2 = 100; } void manuver_kanan(){ IN1 = 1; IN2 = 0; IN3 = 0; IN4 = 1; EN1 = 100; EN2 = 100; } void manuver_kiri(){ IN1 = 0; IN2 = 1; IN3 = 1; IN4 = 0; EN1 = 100; EN2 = 100; } void belok_kanan(){ IN1 = 1; IN2 = 0; IN3 = 0; IN4 = 0; EN1 = 100; EN2 = 100; } void belok_kiri(){ IN1 = 0; IN2 = 0; IN3 = 1; IN4 = 0; EN1 = 100; EN2 = 100; } void idle(){ IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; EN1 = 100; EN2 = 100; } void main(void) { DDRB=0xFF; DDRD=0x3F; TCCR1A=0xA1; TCCR1B=0x0D; ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84; SFIOR&=0xEF; lcd_init(16); while (1) { P1 = read_adc(0);P2 = read_adc(1);P3 = read_adc(2);P4 = read_adc(3); P5 = read_adc(4);P6 = read_adc(5);P7 = read_adc(6);P8 = read_adc(7); lcd_clear(); lcd_sensor(); delay_ms(50); if((PORTB == 0b00000001)|(PORTB == 0b00000011)){ manuver_kanan(); EN1 = 200; EN2 = 200;
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA lcd_gotoxy(13,1); lcd_puts("->"); }else if((PORTB == 0b00000100)|(PORTB == 0b00000110)|(PORTB == 0b00000111)) { belok_kanan(); EN1 = 250; EN2 = 200; lcd_gotoxy(13,1); lcd_puts("->>"); }else if((PORTB == 0b00011000)|(PORTB == 0b00111000)|(PORTB == 0b00011100)) { maju(); EN1 = 250; EN2 = 250; lcd_gotoxy(13,1); lcd_puts("^"); }else if((PORTB == 0b00100000)|(PORTB == 0b01100000)|(PORTB == 0b11100000)) { belok_kiri(); EN1 = 200; EN2 = 250; lcd_gotoxy(13,1); lcd_puts("<<-"); }else if((PORTB == 0b10000000)|(PORTB == 0b11000000)){ manuver_kiri(); EN1 = 200; EN2 = 200; lcd_gotoxy(13,1); lcd_puts("<-"); }else { idle(); EN1 = 0; EN2 = 0; lcd_gotoxy(13,1); lcd_puts("-"); } } }
12. Setelah program selesai. Klik menu “Project”, lalu pilih “Build All”. Yang juga secara otomatis akan menghasilkan file hex dari program. File hex dapat ditemukan dalam folder hex
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA
Gambar 3.10. Menu untuk meng-compile program pada CodevisionAVR 13. Untuk simulasi buka program Proteus, lalu rangkai sesuai petunjuk percobaan. Klik kanan pada Atmega8535 lalu pilih Edit Properties.
Gambar 3.11. Mengubah properties pada Atmega8535 pada software Proteus 14. Pada bagian Program file ganti menjadi URL yang menunjuk file hex yang dihasilkan Codevision AVR. Klik Ok.
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA
Gambar 3.12. Bagian program file tempat mengisi URL file HEX 15.
Pilih menu Debug lalu klik “Start/Restart Debugging”
Gambar 3.13. Memulai simulasi dengan menu Debug -> Start 16. Perhatikan hasil program pada rangkaian Proteus 17. Untuk rilnya, rangkai ATmega8535 dengan LCD, motor DC, Driver motor L293D, dan sensor proximity. 18. Buka program ProgISP. Lalu hubungkan USBASp ke komputer melalui kabel USB. Pada ProgISP, ikon “PRG ISP” menandakan bahwa USBAsp siap digunakan.
Gambar 3.14. Notifikasi bahwa USBAsp siap dipakai 19.
Atur value Fusebit menjadi 0xC9EF
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA
Gambar 3.15. Pengaturan Fusebit pada ProgISP 20. Setelah mengatur Fusebit, pilih menu File -> Load Flash. Untuk meload file hex yang dihasilkan dari program CodeVisionAVR.
Gambar 3.16. Menu untuk memuat file HEX pada ProgISP 21. Setelah file di load, maka tekan tombol “Auto” untuk mendownload program ke Sistem minimum. 22. Setelah didownload, hubungkan USBAsp ke Sistem minimum Atmega8535 dengan input tegangan dari catudaya. 23. Amati pergerakan motor yang harus sesuai program yang telah dibuat serta nilai pada LCD jika sensor proximity diarahkan ke keadaan gelap (hitam) maupun terang (putih).
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA F. Diagram Alir (Flowchart)
ROBOTIKA 2 ROBOT LINE FOLLOWER SEDERHANA Gambar 3.17. Flowchart program
G. Hasil Praktikum a. Rangkaian pada Proteus RV8
LCD1
RV9
LM016L
0%
0%
RV7 0%
RV6 100%
RV5 100%
RV4 0%
RV3 0%
0%
RV2
1k
1k
1k
14 15 16 17 18 19 20 21
IN1 IN2 IN3 IN4 EN2 EN1
13 12 9
PB0/T0/XCK PB1/T1 PB2/AIN0/INT2 PB3/AIN1/OC0 PB4/SS PB5/MOSI PB6/MISO PB7/SCK PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/OC1B PD5/OC1A PD6/ICP1 PD7/OC2
40 39 38 37 36 35 34 33
PA0/ADC0 PA1/ADC1 PA2/ADC2 PA3/ADC3 PA4/ADC4 PA5/ADC5 PA6/ADC6 PA7/ADC7
1K
22 23 24 25 26 27 28 29
PC0/SCL PC1/SDA PC2 PC3 PC4 PC5 PC6/TOSC1 PC7/TOSC2
XTAL1 XTAL2 RESET
1 2 3
1 2 3 4 5 6 7 8
+5V
+12V
32 30
AREF AVCC
D0 D1 D2 D3 D4 D5 D6 D7
1k
7 8 9 10 11 12 13 14
1k
4 5 6
1k
VSS VDD VEE
1k
RS RW E
RV1 1k
U1
16
8
U2
ATMEGA8535 IN1 IN2 EN1 EN2 IN3 IN4
D8
D7
D6
D5
D4
D3
D2
D1
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
LED-BLUE
R8
R7
R6
R5
R4
R3
R2
R1
330R
330R
330R
330R
330R
330R
330R
330R
2 7 1 9 10 15
IN1 IN2 EN1 EN2 IN3 IN4
VSS
VS OUT1 OUT2
3 6 +180
GND
OUT3 GND OUT4
11 14 L293D
+180
Gambar 3.18. Rangkaian hasil praktikum b. Fisik rangkaian Gambar 3.19. Fisik rangkaian percobaan H. Analisa Percobaan Berdasarkan percobaan yang telah dilakukan, ketika value hasil pembacaan pada PORTB yang mewakili kondisi sensor Proximity, robot dapat mengambil tindakan sesuai dengan instruksi program yang telah diberikan. Tanggapan yang diberikan kurang cepat, hal ini ditimbulkan oleh proses konversi sinyal dari sensor proximity, ke LCD, dan ke driver Motor L293D. I. Kesimpulan Dengan mengkombinasikan antara metode pengontrolan motor DC dengan PWM, dengan metode pembacaan sensor Proximity dengan ADC, maka dapat dibuat sebuah robot line follower sederhana yang memiliki kemampuan untuk mengikuti garis. Pembacaan garis dapat ditingkatkan dengan menggunakan metode PID, yang menghasilkan program robot line follower yang lebih baik dan efisien.