Implementasi Arsitektur Behavior-Based Dengan Menggunakan Fuzzy Untuk Navigasi Car-Like Mobile Robot Dalam Lingkungan Yang Tak Dikenal

LAMPIRAN

Universitas Sumatera Utara

Switch Batas
Kemudi Kiri

LCD 2x16

HALAMAN LAMPIRAN RANGKAIAN KESELURUAN

Universitas Sumatera Utara

HALAMAN LAMPIRAN PENGUJIAN SENSOR JARAK

PENGUJIAN SENSOR JARAK

1.

Pendahuluan
Sensor pendeteksi jarak pada penelitian ini menggunakan sensor Sharp


GP2D12 dan Sharp GP2D120 dengan output berupa tegangan analog dan bersifat non
linear. Karena output tidak linear maka dibutuhkan suatu metode untuk menentukan
jarak berdasarkan tegangan analog. Salah satu cara kalibrasi sensor jarak Shap ini
dengan melakukan pengukuran output sensor untuk setiap jarak tetap (cm).

2.

Prosedur percobaan
Pengujian sensor jarak dilakukan dengan membandingkan nilai output sensor

untuk setiap rintangan pada jarak tetap. Pengujian dilakukan untuk ke-lima sensor,
yaitu FL, FC, FR, BL, dan BR. Gambar SJ1 memperlihatkan rangkaian yang
digunakan dalam melakukan pengujian sensor jarak.
Pengujian dilakukan untuk mendapatkan data output berupa tegangan analog
yang telah dikonversi menjadi data digital dengan videlitas 10-bit sebagai pengujian
deteksi sensor terhadap objek tetap untuk jarak 10 cm s/d 80 cm dengan kelipatan
jarak deteksi 5 cm untuk sensor Sharp GP2D12 dan jarak 4 cm s/d 30 cm dengan
kelipatan jarak deteksi 2 cm untuk sensor Sharp GP2D120.
Dari Gambar SJ1 komponen pengujian terdiri dari mikrokontroler

ATMega8535, sensor jarak yang akan diuji (secara bergantian untuk ke-lima sensor)
dan sebuah LCD untuk menampilkan data hasil pengukuran.

[1]
Universitas Sumatera Utara

[2]

HALAMAN LAMPIRAN PENGUJIAN SENSOR JARAK

Gambar SJ1 Rangkaian pengujian sensor jarak

Program pengujian sensor jarak dalam bentuk diagram alir ditunjukkan pada
Gambar SJ2.
Keterangan Gambar SJ2:
Data

: Sebuah variabel yang digunakan untuk menampung data hasil konversi
tegangan analog (output sensor jarak) menjadi data digital.


Hasil : Sebuah variabel yang digunakan untuk menampung nilai rata-rata dari 10
kali nilai variabel data.

Universitas Sumatera Utara

[3]

HALAMAN LAMPIRAN PENGUJIAN SENSOR JARAK

X

: sebuah variabel yang digunakan untuk menampung data cacahan (cacah naik
sampai nilai cacahan = 10)

Gambar SJ2 Diagram alir pengujian sensor jarak

3.

Hasil pengujian
Hasil pengujian untuk kelima sensor (FL, FC, FR, BL, dan BR) ditampilan


pada dalam bentuk grafik yang telah ditambahkan dengan garis trendline dengan type

Universitas Sumatera Utara

[4]

HALAMAN LAMPIRAN PENGUJIAN SENSOR JARAK

power dan memilih display equation on chart dan display R-squared value on chart
dengan menggunakan microsoft office excel untuk mendapatkan sebuah persamaan
untuk memetakan nilai pada sumbu y (jarak deteksi objek tetap) berdasarkan nilai
pada sumbu x (jarak deteksi yang telah dikonversi menjadi data digital dengan
videlitas 10-bit). Gambar SJ3 menunjukkan grafik pengujian sensor FL, Gambar SJ4
menunjukkan grafik pengujian sensor FC, Gambar SJ5 menunjukkan pengujian
sensor FR, Gambar SJ6 menunjukkan pengujian sensor BL, dan Gambar SJ7
menunjukkan pengujian sensor BR.

GRAFIK SENSOR FL
90


JARAK DITEKSI (cm)

80

Series1

100, 80
103, 75
108, 70
114, 65
122, 60
128, 55
136, 50
145, 45
161, 40
185, 35
202, 30
244, 25


70
60
50
40
30
20

Power (Series1)
-1.3011

y = 30743x
2

R = 0.9979

289, 20
356, 15

10


470, 10

0
0

100

200

300

400

500

OUTPUT SENSOR (DIGITAL DENGAN FIDELITAS 10 BIT)

Gambar SJ3 Hasil kaliberasi sensor FL

Universitas Sumatera Utara


[5]

HALAMAN LAMPIRAN PENGUJIAN SENSOR JARAK

GRAFIK SENSOR FC
100
Series1

90
JARAK DITEKSI (cm)

80

Power (Series1)

62, 80
68, 75
75, 70
86, 65

96, 60
104, 55
119, 50
130, 45
145, 40
170, 35
192, 30
229, 25
270, 20

70
60
50
40
30
20

-1.0161

y = 5960.1x

R2 = 0.987

346, 15

10

473, 10

0
0

100

200

300

400

500


OUTPUT SENSOR (DIGITAL DENGAN FIDELITAS 10 BIT)

Gambar SJ4 Hasil pengujian sensor FC

GRAFIK SENSOR FR
100

Series1

90

