3.6 Perancangan Program
Robot ini dirancang untuk mendeteksi garis yang menjadi lintasannya. Diagram alir dari program yang akan dibuat adalah:
Belok Kanan Cek Sensor kanan
start
Maju
Cek Sensor kiri Belok Kiri
1
1 1
1
Gambar 3.6 Diagram Alir dari Program
Program diawali dengan pengecekan logika pada sensor garis yang ada pada sebelah kanan robot. Jika sensor ini menerima logika 0 yang berarti sensor berada di atas
garis putih, maka mikrokontroler segera memengirimkan logika agar jembatan H membelokkan robot ke kanan sehingga garis dapat dihindari.
Universitas Sumatera Utara
Namun ketika sensor kanan tersebut menerima logika 1 yang berarti sensor berada di atas lantai, maka mikrokontroler melanjutkan program untuk memeriksa logika yang
ada pada sensor kiri robot. Ketika logika yang dihasilkan oleh sensor ini adalah 0, yang berarti sensor sedang berada di atas garis putih, maka mikrokontroler segera mengirimkan
logika pada jembatan H agar segera membelokkan robot ke kiri. Ketika sensor kiri bernilai berlogika 1, maka robot akan tetap berjalan maju.
Program robot pengikut garis:
motor_kanan1 bit p0.5 ; motor kanan1 pada alamat bit p0.5
motor_kanan2 bit p0.4 ; motor kanan2 pada alamat bit p0.4
motor_kiri1 bit p0.6 ; motor kiri1 pada alamat bit p0.6
motor_kiri2 bit p0.7 ; motor kiri2 pada alamat bit p0.7
sensor_kanan bit p2.0 ; sensor kanan pada alamat bit p2.0
sensor_kiri bit p2.1 ; sensor kiri pada alamat bit p2.1
org 0h ;program dimulai dari 0000h
cek_kanan: ;program utama
acall maju ;memanggil rutin maju
jb sensor_kanan,cek_kiri ;melompat ke bit p2.0 pada
logika high 1 acall kanan
;memanggil rutin kanan sjmp cek_kanan
;melompat ke baris perintah label cek kanan
cek_kiri: ; program utama
jb sensor_kiri,cek_kanan ; melompat ke bit p2.1
pada logika high 1 acall kiri
; memanggil rutin kiri sjmp cek_kiri
;melompat ke baris perintah label cek kiri
maju: ; perintah maju
setb motor_kanan1 ; aktifkan logika high 1
pada it p0.5 clr motor_kanan2
; aktifkan logika low pada bit p0.4
Universitas Sumatera Utara
setb motor_kiri1 ; aktifkan logika high 1
pada bit p0.6 clr motor_kiri2
; aktifkan logika low 0 pada bit p0.7
mov r7,65 ; isikan 65 pada register 7
R7 djnz r7,
; instruksi yang akan
mengurangi 1 nilai register 7
dan akan melompat ke memori program maju jika
setelah pengurangan belum dihasilkan 0
call mati ;memanggil rutin mati
ret ;program berhenti untuk
program maju mati:
;perintah untuk motor mati clr motor_kanan1
;aktifkan logika low 0 pada bit p0.5
clr motor_kanan2 ; aktifkan logika low 0
pada bit p0.4 clr motor_kiri1
; aktifkan logika low 0 pada bit p0.6
clr motor_kiri2 ; aktifkan logika low 0
pada bit p0.7 mov r7,80
;isikan 80 pada register 7 R7
djnz r7, ;
instruksi yang akan mengurangi 1 nilai register
7 dan akan melompat ke
memori program maju jika setelah pengurangan belum
dihasilkan 0 ret
; program berhenti untuk program mati
kanan: ; perintah untuk kanan
mov r6,5 ; isikan 5 pada register 6
R6 kanan1:
; perintah untuk kanan1 mov r5,1
; isikan 1 pada register 5 R5
belok_kanan: ; perintah untuk belok
kanan setb motor_kanan
; aktifkan logika high1 pada bit p0.5
Universitas Sumatera Utara
clr motor_kanan2 ; aktifkan logika low 0
pada bit p0.4 clr motor_kiri1
; aktifkan logika low 0 pada bit p0.6
setb motor_kiri2 ; aktifkan logika
high1 pada bit p0.7 mov r7,220
;isikan 220 pada register 7 R7
djnz r7, ;
instruksi yang akan mengurangi 1 nilai register
7 dan akan melompat ke
memori program maju jika setelah pengurangan belum
dihasilkan 0 acall mati_untuk_belok
; memanggil rutin mati untuk belok
djnz r5,belok_kanan ;
instruksi yang akan mengurangi 1 nilai register
7 dan akan melompat ke
memori program belok kanan jika setelah pengurangan
belum dihasilkan 0 djnz r6,kanan1
; instruksi yang akan
mengurangi 1 nilai register 6
dan akan melompat ke memori program kanan jika
setelah pengurangan belum dihasilkan 0
ret ; program berhenti untuk
program belok kanan kiri:
; perintah untuk kiri mov r6,5
; isikan 5 pada register 6 R6
kiri1:
; perintah untuk kiri mov r5,1
;isikan 1 pada register 5 R5
belok_kiri: ; perintah untuk belok kiri
clr motor_kanan1 ; aktifkan logika
low 0 pada bit p0.5 setb motor_kanan2
; aktifkan logika high 1 pada bit p0.4
setb motor_kiri1 ; aktifkan logika high 1
pada bit p0.6
Universitas Sumatera Utara
clr motor_kiri2 ; aktifkan logika
low 0 pada bit p0.7 mov r7,220
;isikan 220 pada register 7 R7
djnz r7, ;
instruksi yang akan mengurangi 1 nilai register
7 dan akan melompat ke
memori program belok kiri jika setelah pengurangan
belum dihasilkan 0 acall mati_untuk_belok
; memanggil rutin mati untuk belok
djnz r5,belok_kiri ;
instruksi yang akan mengurangi 1 nilai register
5 dan
akan melompat ke memori program belok kiri
jika setelah pengurangan belum dihasilkan 0
djnz r6,kiri ;
instruksi yang akan mengurangi 1 nilai register
6 dan akan melompat ke
memori program kiri jika setelah pengurangan belum
dihasilkan 0 ret
; program berhenti untuk program belok kiri
mati_untuk_belok: clr motor_kanan1
; aktifkan logika low 0 pada bit p0.5
clr motor_kanan2 ; aktifkan logika
low 0 pada bit p0.4 clr motor_kiri1
; aktifkan logika low 0 pada bit p0.6
clr motor_kiri2 ; aktifkan logika
low 0 pada bit p0.7 mov r7,1
;isikan 1 pada register 7 R7
djnz r7, ;
instruksi yang akan mengurangi 1 nilai register
7 dan akan melompat ke
memori program untuk belok jika setelah pengurangan
belum dihasilkan 0 ret
; program berhenti untuk belok
Universitas Sumatera Utara
2200uF
5 Volt DC