HASIL DAN PEMBAHASAN
4.3 Pengujian dan Pembahasan Hardware
4.4.1 Pembahasan Program Slave 1
Program slave 1 dalam penelitian ini menggunakan mikrokontroler Arduino Nano. Secara garis besar program slave 1 berfungsi untuk memprogram jalan robot, wall follower dan menghindari rintangan. Program slave 1 menggunakan beberapa library dan menginisialisasi beberapa variabel, berikut penjelasan tiap baris pada Gambar 4.18 dan Gambar 4.19.
1. Baris 6 β 8 menunjukkan library yang digunakan pada program slave 1.
Library wire.h berfungsi untuk Arduino IDE berkomunikasi dengan board
Arduino, library Ping.h berfungsi untuk memperoleh hasil pembacaan dari sensor PING, library SharpIR.h berfungsi untuk memperoleh data analog dari sensor IR SHARP.
2. Baris 11-31 menginisialisasi variabel sensor SHARP IR. Baris 12-16 menginisialisasikan pin yang digunakan. Baris 17-21 menginisialisasikan jenis sensor yang digunakan, karena penelitian ini menggunakan sensor IR GP2Y0A41SK0F maka kode modelnya 430 (4-30 cm). Baris 27-31 menginisialisasikan variabel jarak bertipe integer yang akan digunakan pada baris program utama.
3. Baris 33-57 merupakan inisialisasi sensor PING. Baris 33-41 menginisialisasikan pin yang digunakan. Baris 50 β 57 menginisialisasikan variabel PING bertipe integer yang akan digunakan pada baris program utama.
Gambar 4.18. Listing program pada Slave 1 (Inisialisasi sensor IR)
Gambar 4.19. Listing program pada Slave 1 (Inisialisasi sensor PING) Setelah menginisialisasi variabel sensor PING dan IR, kemudian menginisialisasikan nilai minimal dan maksimal PING ke-2 dan PING ke-6 untuk referensi nilai Fuzzy yang telah dihitung menggunakan Matlab, menginisialisasikan nilai minimal dan maksimal IR serta parameter threshold untuk PING ke-0 (depan), PING ke-1 dan 7 (atas) dan IR boneka seperti pada gambar 4.20 berikut ini.
Gambar 4.20. Listing program pada Slave 1 (Inisialisasi nilai pada variabel)
Void setup berisi program yang akan dijalankan sekali. Berdasarkan gambar 4.21 fungsi yang berada pada void setup yaitu :
1. Serial.begin (9600) berfungsi untuk membangkitkan serial port 0 dengan baud rate 9600.
2. Wire.begin (8) berfungsi untuk berkomunikasi dengan mikrokontroler master, angka 8 merupakan alamat slave 1.
3. Wire.onRequest(requestEvent) merupakan fungsi yang akan dipanggil ketika
master meminta data dari slave.
4. Wire.onReceive(receiveEvent) merupakan fungsi yang kan dipanggil ketika
slave menerima perintah dari master.
Gambar 4.21. Listing program pada Slave 1 (Void setup)
Void loop berisi program yang akan dijalankan berulang-ulang dan merupakan program utama pada Slave 1. Gambar 4.22 menunjukkan program yang akan dijalankan dahulu adalah label soundak, program pada label ini berfungsi untuk mengaktifkan program baca jarak. Sensor yang digunakan adalah sensor PING, sensor tersebut akan mendeteksi posisi robot, jika data yang terbaca adalah bagian depan dan kiri robot kosong dan bagian kanan mendeteksi tembok maka slave 1 akan memproses label jalan, namun ketika kondisi tersebut tidak ditemukan maka slave 1 akan mengirimkan kode yang digunakan sebagai perintah robot berputar ke kiri hingga menemukan kondisi seperti baris ke-118.
Gambar 4.22. Listing program pada Slave 1 (Void loop label soundak)
Setelah mendapatkan kondisi yang sesuai baris ke-118 maka slave akan memproses program pada label jalan (gambar 4.23), label jalan merupakan program untuk wall follower kanan. Pertama-tama program yang dijalankan adalah void sampling(), pada void ini terdapat program baca data pada sensor fuzzy kanan (PING ke-6), nilai PING ke-6 memiliki batas minimal dan maksimal sehingga data PING tersebut tidak bisa berada di bawah batas minimal ataupun di atas batas maksimal. Setelah pembacaan data pada sensor fuzzy kanan program selanjutnya akan mengecek kondisi tertentu di luar dari input fuzzy, kondisi khusus tersebut sebagai berikut:
Tabel 4.16. Kondisi khusus
No Kondisi tertentu kode
kanan kiri 1 PING atas (PING ke-7) dekat dengan tembok 80 0 2 PING depan (PING ke-0) dekat dengan tembok 50 0
3 IR depan dekat dengan boneka 60 0
4 PING ke-0 kurang dari 23, PING ke-3 lebih dari 35,
dan PING ke-5 kurang dari 15 - -
Pada tabel 4.16 kondisi khusus pertama akan memberikan perintah robot bergerak ke kiri kurang lebih 20 derajat, seluruh kode yang dihasilkan pada kondisi khusus disimpan pada variabel kanan dan kiri. Kondisi khusus kedua dan ketiga akan memberikan perintah robot bergerak ke kiri kurang lebih 30 derajat. Kondisi khusus keempat tidak memiliki kode karena kondisi ini mengganti wall follower kanan menjadi kiri dengan PING ke-2 menjadi referensi sensor fuzzy kiri (baris ke-145-150 pada gambar 4.23), jika seluruh kondisi khusus tidak terpenuhi maka PING ke-6 menjadi referensi sensor fuzzy kanan. Setelah program data
Variabel tersebut kemudian dinormalisasikan dari tipe data float ke integer dengan variabel yang baru yaitu ikanan dan ikiri. Data yang telah dinormalisasikan dikirim ke master melalui I2C.
Gambar 4.23. Listing program pada Slave 1 (Void loop label jalan)
Fuzzy yang digunakan pada penelitian ini adalah fuzzy Mamdani, program fuzzy yang
ada di slave 1 dibantu dengan library fuzzy oleh akun zerokol pada website Github. Penggunaan Fuzzy pada penelitian ini untuk mengoreksi pergerakan robot agar robot dapat berjalan lurus dan cepat. Data fuzzy yang dihasilkan dikirim ke master saat master meminta data ke slave 1, kemudian diolah oleh servo untuk melakukan pergerakan robot. Gambar 4.24 merupakan listing program parameter input dan output fuzzy yang digunakan, pada paremeter input digunakan 3 jenis parameter yaitu near (dekat), desired (yang diinginkan), dan far (jauh). Pada parameter output 1 (bagian kanan) digunakan 3 jenis parameter yaitu rs (right slow), rm (right medium) dan rf (right fast). Pada parameter output 2 (bagian kiri) digunakan 3 jenis parameter yaitu ls (left slow), lm (left medium) dan lf (left fast).
memakai fungsi naik.
Gambar 4.25. Fungsi keanggotaan Input S1
Pada gambar 4.26 merupakan fungsi keanggotaan fuzzy output derajatKanan dengan
range 4 hingga 32, fungsi keanggotaannya yaitu s/slow (range dari 4-17), m/medium ( range
17,18,19) dan f/fast (range dari 19-32), fungsi keanggotaan s/slow memakai fungsi turun, fungsi keanggotaan m/medium memakai fungsi bell-shaped dan fungsi keanggotaan f/fast memakai fungsi naik.
Gambar 4.26. Fungsi keanggotaan fuzzy output derajatKanan
Pada gambar 4.27 merupakan fungsi keanggotaan fuzzy output derajatKiri dengan
range 4 hingga 32, fungsi keanggotaannya yaitu s/slow (range dari 4-17), m/medium ( range
17,18,19) dan f/fast (range dari 19-32), fungsi keanggotaan s/slow memakai fungsi turun, fungsi keanggotaan m/medium memakai fungsi bell-shaped dan fungsi keanggotaan f/fast memakai fungsi naik.
Gambar 4.27. Fungsi keanggotaan fuzzy output derajatKiri
Setelah mengatur nama parameter dan fungsi keanggotaan pada Matlab dapat dibuat
fuzzy rule. Parameter tersebut menghasilkan 3 buah rule (tabel 4.17 dan gambar 4.28) yaitu
jika sensor input (s1) dekat, maka kanan lambat (rs) dan kiri cepat (lf), jika sensor input (s1) yang diinginkan, maka kanan sedang (rm) dan kiri medium (lm), terakhir jika sensor input
Rule (s1) (if(input),then(out1)and(out2)) R1 near rs ls ifs1n, thenrsandlf R2 desired rm lm ifs1d, thenrmandlm R3 far rf lf ifs1f, thenrfandls
Gambar 4.28. Fuzzy Rule pada Matlab
Berikut ini merupakan tabel 4.18 dan 4.19 perbandingan antara hasil keluaran Matlab dan program Fuzzy, dengan mendeteksi objek dari range 5-13 cm.
Tabel 4.18. Tabel perbandingan hasil keluaran Matlab dan program Fuzzy
no
Jarak objek (cm)
Hasil Matlab Hasil pengolahan program Fuzzy πΊππππ‘ = |πππππ π ππππππππ¦πβπππππ βππ ππ π πππ ππ πππππ π ππππππππ¦π | Γ 100% (%)
kanan kiri Kanan kiri kanan kiri
1 5 8,24 27,8 8 27 2,91 2,87
2 6 8,47 27,5 8 27 5,54 1,81
3 7 8,98 27 9 26 0,22 3,7
4 8 9,66 26,3 9 26 6,83 1,14
no
Jarak objek (cm)
Hasil Matlab Hasil pengolahan program Fuzzy πΊππππ‘ = |πππππ π ππππππππ¦πβπππππ βππ ππ π πππ ππ πππππ π ππππππππ¦π | Γ 100% (%)
kanan kiri kanan kiri kanan kiri
6 10 26,3 9,66 27 8 2,66 17,18
7 11 27 8,98 27 8 0 10,91
8 12 27,5 8,47 27 8 1,81 5,54
9 13 27,8 8,24 27 8 2,87 2,91
Rerata Galat 2,54 5,12
Dari hasil perbandingan antara hasil keluaran Matlab dan program Fuzzy pada tabel 4.19, pengolahan program Fuzzy dan Matlab memiliki rerata galat sebesar kanan = 2,54% dan kiri = 5,12% sehingga tingkat keberhasilan pengolahan program Fuzzy sebesar kanan= 97,45% dan kiri = 94,87%. Adanya galat pada pengolahan program fuzzy terjadi karena program atau library yang digunakan mempunyai selisih perhitungan dan nilai keluaran program Fuzzy telah dinormalisasikan dari tipe data float ke bentuk integer agar dapat diolah
servo.
Gambar 4.29 merupakan grafik pergerakan robot. Nilai pada grafik merupakan hasil pembacaan wall follower kanan dengan referensi nilai dari PING ke-6. Pergerakan robot masih tidak stabil karena robot masih mencari-cari nilai fuzzy yang diinginkan (9) sehingga pada grafik, robot cenderung bergerak menjauhi dan mendekati tembok. Namun pergerakan robot masih bisa dijalankan karena robot masih berada pada sisi tengah jalan lorong (lebar lorong arena sekitar 46 cm).
1. Baris 16-20 untuk inisialisasi pin yang digunakan sensor warna TCS3200. Pin S0 dan S1 berfungsi sebagai Saklar pemilih pada frekuensi keluaran, Pin S2 dan S3 berfungsi sebagai input pilihan photodioda, Pin OUT merupakan frekuensi keluaran.
2. Baris 33 berfungsi untuk membatasi nilai parameter yang akan digunakan saat void loop, nilai ini berasal dari pembacaan sensor saat digaris putih dengan intensitas cahaya (lampu) sebesar 403 lux.
Gambar 4.30. Listing program pada Slave 2 (Inisialisasi Variabel dan threshold) Void setup berisi program yang akan dijalankan sekali. Berdasarkan gambar 4.31 fungsi yang berada pada void setup yaitu Serial.begin (9600) berfungsi untuk membangkitkan serial port 0 dengan baud rate 9600, Wire.begin (9) berfungsi untuk berkomunikasi dengan mikrokontroler master, angka 9 merupakan alamat slave 2.
program utama pada Slave 2. Program yang akan dijalankan dahulu adalah program pada label standby (gambar 4.32) yaitu program untuk menerima data dari mikro master untuk mengaktifkan program baca garis.
Gambar 4.32. Listing program pada Slave 2 (Void loop label standby)
Selanjutnya pada gambar 4.34 merupakan void program untuk mensetting photodioda merah (cek_front()), pada penelitian ini digunakan hanya photodiode merah (data RED) karena pada tabel percobaan sensor untuk mendeteksi garis data RED sudah mampu untuk mendeteksi objek putih. Data RED pada void cek_front() diaktifkan dengan pin S2 dan S3 yang bernilai LOW (tabel 2.4), kemudian data RED disimpan pada variabel front_freq[0].
Gambar 4.34. Listing program pada Slave 2 (cek_front)
Selanjutnya pada gambar 4.35 menunjukkan label program startprogram, proses ini dilakukan setelah menjalankan void cek_front(), ketika data RED yang disimpan pada variabel front_freq[0] mendeteksi garis putih yang pertama, maka program akan menambah nilai konter, pertambahan nilai tersebut menandakan robot telah keluar dari ruang START. Garis putih pertama yang dideteksi diabaikan karena menunjukkan robot berada di luar garis. Setelah mendeteksi garis yang kedua data RED akan disimpan dan ditahan sampai master menerima data dan mereset data. Selama data disimpan dan ditahan robot tidak melakukan pembacaan sensor.
Gambar 4.35. Listing program pada Slave 2 (label startprogram)