JARAK DITEKSI (cm)

Power (Series1)

64, 80
69, 75
71, 70
91, 65
93, 60
111, 55
118, 50
133, 45
143, 40
162, 35
189, 30
217, 25
267, 20

80
70
60
50
40
30
20

y = 5469.7x-0.9971
R2 = 0.9865

400, 15
487, 10

10
0

0

100

200

300

400

500

600

OUTPUT SENSOR (DIGITAL DENGAN FIDELITAS 10 BIT)

Gambar SJ5 Hasil pengujian sensor FR

Universitas Sumatera Utara

[6]

HALAMAN LAMPIRAN PENGUJIAN SENSOR JARAK

GRAFIK SENSOR BL
35
Series1

JARAK DITEKSI (cm)

30

77, 30
79, 28
88, 26
97, 24
108, 22
118, 20
130, 18
150, 16
181, 14
214, 12
260, 10

25
20
15
10

Power (Series1)
y = 1480.1x-0.9011
R2 = 0.9956

330, 8
499, 6

5

633, 4

0
0

100

200

300

400

500

600

700

OUTPUT SENSOR (DIGITAL DENGAN FIDELITAS 10 BIT)

Gambar SJ6 Hasil pengujian sensor BL

GRAFIK SENSOR BR
35
Series1

JARAK DITEKSI (cm)

30

89, 30
93, 28
101, 26
108, 24
121, 22
134, 20
160, 18
180, 16
206, 14
251, 12
301, 10

25
20
15
10

Power (Series1)
y = 1997.6x-0.9355
R2 = 0.9873

390, 8
543, 6

5

620, 4

0
0

100

200

300

400

500

600

700

OUTPUT SENSOR (DIGITAL DENGAN FIDELITAS 10 BIT)

Gambar SJ7 Hasil pengujian sensor BR

Universitas Sumatera Utara

HALAMAN LAMPIRAN PENGUJIAN SENSOR JARAK

4.

[7]

Pengolahan data
Berdasarkan hasil yang didapat dari garis trendline maka dapat di petakan

jarak objek yang terdeteksi sensor berdasarkan data ouput sensor yang telah
dikonversi menjadi data digital 10-bit yang ditampung dalam variabel hasil.
Persamaan 1 menunjukkan jarak deteksi sensor FL, persamaan 2 menunjukkan jarak
deteksi sensor FC, persamaan 3 menunjukkan jarak deteksi sensor FR, persamaan 4
menunjukkan jarak deteksi sensor FBL, dan persamaan 5 menunjukkan jarak deteksi
sensor BR.
FL (cm) = 30743.hasil -1,3011 ......................... (1)
FC (cm) = 5960,1..hasil -1, 0161 ...................... (2)
FR (cm) = 5469,7.hasil -0,9971 ........................ (3)
BL (cm) = 1480,1.hasil -0,9011 ......................... (4)
BR (cm) = 1997,6.hasil -0,9355 ........................ (5)

Universitas Sumatera Utara

HALAMAN LAMPIRAN PENGUJIAN SUDUT KEMUDI

PENGUJIAN SUDUT KEMUDI

1.

Pendahuluan
Motor stepper digunakan sebagai penggerak kemudi, sehingga besarnya sudut

kemudi ( f ) dipengaruhi jumlah step yang diberikan motor stepper dari titik acuan
yang ditentukan (batas kemudi kiri). Menentukan besarnya sudut kemudi ( f )
dilaksanakan berdasarkan eksperimen dengan memberikan sudut kemudi tetap (dalam
jumlah step dari titik acuan) dan memberikan kecepatan konstan, sehingga robot akan
bergerak membentuk lintasan melingkar. Dengan menggunakan alat tulis (kapur)
pada slot kapur (posisi slot kapur dan titik RRef ditunjukkan pada Gambar 3.2) maka
robot akan menggambar sebuah lingkaran pada lintasan sebagai radius referensi
(RRef) terhadap titik pusat rotasi P yang digunakan untuk menentukan besarnya radius
putar (R) dari titik tengah sumbu roda belakang (x,y) terhadap titik P dan menentukan
sudut kemudi ( f ) berdasarkan sudut yang dibentuk radius RV dan R terghadap pusat
rotasi (P) yang digunakan. Gambar SK1 menunjukkan hubungan radius putar
terhadap sudut kemudi.
Keterangan Gambar SK1:
P = Pusat rotasi radius putar
R = Radius putar dari titik (x,y) terhadap titik P
RRef = Radius putar dari titik A terhadap titik P
RV = Radius putar dari titik tengah sumbu roda depan (roda

virtual) terhadap

titik P.
p (overhang depan) = 3 cm
w (lebar CLMR) = 15 cm
Dw (selisih titik (x,y) terhadap titik B = 2 cm
L (baseline) = 15 cm
l1 = 6,5 cm

[1]
Universitas Sumatera Utara

[2]

HALAMAN LAMPIRAN PENGUJIAN SUDUT KEMUDI

f

R

R

ef

RV

RV

L

8 ,5

cm

8 ,5

cm

f

D

f

w

Dw

f

Gambar SK1 Hubungan radius putar terhadap sudut kemudi
(a) untuk belok ke kiri ,(b)untuk belok ke kanan

Dari hasil eksperimen didapat nilai RRef sebagai radius putar terhadap titik P
yang terbentuk saat menggunakan sudut kemudi tetap dan kecepatan konstan. Dengan
menggunakan teorema phytagoras maka didapat R seperti yang ditunjukkan pada
persamaan 1, RV Seperti yang ditunjukkan pada persamaan 2 dan dengan
menggunakan persamaan 2.1 dan 2.2 maka didapat sudut kemudi seperti yang
ditunjukkan pada persamaan 3.

R(untuk belok kiri) =

RRe f - l1
2

R( untuk belok kanan) = RRef - l1
2

RV =

2

2

- Dw
............. (1)
+ Dw

R 2 + L2 ......................................... (2)

æ Lö
f = tan -1 .ç ÷ ............................................. (3)
èRø

Universitas Sumatera Utara

[3]

HALAMAN LAMPIRAN PENGUJIAN SUDUT KEMUDI

2.

Prosedur percobaan
Eksperimen dilaksanakan dengan merancang perangkat keras seperti yang

ditunjukkan pada Gambar SK2 dan perangkat lunak seperti yang ditunjukkan dalam

Switch Batas
Kemudi Kiri

diagram alir pada Gambar SK3.

Gambar SK2 Rangkaian pengujian sudut kemudi

Dari Gambar SK2, simbol (M) yang terhubung dengan IC L293D merupakan
motor DC untuk menggerakkan roda belakang CLMR.
Dari Gambar SK3 variabel ST (Steering Target) digunakan sebagai target
kemudi yang ingin dicapai dalam jumlah step yang diinginkan dari titik acuan (batas
kemudi kiri). Variabel I digunakan untuk menampung data jumlah step yang telah
dilaksakan sistem.

Pengujian dilakukan dengan memberikan nilai variabel input

dengan variasi nilai 4, 20, 36, 52, 70, 86, dan 102. Port A digunakan sebagai output,

Universitas Sumatera Utara

[4]

HALAMAN LAMPIRAN PENGUJIAN SUDUT KEMUDI

dengan nilai output pada Port A merupakan penjumlahan dari nilai variabel N
(variabel yang menampung data pengendalian motor stepper) dan nilai 24 (PA.4 = 1,
sebagai tanda polaritas yang diberikan pada motor DC dalam arah maju). Kecepatan
konstan didapat dengan memberikan nilai PWM (Pulse width modulation) dengan
nilai tetap.

Gambar SK3 Diagram alir pengujian sudut kemudi

3.

Hasil Eksperimen
Hasil yang didapat pada eksperimen pengujian sudut kemudi ini adalah radius

putar RRef berdasarkan jumlah step motor stepper. Tabel SK1 menunjukkan hasil
RRef berdasarkan jumlah step motor stepper.

Universitas Sumatera Utara

[5]

HALAMAN LAMPIRAN PENGUJIAN SUDUT KEMUDI

No
1
2
3
4
5
6
7

4.

Tabel SK1. Radius putar RRef terhadap jumlah step motor stepper
Steering target (ST)
RRef (cm)
Keterangan
4
53,89
Kemudi arah kiri
20
74,28
Kemudi arah kiri
36
138,65
Kemudi arah kiri
52
0
Kemudi lurus
70
133,15
Kemudi arah kanan
86
70,3
Kemudi arah kanan
102
48,43
Kemudi arah kanan

Pengolahan data
Dengan menggunakan persamaan 1 s/d 3 untuk data pada Tabel SK1, maka

akan diperoleh radius (R) dan sudut kemudi ( f ) yang selengkapnya ditunjukkan pada
Tabel SK2.
Tabel SK2. Radius putar (R) dan Sudut kemudi ( f )
ST (Steering Target)
4
20
36
52
70
86
102

RRef (cm)
53,89
74,28
138,65
0
133,15
70,3
48,43

R (cm)
51,5
72
136,5
0
135
72
50

f ( 0)
16,23884
11,76829
6,271077
0
-6,340192
-11,76829
-16,69924

Untuk mendapatkan suatu persamaan dalam menghitung sudut kemudi
(f ) berdasarkan variabel I (jumlah step motor stepper) maka digunakan analisa
terhadap data sudut kemudi (f ) terhadap variabel ST (Steering Target). Analisa
dilakukan dengan menggunakan Trendline yang terdapat pada Microsoft Excel.
Langkah pertama yang dilakukan adalah memetakan data sudut kemudi (f ) dan data
variabel ST (Steering Target) dalam bentuk grafik, sumbu x sebagai data ST dan
sumbu y sebagai sudut kemudi (f ) . Kedua membuat garis trendline dengan type
linear dan memilih display equation on chart dan display R-squared value on chart.

Universitas Sumatera Utara

[6]

HALAMAN LAMPIRAN PENGUJIAN SUDUT KEMUDI

Grafik hubungan anatara ST dan (f ) dipetakan menjadi dua Grafik, yaitu
Grafik hubungan antara ST dan (f ) untuk ST ≤ 52 (kemudi berputar berlawanan arah
jarum jam) yang ditunjukkan pada Gambar SK4 dan Grafik hubungan antara ST dan
(f ) untuk ST ≥ 52 (kemudi berputar searah jarum jam) yang ditunjukkan pada
Gambar SK5.

Series1

18
16
14
12
10
8
6
4
2
0

4, 16.23884

Linear (Series1)
y = -0.3388x + 18.057
R2 = 0.9945

20, 11.76829

36, 6.271077

52, 0

0

10

20

30

40

50

60

100

120

X-Axis (Jumlah step)

Gambar SK4 Grafik kemudi CLMR untuk ST < 52

GRAFIK KEMUDI CLMR SEARAH JARUM JAMAN
0

Y-Axis (Derajat)

Y-Axis (Derajat)

GRAFIK KEMUDI CLMR BERLAW ANAN ARAH JARUM JAM

52, 0

-2 0

20

-4
-6

Series1

-8

Linear (Series1)

-10
-12
-14

40

60

80
70, -6.340192

y = -0.3347x + 17.241
R2 = 0.9991

86, -11.76829

-16

102, -16.69924

-18
X-Axis (Jumlah step)

Gambar SK5 Grafik kemudi CLMR untuk ST > 52

Universitas Sumatera Utara

[7]

HALAMAN LAMPIRAN PENGUJIAN SUDUT KEMUDI

Berdasarkan garis trendline dengan menggunakan type linear pada Gambar
SK4 dan Gambar SK5 maka persamaan untuk untuk mendapatkan nilai
(f ) berdasarkan jumlah step (variabel I) ditunjukkan pada persamaan 4.

ì- 0,3388.I + 18,057 ; I < 52
ïï
f = í0 ; I = 52
.... (4)
ï
ïî- 0,3347.I + 17,241 ; I > 52

Universitas Sumatera Utara

HALAMAN LAMPIRAN PENGUJIAN OPTOCOUPLER

PENGUJIAN OPTOCOUPLER

1.

Pendahuluan
Pengujian optocoupler merupakan pengujian rangkaian rotary encoder untuk

meperkirakan posisi robot dengan teknik odometry. Rotary encoder yang digunakan
pada penelitian ini menggunakan rotary encoder jenis DI-REV1 dari depok
instrument. Rangkaian roraty encoder ini terdiri dari dua bagian utama, yaitu
piringan derajat yang terdiri dari 36 lubang pada kelilingnya dan rangkaian sensor
pembaca putaran piringan derajat menggunakan optocoupler tipe celah.
Rotasi roda belakang yang terhubung paralel terhadap rangkaian piringan
derajat mengakibatkan perubahan posisi lubang piringan derajat yang menghalangi /
meneruskan cahaya infra red terhadap phototransistor dikonversi menjadi informasi
digital “0” dan “1”. Data digital yang dihasilkan optocoupler selanjutnya digunakan
sebagai trigger interupsi pada mikrokontroler. Setiap terjadi intrerupsi maka sebuah
variabel akan dicacah naik (sebagai tanda jumlah lubang piringan derajat yang
terdeteksi). Berdasarkan informasi jumlah interupsi yang terjadi dan total jumlah
lubang encoder, maka dapat diketahui jarak tempuh robot dengan menggunakan
persamaan 1.
Jarak (cm) =

2.

Jumlah intrupsi
2.p .r ..... (1)
Total jumlah lubang encoder

Prosedur percobaan
Pengujian dilakukan dengan mengatur posisi kemudi pada sudut 00 lalu

memberikan kecepatan konstan (Nilai pulse width modulation tetap) selama selang
waktu 10 detik. Hasil yang didapat adalah jarak tempuh robot secara real
(pengukuran perpindahan posisi robot) dan jumlah lubang piringan derajat yang

[1]
Universitas Sumatera Utara

[2]

HALAMAN LAMPIRAN PENGUJIAN OPTOCOUPLER

terdeteksi optocoupler. Gambar PO1 menunjukkan rangkaian pengujian optocoupler.
Gambar PO.2 menunjukkan program pengujian optocoupler dalam bentuk diagram

10 K

5
6
11

Switch Batas
Kemudi Kiri

14

13

12

LCD 2x16

4

3

2

1

Vcc

alir.

Gambar PO1 Rangkaian pengujian optocoupler

Keterangan Gambar PO1:
Simbol M yang terhubung dengan IC L293D merupakan motor DC untuk
menggerakkan rada belakang CLMR.

Universitas Sumatera Utara

[3]

HALAMAN LAMPIRAN PENGUJIAN OPTOCOUPLER

Gambar PO2 Diagram alir pengujian optocoupler

Keterangan Gambar PO2:
V

: Variabel yang digunakan untuk menampung data PWM (pulse width
modulation).

Universitas Sumatera Utara

[4]

HALAMAN LAMPIRAN PENGUJIAN OPTOCOUPLER

X

: Variabel yang digunakan untuk menampung data hasil cacahan setiap terjadi
interupsi yang di trigger optocoupler.

N

: Variabel yang digunakan untuk menampung data pengendalian motor
stepper.

Port A : Digunakan sebagai Port output untuk mengendalikan motor stepper
berdasarkan nilai variabel N dan memberikan polaritas maju pada motor DC
yang terhubung dengan PA.4 dan PA.5 dengan memberikan nilai 24 (PA.4 =
1 dan PA.5 = 0).

3.

Hasil Eksperimen

Hasil percobaan pengujian optocoupler ditunjukkan pada Tabel PO1.

Nilai variabel V
350
370
390

4.

Tabel PO1 Hasil percobaan
Jumlah lubang encoder yang terdeteksi
selama 10 detik
143
197
268

Jarak tempuh robot (real)
selama 10 detik
80
110
150

Pengolahan data
Berdasarkan data pada Tabel PO1, jarak tempuh robot berdasarkan jumlah

lubang encoder yang terdeteksi dapat diperoleh dengan menggunakan persamaan 1.
Secara lengkap hasil perhitungan jarak tempuh beserta error terhadap jarak tempuh
real ditunjukkan pada Tabel PO.2.

Nilai
variabel V
350
370
390

Tabel PO.2 Perbandingan jarak(cm) pengukuran dan perhitungan
Jarak tempuh obot
Jumlah lubang
% error
Jarak tempuh
(perhitungan)
encoder yang
perhitungan jarak
robot (real)
selama
terdeteksi selama
tempuh
selama 10 detik
10 detik
10 detik
143
80
79,825
0,21875%
197
110
109,969
0,028182%
268
150
149,603
0,264667%

Universitas Sumatera Utara

6/13/2013

Program Master.bas

6:22 PM

'----------------------------------------------------------------------------'Nama
: Sarmayanta Sembiring
'NIM
: 107034011
'Judul Thesis : Implementasi Arsitektur Behavior-Based
'
Dengan Menggunakan Fuzzy untuk Navigasi
'
Car-Like Mobile Robot Dalam Lingkungan
'
Tak Dikenal
'Judul Program : Program Master
'
PROGRAM STUDI MAGISTER TEKNIK ELEKTRO
'
FAKULTAS TEKNIK
'
UNIVERSITAS SUMATERA UTARA
'----------------------------------------------------------------------------$regfile = "8535def.dat"
$crystal = 11059200
Config Timer1 = Pwm , Pwm = 9 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1
Config Porta = Output
Config Portb = Input
Config Portc = Output
Config Portd.7 = Output
Config Pind.0 = Input
Config Pind.1 = Input
Config Pind.2 = Input
Porta = 0
Portb = 0
Portc = 0
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.7 = 1
Dim Theta As Single , Sudut As Single , Jarak As Single , Xt As Single
Dim Yt As Single , Atheta As Single , Eo As Single , Ep As Single
Dim I As Integer , Starget As Integer , Y As Single , Xi As Single
Dim Yi As Single , Kuadran As Single , Baca As Byte , Target As Integer
Dim Kirim As Integer , V As Integer , N As Byte , Polaritas As Byte
Dim A As Byte
Config Int0 = Falling
On Int0 Interupsi
Declare Sub Update()
Declare Sub Kuadran2()
Declare Sub Sudut()
Declare Sub Baca1()
Declare Sub Putar_kiri()
Declare Sub Putar_kanan()
N = 0
I = 0
'----------------------------------------------------------------------------'KEMUDI AWAL
'----------------------------------------------------------------------------Do
Call Putar_kiri()
Porta = N
Waitms 15
Loop Until Pind.0 = 0
' putar kiri sampa
Do
Call Putar_kanan()
Porta = N
Incr I
Waitms 15
Loop Until I = 52

' putar kanan samp

1
Universitas Sumatera Utara

6/13/2013

Program Master.bas

6:22 PM

'----------------------------------------------------------------------------Waitms 15
Toggle Portd.7
Bitwait Pind.1 , Reset

' count = 0

'----------------------------------------------------------------------------'DATA TARGET
'----------------------------------------------------------------------------Baca = Pinb
Xt = Baca
If Xt >= 128 Then
Xt = Xt - 128
Xt = Xt * 10
Else
Xt = 0 - Xt
Xt = Xt * 10
End If
Toggle Portd.7
Bitwait Pind.1 , Set
Waitms 10

' count = 1

Baca = Pinb
Yt = Baca
If Yt >= 128 Then
Yt = Yt - 128
Yt = Yt * 10
Else
Yt = 0 - Yt
Yt = Yt * 10
End If
'count = 2
Portd.7 = 1
Portd.1 = 1
Do
Call Sudut()
Call Update()
If Ep >= 130 Then
Kirim = 130
Else
Kirim = Ep
End If
Portc = Kirim
Toggle Portd.7
Bitwait Pind.1 , Reset
If Eo >= 0 And Eo 90 Then
Kirim = 218
Elseif Eo < 0 And Eo >= -90 Then
Kirim = Eo
Kirim = -1 * Kirim
Else
Kirim = 90
End If
Portc = Kirim
Toggle Portd.7
Bitwait Pind.1 , Set

2
Universitas Sumatera Utara

6/13/2013

Program Master.bas

6:22 PM

'----------------------------------------------------------------------------'PENGENDALIAN ACTUATOR
'----------------------------------------------------------------------------Baca = Pinb
Call Baca1()
If Target = 1 Then
Starget = 4
Elseif Target = 2 Then
Starget = 20
Elseif Target = 3 Then
Starget = 36
Elseif Target = 4 Then
Starget = 52
Elseif Target = 5 Then
Starget = 70
Elseif Target = 6 Then
Starget = 86
Elseif Target = 7 Then
Starget = 102
End If
Enable Int0
Enable Interrupts
Pwm1b = V
If A = 1 Then
If I > Starget Then
Do
Call Putar_kiri()
Decr I
Waitms 7
Porta = N
Loop Until I = Starget
Elseif I < Starget Then
Do
Call Putar_kanan()
Incr I
Waitms 7
Porta = N
Loop Until I = Starget
Else
Porta = N + Polaritas
End If
Else
If I > Starget Then
Call Putar_kiri()
Decr I
Waitms 1
Elseif I < Starget Then
Call Putar_kanan()
Incr I
Waitms 1
Else
Porta = N + Polaritas
End If
End If
Porta = N + Polaritas
'----------------------------------------------------------------------------Do
Loop Until I >= 1
Loop Until Ep = 128 Then
Eo = Eov - 128
Else
Eo = 0 - Eov
End If
Call Fuzzyfikasi()

'tunggu logika "1"

'simpan nilai Eo

'----------------------------------------------------------------------------'OUTPUT DIGITAL
'----------------------------------------------------------------------------If Sudut = 4 Then
Kirim1 = 1
Elseif Sudut = 20 Then
Kirim1 = 2
Elseif Sudut = 36 Then
Kirim1 = 3
Elseif Sudut = 52 Then
Kirim1 = 4
Elseif Sudut = 70 Then
Kirim1 = 5
Elseif Sudut = 86 Then
Kirim1 = 6
Elseif Sudut = 102 Then
Kirim1 = 7
End If
If Kecepatan = 350 Then
Kirim2 = 8
Elseif Kecepatan = 370 Then
Kirim2 = 16
Elseif Kecepatan = 390 Then
Kirim2 = 32
End If
Kirim = Kirim1 + Kirim2
Portc = Kirim
'----------------------------------------------------------------------------Toggle Portd.1
Waitms 5
Toggle Portd.1

'kirim pulse ke'sistem slave-2

3
Universitas Sumatera Utara

6/13/2013

Program Slave-1.bas

6:23 PM

Loop
End
'----------------------------------------------------------------------------Sub Fuzzyfikasi()
'himpunan fuzzy NB untuk fungsi keanggotaan Eo
If Eo = -60 Then
Neo = 0
Else
Neo = -60 - Eo
Neo = Neo / 30
End If
If Neo > 0 Then
Call Uepn()
If Nep > 0 Then
Vel = 370
Flux = 86
Call Alpha_predikat()
End If
Call Uepm()
If Nep > 0 Then
Vel = 370
Flux = 70
Call Alpha_predikat()
End If
Call Uepf()
If Nep > 0 Then
Vel = 350
Flux = 4
Call Alpha_predikat()
End If
Call Uepvf()
If Nep > 0 Then
Vel = 370
Flux = 20
Call Alpha_predikat()
End If
End If
'himpunan fuzzy NM untuk fungsi keanggotaan Eo
If Eo > -90 And Eo -60 And Eo < -30 Then
Neo = -30 - Eo
Neo = Neo / 30
Else
Neo = 0
End If
If Neo > 0 Then
Call Uepn()
If Nep > 0 Then
Vel = 370
Flux = 70
Call Alpha_predikat()
End If

4
Universitas Sumatera Utara

6/13/2013

Program Slave-1.bas

6:23 PM

Call Uepm()
If Nep > 0 Then
Vel = 350
Flux = 4
Call Alpha_predikat()
End If
Call Uepf()
If Nep > 0 Then
Vel = 370
Flux = 20
Call Alpha_predikat()
End If
Call Uepvf()
If Nep > 0 Then
Vel = 370
Flux = 36
Call Alpha_predikat()
End If
End If
'himpunan fuzzy NS untuk fungsi keanggotaan Eo
If Eo > -60 And Eo -30 And Eo < 0 Then
Neo = 0 - Eo
Neo = Neo / 30
Else
Neo = 0
End If
If Neo > 0 Then
Call Uepn()
If Nep > 0 Then
Vel = 350
Flux = 4
Call Alpha_predikat()
End If
Call Uepm()
If Nep > 0 Then
Vel = 370
Flux = 20
Call Alpha_predikat()
End If
Call Uepf()
If Nep > 0 Then
Vel = 370
Flux = 36
Call Alpha_predikat()
End If
Call Uepvf()
If Nep > 0 Then
Vel = 370
Flux = 36
Call Alpha_predikat()
End If
End If

5
Universitas Sumatera Utara

6/13/2013

Program Slave-1.bas

6:23 PM

'himpunan fuzzy ZE untuk fungsi keanggotaan Eo
If Eo > -5 And Eo 0 And Eo < 5 Then
Neo = 5 - Eo
Neo = Neo / 5
Else
Neo = 0
End If
If Neo > 0 Then
Call Uepn()
If Nep > 0 Then
Vel = 350
Flux = 52
Call Alpha_predikat()
End If
Call Uepm()
If Nep > 0 Then
Vel = 370
Flux = 52
Call Alpha_predikat()
End If
Call Uepf()
If Nep > 0 Then
Vel = 390
Flux = 52
Call Alpha_predikat()
End If
Call Uepvf()
If Nep > 0 Then
Vel = 390
Flux = 52
Call Alpha_predikat()
End If
End If
'himpunan fuzzy PS untuk fungsi keanggotaan Eo
If Eo > 0 And Eo 30 And Eo < 60 Then
Neo = 60 - Eo
Neo = Neo / 30
Else
Neo = 0
End If
If Neo > 0 Then
Call Uepn()
If Nep > 0 Then
Vel = 350
Flux = 102
Call Alpha_predikat()
End If
Call Uepm()
If Nep > 0 Then
Vel = 370
Flux = 86

6
Universitas Sumatera Utara

6/13/2013

Program Slave-1.bas

6:23 PM

Call Alpha_predikat()
End If
Call Uepf()
If Nep > 0 Then
Vel = 370
Flux = 70
Call Alpha_predikat()
End If
Call Uepvf()
If Nep > 0 Then
Vel = 370
Flux = 70
Call Alpha_predikat()
End If
End If
'himpunan fuzzy PM untuk fungsi keanggotaan Eo
If Eo > 30 And Eo 60 And Eo < 90 Then
Neo = 90 - Eo
Neo = Neo / 30
Else
Neo = 0
End If
If Neo > 0 Then
Call Uepn()
If Nep > 0 Then
Vel = 370
Flux = 36
Call Alpha_predikat()
End If
Call Uepm()
If Nep > 0 Then
Vel = 350
Flux = 102
Call Alpha_predikat()
End If
Call Uepf()
If Nep > 0 Then
Vel = 370
Flux = 86
Call Alpha_predikat()
End If
Call Uepvf()
If Nep > 0 Then
Vel = 370
Flux = 70
Call Alpha_predikat()
End If
End If
'himpunan fuzzy PB untuk fungsi keanggotaan Eo
If Eo >= 90 Then
Neo = 1
Elseif Eo 0 Then
Call Uepn()
If Nep > 0 Then
Vel = 370
Flux = 20
Call Alpha_predikat()
End If
Call Uepm()
If Nep > 0 Then
Vel = 370
Flux = 36
Call Alpha_predikat()
End If
Call Uepf()
If Nep > 0 Then
Vel = 350
Flux = 102
Call Alpha_predikat()
End If
Call Uepvf()
If Nep > 0 Then
Vel = 370
Flux = 86
Call Alpha_predikat()
End If
End If
'----------------------------------------------------------------------------'DEFUZYFIKASI
'----------------------------------------------------------------------------Hasil1 = Fuzzyfikasifx / Fuzzyfikasifsum
Hasil2 = Fuzzyfikasivx / Fuzzyfikasivsum
Minimum = 99
For Fuzzyfikasif0 = 4 To 52 Step 16
Fuzzyfikasiv0 = Fuzzyfikasif0 - Hasil1
Fuzzyfikasiv0 = Abs(fuzzyfikasiv0)
If Fuzzyfikasiv0 < Minimum Then
Minimum = Fuzzyfikasiv0
Fuzzyfikasifsum = Fuzzyfikasif0
End If
Next
For Fuzzyfikasif0 = 70 To 102 Step 16
Fuzzyfikasiv0 = Fuzzyfikasif0 - Hasil1
Fuzzyfikasiv0 = Abs(fuzzyfikasiv0)
If Fuzzyfikasiv0 < Minimum Then
Minimum = Fuzzyfikasiv0
Fuzzyfikasifsum = Fuzzyfikasif0
End If
Next
Minimum = 199
For Fuzzyfikasif0 = 330 To 370 Step 20
Fuzzyfikasiv0 = Fuzzyfikasif0 - Hasil2
Fuzzyfikasiv0 = Abs(fuzzyfikasiv0)

8
Universitas Sumatera Utara

6/13/2013

Program Slave-1.bas

6:23 PM

If Fuzzyfikasiv0 < Minimum Then
Minimum = Fuzzyfikasiv0
Fuzzyfikasivsum = Fuzzyfikasif0
End If
Next
Sudut = Fuzzyfikasifsum
Kecepatan = Fuzzyfikasivsum
Nep = 0
Neo = 0
Fuzzyfikasif0 = 0
Fuzzyfikasiv0 = 0
Minimum = 0
Fuzzyfikasifx = 0
Fuzzyfikasivx = 0
Fuzzyfikasivsum = 0
Fuzzyfikasifsum = 0
End Sub
'----------------------------------------------------------------------------Sub Ulang()
Fuzzyfikasiv0 = Fuzzyfikasif0 - Hasil1
Fuzzyfikasiv0 = Abs(fuzzyfikasiv0)
If Fuzzyfikasiv0 < Minimum Then
Minimum = Fuzzyfikasiv0
Fuzzyfikasifsum = Fuzzyfikasif0
End If
End Sub
'----------------------------------------------------------------------------'mencari nilai alpha-predikat
'----------------------------------------------------------------------------Sub Alpha_predikat()
If Neo < Nep Then
Minimum = Neo
Elseif Nep < Neo Then
Minimum = Nep
Else
Minimum = Nep
End If
Fuzzyfikasiv0 = Minimum * Vel
Fuzzyfikasivx = Fuzzyfikasivx + Fuzzyfikasiv0
Fuzzyfikasivsum = Fuzzyfikasivsum + Minimum
Fuzzyfikasif0 = Minimum * Flux
Fuzzyfikasifx = Fuzzyfikasifx + Fuzzyfikasif0
Fuzzyfikasifsum = Fuzzyfikasifsum + Minimum
End Sub
'----------------------------------------------------------------------------'Fungsi keanggotaan Ep
'----------------------------------------------------------------------------'himpunan fuzzy Near
Sub Uepn()
If Ep = 100 Then
Nep = 0
Else
Nep = 100 - Ep
Nep = Nep / 50
End If
End Sub
'himpunan fuzzy Medium

9
Universitas Sumatera Utara

6/13/2013

Program Slave-1.bas

6:23 PM

Sub Uepm()
If Ep > 50 And Ep 100 And Ep < 150 Then
Nep = 150 - Ep
Nep = Nep / 50
Else
Nep = 0
End If
End Sub
'himpunan fuzzy Far
Sub Uepf()
If Ep > 100 And Ep 150 And Ep < 200 Then
Nep = 200 - Ep
Nep = Nep / 50
Else
Nep = 0
End If
End Sub
'Himpunan fuzzy Very far
Sub Uepvf()
If Ep >= 200 Then
Nep = 1
Elseif Ep 0 Then
Call Flux_kiri()
If Nep > 0 Then
Vel = 350
Flux = 102
Call Alpha_predikat()
End If
Call Flux_kanan()
If Nep > 0 Then
Vel = 350
Flux = 20
Call Alpha_predikat()
End If

3
Universitas Sumatera Utara

6/13/2013

Program Slave-2.bas

6:20 PM

End If
If Btot >= 5 Then
Neo = 1
Elseif Btot 0 Then
Call Flux_kiri()
If Nep > 0 Then
Vel = 350
Flux = 86
Call Alpha_predikat()
End If
Call Flux_kanan()
If Nep > 0 Then
Vel = 350
Flux = 4
Call Alpha_predikat()
End If
End If
End Sub
Sub Obstacle()
'untuk Front side obstacle avoidance N
If Fso = 0 Then
Neo = 0
Else
Neo = 0 - Fso
Neo = Neo / 20
End If
If Neo > 0 Then
Call Near_fc()
If Nep > 0 Then
Vel = 350
Flux = 4
Call Alpha_predikat()
End If
Call Far_fc()
If Nep > 0 Then
Vel = 370
Flux = 20
Call Alpha_predikat()
End If
End If
'untuk Front side obstacle avoidance ZE
If Fso > -15 And Fso 0 And Fso < 15 Then
Neo = 15 - Fso
Neo = Neo / 15

4
Universitas Sumatera Utara

6/13/2013

Program Slave-2.bas

6:20 PM

Else
Neo = 0
End If
If Neo > 0 Then
Call Near_fc()
If Nep > 0 Then
Vel = 350
Flux = 4
Call Alpha_predikat()
End If
Call Far_fc()
If Nep > 0 Then
Vel = 390
Flux = 52
Call Alpha_predikat()
End If
End If

'untuk Front side obstacle avoidance P
If Fso >= 20 Then
Neo = 1
Elseif Fso 0 Then
Call Near_fc()
If Nep > 0 Then
Vel = 350
Flux = 102
Call Alpha_predikat()
End If
Call Far_fc()
If Nep > 0 Then
Vel = 370
Flux = 86
Call Alpha_predikat()
End If
End If
End Sub
Sub Olah()
Hasil1 = Fuzzyfx / Fuzzyfsum
Hasil2 = Fuzzyvx / Fuzzyvsum
Minimum = 99
For Fuzzyf0 = 4 To 52 Step 16
Fuzzyv0 = Fuzzyf0 - Hasil1
Fuzzyv0 = Abs(fuzzyv0)
If Fuzzyv0 < Minimum Then
Minimum = Fuzzyv0
Fuzzyfsum = Fuzzyf0
End If
Next

5
Universitas Sumatera Utara

6/13/2013

Program Slave-2.bas

6:20 PM

For Fuzzyf0 = 70 To 102 Step 16
Fuzzyv0 = Fuzzyf0 - Hasil1
Fuzzyv0 = Abs(fuzzyv0)
If Fuzzyv0 < Minimum Then
Minimum = Fuzzyv0
Fuzzyfsum = Fuzzyf0
End If
Next
Minimum = 199
For Fuzzyf0 = 330 To 370 Step 20
Fuzzyv0 = Fuzzyf0 - Hasil2
Fuzzyv0 = Abs(fuzzyv0)
If Fuzzyv0 < Minimum Then
Minimum = Fuzzyv0
Fuzzyvsum = Fuzzyf0
End If
Next
Sudut = Fuzzyfsum
Kecepatan = Fuzzyvsum
Nep = 0
Neo = 0
Fuzzyf0 =
Fuzzyv0 =
Minimum =
Fuzzyfx =
Fuzzyvx =
Fuzzyvsum
Fuzzyfsum
End Sub

0
0
0
0
0
= 0
= 0

Sub Alpha_predikat()
If Neo < Nep Then
Minimum = Neo
Elseif Nep < Neo Then
Minimum = Nep
Else
Minimum = Nep
End If
Fuzzyv0 = Minimum * Vel
Fuzzyvx = Fuzzyvx + Fuzzyv0
Fuzzyvsum = Fuzzyvsum + Minimum
Fuzzyf0 = Minimum * Flux
Fuzzyfx = Fuzzyfx + Fuzzyf0
Fuzzyfsum = Fuzzyfsum + Minimum
End Sub
Sub Flux_kiri()
If Lsa = 5 Then
Nep = 0
Else
Nep = 5 - Lsa
Nep = Nep / 2
End If
End Sub
Sub Flux_kanan()
If Lsa >= 5 Then
Nep = 1

6
Universitas Sumatera Utara

6/13/2013

Program Slave-2.bas

6:20 PM

Elseif Lsa = 60 Then
Nep = 1
Elseif Fc = 1 And Dtot < 4 Then
If Rintangan = 1 Then
Portc = Lsa + 72
If Dtot = 75 Then
Rintangan = 0
End If
Else
Call Obstacle()
Call Olah()

8
Universitas Sumatera Utara

6/13/2013

Program Slave-2.bas

6:20 PM

Call Surat()
Kirim = Kirim1 + Kirim2
Portc = Kirim + 64
If Kirim1 >= 5 Then
Lsa = 7
Elseif Kirim1 = 4 And Fl < 50 And Fr < 50 And Fc < 75 Then
Call Move_backward()
Call Olah()
Call Surat()
Kirim = Kirim1 + Kirim2
Kirim = Kirim + 128
'polaritas terbali
Mundur = 1
Rintangan = 1
Portc = Kirim + 64
Elseif Dtot >= 4 Then
Call Move_backward()
Call Olah()
Call Surat()
Kirim = Kirim1 + Kirim2
Kirim = Kirim + 128
'polaritas terbali
Mundur = 1
Portc = Kirim + 64
End If
End If
Toggle Portd.1
End If
Return

9
Universitas Sumatera Utara