xxi
LAMPIRAN A
Prosedur Pengoperasian Sistem
xxii
LA.1. Prosedur Pengoperasian Alat
Bagian ini menjelaskan tentang bagaimana cara mengoperasikan alat pengukur tingkat kematangan buah yang telah dirancang.Komponen yang diperlukan adalah alat pengukur tingkat kematangan buah dan driver (CP210x_VCP_Windows) untuk alat tersebut.
Pertama, sambungkan listrik PLN pada soket 220VAC. Kemudian, sambungkan alat pengukur tingkat kematangan buah dengan komputer menggunakan kabel USB melalui USB Port.Perhatikan lampu indicator.Jika lampu indicator menyala berarti alat sudah mendapatkan arus listrik.Komputer akan melakukan auto detect terhadap alat tersebut. Kemudian, install driver (CP210x_VCP_Windows) untuk alat pengukur tingkat kematangan buah.
Gambar LA.1. Soket 220V AC
Setelah driver terpasangkan, lepaskan kabel USB dari
komputer.Kemudian, pasang kembali, 3 buah lampu indikator pada alat akan berkedip yang menandakan proses inisialisasi alat.Lalu, pasangkan sensor ultrasonik sesuai dengan simbol “T” dan “R”.
xxiii
Gambar LA.2. Lampu Indikator dan USB Port
Lakukan koneksi dari program MatLab ke alat dan tunggu lampu indikator “C”yang menandakan alat sudah terhubung dengan program MatLab menyala. Tempelkan probe transduser pada buah dengan posisi berseberangan pada buah. Kemudian tekan tombol“Trigger” yang berada di kananlampu kontol untuk memulai proses pembacaan buah.
xxiv
Setelah tombol ditekan, lampu “P”akan menyala yang menandakan proses pembacaan tingkat kandungan air dan tekstur buah serta proses Analog to Digital Converter sedang berlangsung. Setelah lampu proses padam, disusul dengan lampu “S” menyala yang menandakan proses pengiriman data hasil pengukuran buah sedang dikirimkan ke program MatLab. Setelah pengiriman data selesai, alat kembali dalam posisi standby dan siap untuk melakukan pengukuran kembali pada buah lainnya.
Untuk melepas alat dari komputer, lakukan disconnect dari program MatLab atau tutup program MatLab terlebih dahulu dan tunggu hingga lampu “C” tidak lagi menyala yang menandakan alat sudah tidak terkoneksi dengan program MatLab. Setelah lampu koneksi padam, maka alat sudah dapat dilepaskan dari komputer dengan mencabut kabel USB dan mencabut soket 220VAC.
LA.2. Prosedur Penggunaan Program MatLab
Bagian ini menjelaskan tentang bagaimana cara menggunakan program MatLab yang telah dirancang. Lakukan install terhadap program stand alone MatLab pada komputer dan kemudian buka program tersebut.
Setelah alat dihubungkan dengan komputer, lakukan pemilihan terhadap port yang menjadi koneksi dari komputer ke alat.Kemudian, tekan tombol connect untuk melakukan koneksi dengan alat. Koneksi berhasil ditandai dengan berubahnya tombol connect menjadi disconnect.
Selanjutnya, melakukan pemilihan terhadap jenis buah yang ingin dilakukan pembacaan tingkat kematangannya.Jenis buah yang dapat dipilih
xxv
terdapat pada bagian “Pilih Buah”. Tidak tepatnya pemilihan jenis buah akan mengalami pembacaan tingkat kematangan buah tidak tepat.
Kemudian, menunggu alat memulai proses pembacaan dan mengirimkan datanya ke program MatLab. Ketika data diterima, maka akan ditampilkan pada program MatLab sehingga pengguna dapat melihat tingkat kematangan buah. Jika ingin melakukan pembacaan berikutnya, cukup menunggu saja data dari alat. Tapilan akan dibersihkan dan diganti dengan data pembacaan yang baru.
Ketika selesai menggunakan program, lakukan disconnect terlebih dahulu dan kemudian keluar dari program atau dapat langsung menekan tombol “Exit” atau menggunakan tanda silang yang terdapat pada kanan atas dari tampilan program tanpa melakukan disconnect terlebih dahulu.
xxvi
LAMPIRAN B
Data Hasil Penelitian
xxvii
LB.1. Uji Lab Model empiris
xxviii
LB.2. Data Percobaan
xxix
Tabel LB.1. Data Uji Pengetahuan Manusia Buah Alpukat.
Sampel
Hasil Pembacaan Alat Hasil Analisa Manusia Kadar Air (%) Kekerasan Kematangan Persentase Kematangan Kematangan 1 87.74 0.55 Lewat Matang 142.73 Lewat Matang 86.21 0.58 Matang 124.84 88.11 0.54 Lewat Matang 145.85 2 85.47 0.63 Matang 102.43 Matang 85.89 0.71 Matang 100 86.32 0.6 Matang 103.38 3 87.45 0.75 Matang 99.32 Matang 86.94 0.77 Matang 98.43 85.71 0.8 Mengkal 87.83 4 87.53 0.57 Lewat Matang 132.41 Lewat Matang error error error error
85.79 0.6 Matang 102.63 5 86.23 0.7 Matang 100 Matang 86.92 0.68 Matang 98.65 87.53 0.66 Matang 99.42 8 87.42 0.71 Matang 98.63 Matang 86.59 0.74 Matang 97.49 86.75 0.69 Matang 102.48 9 87.45 0.73 Mengkal 94.83 Matang 86.9 0.73 Matang 97.82 87.65 0.7 Matang 98.64 10 85.74 0.79 Mengkal 89.94 Mengkal 85.93 0.77 Matang 96.26 86.74 0.8 Mengkal 88.58 11 87.86 0.55 Lewat Matang 138.95 Lewat Matang 87.65 0.57 Lewat Matang 133.56 86.25 0.6 Matang 119.28 12 86.73 0.69 Matang 104.58 Matang 87.86 0.71 Matang 101.37 86.61 0.75 Matang 97.94 13
error error error error error error error error
xxx 14 86.38 0.57 Matang 126.84 Lewat Matang 87.95 0.6 Matang 120.36 88.74 0.57 Lewat Matang 128.48 16 86.94 0.68 Matang 106.48 Matang 86.16 0.7 Matang 100 85.86 0.7 Mengkal 97.53 17 86.94 0.71 Matang 101.28 Matang 86.16 0.73 Matang 102.83 85.86 0.68 Matang 105.39 18 87.34 0.74 Matang 96.48 Matang 87.91 0.77 Matang 94.2 87.2 0.71 Matang 98.35 19 86.92 0.67 Matang 107.28 Matang 86.96 0.7 Matang 100 87.42 0.7 Matang 101.47 20
error error error error
86.23 0.56 Lewat Matang 128.93 Lewat Matang 85.58 0.59 Lewat Matang 124.57 21 86.74 0.68 Matang 106.48 Matang 86.92 0.71 Matang 98.67 85.94 0.7 Matang 101.24 23 87.75 0.58 Matang 127.85 Lewat Matang 88.02 0.56 Lewat Matang 131.39 87.3 0.6 Matang 117.48 24 86.49 0.73 Matang 97.36 Matang 86.63 0.75 Matang 95.86 86.93 0.74 Matang 96.46 25 85.94 0.74 Matang 95.86 Matang 86.62 0.76 Matang 94.67 86.09 0.73 Matang 98.42 26 87.43 0.54 Lewat Matang 134.83 Lewat Matang 87.82 0.55 Lewat Matang 132.45 88.03 0.57 Matang 131.57 27 88.31 0.59 Matang 126.78 Lewat Matang 88.72 0.56 Lewat Matang 126.46
xxxi 28 87.67 0.56 Lewat Matang 132.78 Lewat Matang 87.38 0.59 Matang 118.37 87.95 0.59 Lewat Matang 124.92 29 85.48 0.79 Mengkal 88.85 Mengkal 85.93 0.81 Mengkal 86.48 84.99 0.78 Matang 93.47
Tabel LB.2. Data Uji Lab IPB Buah Alpukat.
No. Sampel
Hasil Pembacaan Alat Hasil Analisa Lab IPB Kadar
Air (%) Kekerasan Kematangan
Persentase Kematangan Kematangan Kadar Air (%) Kekerasan 6 84.51 0.65 Matang 121.03 Matang 85.99 0.55 85.12 0.68 Matang 123.51 86.08 0.77 Mentah 79.71 85.23 0.61 Matang 115.91 84.89 0.51 Matang 134.48 85.42 0.45 Lewat Matang 157.61
error error error error
86.55 0.63 Lewat
Matang 152.43
error error error error
85.24 0.6 Lewat Matang 147.89 7 87.99 0.55 Matang 124.89 Matang 88.77 0.65 86.51 0.61 Matang 103.73 89.34 0.79 Matang 100
error error error error
88.21 0.77 Mengkal 84.71 86.87 0.7 Mentah 80.43 87.37 0.69 Matang 98.01 87.83 0.59 Lewat Matang 139.04 85.98 0.63 Matang 119.32 87.31 0.66 Matang 106.87 15 87.01 0.6 Matang 97.89 Matang 87.38 0.69
error error error error
error error error error
xxxii
86.71 0.65 Matang 98.41 87.98 0.71 Mengkal 85.49 88.01 0.63 Mengkal 87.34
error error error error
87.67 0.68 Matang 97.99 87.34 0.66 Matang 98.51 22 85.55 0.79 Mengkal 87.56 Matang 86.35 0.72 85.98 0.8 Mengkal 85.31 87.03 0.76 Matang 98.54 86.71 0.75 Matang 99.87
error error error error
86.88 0.69 Matang 97.5
86.01 0.74 Matang 98.13
87.02 0.75 Matang 100
86.91 0.71 Matang 99.52
error error error error
30 84.4 0.69 Matang 93.47 Matang 83.95 0.59 83.56 0.65 Matang 96.77 84.23 0.61 Matang 97.62 82.99 0.41 Lewat Matang 124.03 83.76 0.57 Matang 100 84.55 0.64 Mengkal 89.33 84.32 0.64 Mengkal 87.51
error error error error
84.14 0.65 Matang 91.05
error error error error
Tabel LB.3. Data Uji Pengetahuan Manusia Buah Mangga.
Sampel
Hasil Pembacaan Alat Hasil Analisa Manusia Kadar Air (%) Kekerasan Kematangan Persentase Kematangan Kematangan 1 87.14 0.77 Matang 101.83 Matang 86.93 0.8 Matang 100 86.84 0.83 Matang 98.43 3 86.12 0.82 Matang 102.23 Matang 86.58 0.8 Matang 101.89 87.84 0.76 Matang 104.27 4 85.54 0.9 Mengkal 80.29 Matang 86.34 0.88 Matang 96.39
xxxiii 87.58 0.79 Matang 102.64 6 87.89 0.67 Lewat Matang 134.87 Lewat Matang error error error error
87.43 0.7 Matang 108.34 7 86.86 0.79 Matang 105.84 Matang 86.69 0.8 Matang 99.75 86.21 0.84 Matang 97.48 8 86.31 0.85 Matang 96.86 Matang 86.03 0.81 Matang 98.63 86.99 0.79 Matang 104.83 9
error error error error
86.4 0.88 Matang 95.38 Matang 86.23 0.85 Matang 96.49 10 87.69 0.78 Matang 102.48 Matang 87.36 0.76 Matang 105.39 86.31 0.83 Matang 98.92 11 86.46 0.8 Matang 98.29 Matang 86.68 0.8 Matang 98.58
error error error error 12 84.92 0.97 Mentah 82.94 Mentah 85.37 0.95 Mengkal 89.84 85.98 0.94 Mengkal 91.27 13 86.86 0.75 Matang 106.48 Matang error error error error
87.2 0.78 Matang 103.38 14 84.68 0.97 Mentah 83.49 Mentah 84.93 0.96 Mentah 85.94 85.87 0.93 Mengkal 92.64 15 85.03 0.96 Mentah 86.53 Mentah 84.98 0.95 Mengkal 88.35 84.67 0.97 Mentah 85.47 17 86.64 0.87 Matang 95.37 Matang 86.69 0.85 Matang 97.25 86.31 0.84 Matang 97.79 18 87.98 0.79 Matang 103.64 Matang 86.34 0.8 Matang 97.3 86.54 0.83 Matang 96.68 19
error error error error
88.02 0.66 Lewat
Matang 130.38 Lewat Matang
xxxiv Matang 20 87.79 0.79 Matang 102.48 Matang 86.56 0.82 Matang 96.69 87.74 0.77 Matang 104.58 21 87.47 0.76 Matang 107.59 Matang 87.68 0.78 Matang 104.51 87.36 0.74 Matang 110.58 23 85.84 0.97 Mentah 85.79 Mentah 85.31 0.96 Mentah 88.39 86.02 0.94 Mengkal 90.28 24 86.63 0.87 Matang 98.48 Matang 86.32 0.85 Matang 98.59 86.78 0.88 Mengkal 96.46 25 86.61 0.86 Matang 100 Matang 85.84 0.9 Mengkal 94.84
error error error error 27 85.57 0.9 Mengkal 93.98 Mentah 84.78 0.93 Mengkal 91.38 86.21 0.88 Matang 97.58 28 87.98 0.79 Matang 105.39 Matang 86.58 0.83 Matang 98.36 86.39 0.81 Matang 100 29 87.84 0.75 Matang 104.68 Matang 87.53 0.76 Matang 103.57 86.93 0.79 Matang 100 30 85.68 0.9 Mengkal 95.38 Mentah 86.13 0.88 Matang 97.46 85.99 0.89 Mengkal 97.98
Tabel LB.4. Data Uji Lab IPB Buah Mangga.
No. Sampel
Hasil Pembacaan Alat Hasil Analisa Lab IPB Kadar
Air (%) Kekerasan Kematangan
Persentase Kematangan Kematangan Kadar Air (%) Kekerasan 2 81.31 0.87 Matang 100 Matang 80.8 0.86 82.45 0.75 Matang 102.47
error error error error
80.44 0.78 Matang 101.57 82.39 0.87 Matang 118.55 81.64 0.78 Matang 101.98
xxxv 80.51 0.78 Lewat Matang 102.5 79.77 0.88 Mengkal 89.66 78.45 0.87 Matang 97.82 81.6 0.87 Matang 100 5 83.32 0.78 Matang 98.55 Matang 83.45 0.76 86.64 0.68 Lewat Matang 142.71 83.39 0.81 Matang 95.99
error error error error
84.44 0.64 Lewat
Matang 125.41
83.62 0.74 Matang 110.61 83.78 0.75 Matang 110.98 83.33 0.68 Matang 111.83
error error error error
84.87 0.61 Lewat Matang 129.76 16 85.47 0.79 Matang 103.28 Mengkal 85.91 0.93 84.42 0.88 Matang 93.48 84.78 0.87 Matang 100 86.33 0.95 Mengkal 87.47
error error error error
85.73 0.89 Matang 99.56 86.54 0.89 Matang 101.34 84.99 0.91 Mengkal 92.67 86.23 0.9 Mengkal 93.2 85.66 0.85 Matang 97.93 22 86.8 0.88 Matang 101.25 Matang 86.76 0.89 86.53 0.7 Matang 109.47 85.99 0.85 Matang 100 85.98 0.92 Mengkal 89.35 86.34 0.91 Mengkal 92.98
error error error error
86.51 0.86 Matang 102.74 87.2 0.81 Matang 101.38 86.89 0.83 Matang 103.32 87.03 0.9 Mengkal 90.02 26 86.05 0.69 Lewat Matang 135.34 Matang 85.98 0.77 85.06 0.72 Matang 104.77 85.51 0.75 Matang 102.39
xxxvi 85.78 0.8 Matang 97.74 86.98 0.82 Mengkal 92.21 86.23 0.8 Matang 95.98 85.43 0.79 Matang 100 84.99 0.73 Matang 96.21 86.21 0.8 Matang 94.8
error error error error
Tabel LB.5. Data Uji Pengetahuan Manusia Buah Pepaya.
Sampel Kadar Air
(%) Kekerasan Kematangan Persentase Kematangan Kematangan 1 87.39 0.83 Matang 102.37 Matang 86.85 0.8 Matang 107.29 86.95 0.84 Matang 101.48 2 90.54 0.49 Busuk 163.29 Busuk 91.23 0.53 Busuk 154.75
error error error error 3 88.91 0.89 Matang 98.27 Matang 87.49 0.88 Matang 96.48 87.12 0.88 Matang 97.38 4 86.48 0.85 Matang 100 Matang 87.13 0.87 Matang 98.38 87.69 0.84 Matang 102.64 5
error error error error
88.43 0.89 Matang 95.39 Matang 90.28 0.92 Mengkal 89.29 7 87.84 0.79 Lewat Matang 128.38 Lewat Matang 87.12 0.82 Matang 109.32 88.48 0.75 Lewat Matang 131.49 8 89.54 0.73 Lewat Matang 137.28 Lewat Matang 88.29 0.77 Lewat Matang 127.45 88.47 0.76 Lewat Matang 130.28 9 87.59 0.84 Matang 103.72 Matang 86.43 0.81 Matang 108.63 87.56 0.78 Lewat Matang 127.39
xxxvii 11 86.98 0.86 Matang 98.74 Matang 87.01 0.84 Matang 100 87.26 0.84 Matang 101.84 12
error error error error
89.46 0.9 Mengkal 89.72 Mengkal
error error error error
13 88.59 0.76 Lewat Matang 128.38 Lewat Matang 87.39 0.8 Matang 110.92 88.46 0.79 Lewat Matang 126.47 14 87.95 0.76 Lewat Matang 129.94 Lewat Matang 87.88 0.77 Lewat Matang 127.38 89.47 0.74 Lewat Matang 130.28 15 88.38 0.72 Lewat Matang 131.74 Lewat Matang 87.19 0.74 Lewat Matang 129.93 89.74 0.75 Lewat Matang 127.48 16 87.5 0.81 Matang 105.26 Matang 86.95 0.83 Matang 103.85 87.64 0.84 Matang 102.19 18 87.59 0.88 Matang 97.39 Matang 88.14 0.85 Matang 100 88.36 0.86 Matang 98.38 20 89.03 0.96 Mengkal 85.18 Mentah 90.72 0.99 Mentah 80.57 90.43 0.99 Mentah 79.98 21 88.92 0.75 Lewat Matang 129.38 Lewat Matang 87.59 0.77 Lewat Matang 128.84 87.28 0.75 Lewat Matang 128.59 22 87.35 0.83 Matang 104.28 Matang 87.64 0.82 Matang 106.85
error error error error
23 86.89 0.79
Lewat
Matang 127.83 Lewat Matang
xxxviii Matang 87.37 0.8 Matang 107.64 24 90.83 0.93 Mengkal 89.34 Mengkal 89.26 0.91 Mengkal 92.55 87.94 0.88 Matang 96.39 25 87.38 0.86 Matang 98.27 Matang 87.99 0.86 Matang 98.77 88.38 0.89 Matang 95.39 26 87.59 0.84 Matang 102.38 Matang 87.89 0.85 Matang 100 86.28 0.87 Matang 96.37 27 88.48 0.89 Matang 96.29 Matang 90.26 0.9 Mengkal 93.22 87.39 0.86 Matang 97.84 28 87.59 0.83 Matang 106.62 Matang 88.39 0.81 Matang 106.39 87.94 0.8 Matang 108.64 30
error error error error
89.74 0.77 Lewat
Matang 130.26 Matang
87.29 0.8 Matang 107.75
Tabel LB.6. Data Uji Lab IPB Buah Pepaya.
No. Sampel
Hasil Pembacaan Alat Hasil Analisa Lab IPB Kadar
Air (%) Kekerasan Kematangan
Persentase Kematangan Kematangan Kadar Air (%) Kekerasan 6 88.06 0.72 Lewat Matang 135.92 Lewat Matang 89.24 0.7 88.67 0.65 Lewat Matang 145.62 89.21 0.66 Lewat Matang 146.28 88.38 0.74 Lewat Matang 133.87 89.52 0.8 Matang 119.63 88.79 0.79 Matang 121.29 89.33 0.81 Matang 117.78 89.57 0.75 Lewat Matang 130.63
error error error error
xxxix 10 86.86 0.8 Matang 105.23 Matang 87.63 0.85 86.97 0.82 Matang 108.8 87.42 0.89 Matang 98.23 87.53 0.85 Matang 100 87.97 0.9 Mengkal 89.38 86.79 0.92 Mengkal 92.64 88.02 0.84 Matang 100
error error error error
86.99 0.9 Mengkal 88.82 87.78 0.83 Matang 98.73 17 87.55 0.7 Lewat Matang 135.83 Lewat Matang 87.24 0.74 87.67 0.63 Lewat Matang 144.34 87.91 0.69 Lewat Matang 141.85
error error error error
86.69 0.78 Matang 120.36 88.03 0.75 Matang 122.84 87.7 0.75 Lewat Matang 132.75 87.82 0.8 Matang 105.73 86.87 0.74 Lewat Matang 134.52
error error error error
19
88.68 0.9 Mengkal 89.64
Mengkal 90.67 0.98 89.03 0.92 Mengkal 90.53
89.64 0.85 Matang 100
error error error error
89.85 0.87 Matang 98.75 89.63 0.91 Mengkal 89.92 88.85 0.88 Matang 103.62 88.03 0.9 Mengkal 88.97
error error error error
88.95 0.8 Matang 109.64 29 89.9 0.89 Mengkal 91.93 Mengkal 90.23 0.91 90.31 0.95 Mengkal 84.62 88.86 0.9 Mengkal 88.64
error error error error
90.43 0.86 Matang 97.88 89.75 0.91 Mengkal 88.23 88.9 0.85 Matang 100
xl
89.85 0.89 Mengkal 93.72 89.94 0.88 Matang 95.83 88.87 0.84 Matang 101.23
xli
LAMPIRAN C
Dokumentasi Penelitian
xlii
xliii
xliv
xlv
xlvi
Gambar LC.5. Foto 1 Uji Buah Berdasarkan Pengetahuan Manusia
xlvii
LAMPIRAN D
Coding Peranti Lunak
xlviii
LD.1. Coding Alat
Modul Main #include <mega8.h> #include <delay.h> #include <string.h> #include <UARTlib.h> #include <Ultrasoniclib.h> #include <ADClib.h> #include <stdio.h> #define TRUE 1 #define FALSE 0 #define LED_ON 0 #define LED_OFF 1#define CONNECT PORTB.0 #define PROCESS PORTB.4 #define SENDING PORTB.5 #define TRIGGER PIND.3
void Initialization(void);
void Processing(unsigned char *Data1, unsigned char *Data2, unsigned char *Data3, unsigned char *Data4, unsigned char *Data5, unsigned char *Data6); unsigned char Connecting(void);
xlix
unsigned char Sending(unsigned char *Data1, unsigned char *Data2, unsigned char *Data3, unsigned char *Data4, unsigned char *Data5, unsigned char *Data6);
void main(void) {
unsigned char Tries, Status=FALSE; unsigned char Texture1[4], Water1[4]; unsigned char Texture2[4], Water2[4]; unsigned char Texture3[4], Water3[4];
Initialization(); while(1) { while(Connecting() == FALSE); Status = TRUE; while(1) { while(TRIGGER == TRUE) { if(Disconnect() == TRUE) {
l Status = FALSE; break; } } if(Status == FALSE) break;
Processing(Texture1, Water1, Texture2, Water2, Texture3, Water3);
for(Tries=0;Tries<3;Tries++) {
if(Sending(Texture1, Water1, Texture2, Water2, Texture3, Water3) == TRUE) break; } if(Tries == 3) SENDING = LED_OFF; while(TRIGGER == FALSE); } } }
li void Initialization(void) { DDRB = 0xFF; //DDRC = 0xFF; DDRD = 0x00; CONNECT = LED_ON; PROCESS = LED_ON; SENDING = LED_ON; delay_ms(250); CONNECT = LED_OFF; PROCESS = LED_OFF; SENDING = LED_OFF; //PORTC = 0x00; PORTD = 0xFF; Init_UART(9600); ADMUX = 0x00; ADCSRA = 0x81; PORTB.1 = 0; PORTB.2 = 0; //TCCR1A = 0xA2; //TCCR1B = 0x18; //OCR1A = 0x0000;
lii //OCR1B = 0x0000;
}
unsigned char Connecting(void) {
unsigned char Chk_Con;
Chk_Con = Receive_Data(0); if(Chk_Con == 'C') { Send_Data("C"); Chk_Con = Receive_Data(500); if(Chk_Con == 'Y') { CONNECT = LED_ON; return TRUE; } else return FALSE; } else return FALSE; }
liii unsigned char Disconnect(void)
{
unsigned char Chk_Con;
Chk_Con = Receive_Data(5); if(Chk_Con == 'D') { Send_Data("D"); CONNECT = LED_OFF; return TRUE; } else return FALSE; }
void Processing(unsigned char *Data1, unsigned char *Data2, unsigned char *Data3, unsigned char *Data4, unsigned char *Data5, unsigned char *Data6) {
int TryCalc;
unsigned char tmpData1[2]; unsigned char tmpData2[2]; unsigned char tmpData3[2]; unsigned char tmpData4[2]; unsigned char tmpData5[2];
liv unsigned char tmpData6[2];
PROCESS = LED_ON;
TryCalc = 0;
memset(tmpData1, 0x00, sizeof(tmpData1));
while((tmpData1[0] == 0x00) && (tmpData1[1] == 0x00) && (TryCalc < 3)) {
Frequency_35KHz(); Read_ADC(0, tmpData1); TryCalc++;
}
delay_ms(1000); // need delay to clear the sound first
TryCalc = 0;
memset(tmpData2, 0x00, sizeof(tmpData2));
while((tmpData2[0] == 0x00) && (tmpData2[1] == 0x00) && (TryCalc < 3)) {
Frequency_45KHz();
Read_ADC(0, tmpData2); TryCalc++;
lv
delay_ms(1000); // need delay to clear the sound first
TryCalc = 0;
memset(tmpData3, 0x00, sizeof(tmpData3));
while((tmpData3[0] == 0x00) && (tmpData3[1] == 0x00) && (TryCalc < 3)) {
Frequency_35KHz(); Read_ADC(0, tmpData3); TryCalc++;
}
delay_ms(1000); // need delay to clear the sound first
TryCalc = 0;
memset(tmpData4, 0x00, sizeof(tmpData4));
while((tmpData4[0] == 0x00) && (tmpData4[1] == 0x00) && (TryCalc < 3)) {
Frequency_45KHz();
Read_ADC(0, tmpData4); TryCalc++;
}
lvi TryCalc = 0;
memset(tmpData5, 0x00, sizeof(tmpData5));
while((tmpData5[0] == 0x00) && (tmpData5[1] == 0x00) && (TryCalc < 3)) {
Frequency_35KHz(); Read_ADC(0, tmpData5); TryCalc++;
}
delay_ms(1000); // need delay to clear the sound first
TryCalc = 0;
memset(tmpData6, 0x00, sizeof(tmpData6));
while((tmpData6[0] == 0x00) && (tmpData6[1] == 0x00) && (TryCalc < 3)) { Frequency_45KHz(); Read_ADC(0, tmpData6); TryCalc++; } memset(Data1, 0x00, sizeof(Data1));
sprintf(Data1, "%X%X", tmpData1[0], tmpData1[1]); memset(Data2, 0x00, sizeof(Data2));
lvii memset(Data3, 0x00, sizeof(Data3));
sprintf(Data3, "%X%X", tmpData3[0], tmpData3[1]); memset(Data4, 0x00, sizeof(Data4));
sprintf(Data4, "%X%X", tmpData4[0], tmpData4[1]);
memset(Data5, 0x00, sizeof(Data5));
sprintf(Data5, "%X%X", tmpData5[0], tmpData5[1]); memset(Data6, 0x00, sizeof(Data6));
sprintf(Data6, "%X%X", tmpData6[0], tmpData6[1]);
PROCESS = LED_OFF; }
unsigned char Sending(unsigned char *Data1, unsigned char *Data2, unsigned char *Data3, unsigned char *Data4, unsigned char *Data5, unsigned char *Data6) {
unsigned char ACK;
SENDING = LED_ON;
Send_Data(Data1);
ACK = Receive_Data(500); if(ACK != 'S')
lviii return FALSE; Send_Data(Data2); ACK = Receive_Data(500); if(ACK != 'S') return FALSE; Send_Data(Data3); ACK = Receive_Data(500); if(ACK != 'S') return FALSE; Send_Data(Data4); ACK = Receive_Data(500); if(ACK != 'S') return FALSE; Send_Data(Data5); ACK = Receive_Data(500); if(ACK != 'S') return FALSE; Send_Data(Data6); ACK = Receive_Data(500);
lix if(ACK != 'S') return FALSE; SENDING = LED_OFF; return TRUE; } Modul ADClib #include <mega8.h> #include <delay.h> #include <string.h>
#define mode_ADC 0x00 // 0x00 for ADLAR = 0, 0x20 for ADLAR = 1
void Read_ADC(unsigned char pin_adc, unsigned char *Data) {
unsigned char pADCH, pADCL;
//DDRC = 0x00; //PORTC = 0x00; delay_ms(2000); memset(Data, 0x00, sizeof(Data)); while(1) {
lx ADMUX = pin_adc | mode_ADC; ADCSRA |= 0x40;
while((ADCSRA & 0x10) == 0); ADCSRA |= 0x10;
pADCL = ADCL;
pADCH = ADCH & 0x03;
if(Data[0] < pADCH) Data[1] = 0x00;
if((Data[0] <= pADCH) && (Data[1] < pADCL)) { Data[0] = pADCH; Data[1] = pADCL; } else { TCCR1A = 0x00; TCCR1B = 0x00; PORTB.1 = 0; PORTB.2 = 0; //TCCR1B = 0x18; break;
lxi } delay_ms(500); } //DDRC = 0xFF; //PORTC = 0x00; } Modul Ultrasoniclib #include <mega8.h> void Frequency_35KHz(void) { TCCR1A = 0xA2; //TCCR1B = 0x18; TCCR1B = 0x1A; ICR1 = 0x001B; OCR1A = 0x0018; OCR1B = 0x0018; } void Frequency_45KHz(void) { TCCR1A = 0xA2;
lxii //TCCR1B = 0x18; TCCR1B = 0x1A; //ICR1 = 0x0018; ICR1 = 0x0015; OCR1A = 0x0012; OCR1B = 0x0012; } Modul UARTlib #include <mega8.h> #include <stdio.h> #include <delay.h>
void Init_UART(unsigned long int baud_rate) {
const long int oscilator = 8000000; unsigned long int UBRR;
UBRR = (oscilator/(16*baud_rate))-1; UBRRL = UBRR; UBRRH = UBRR>>8; UCSRB = 0x18; UCSRC = 0x86; }
lxiii unsigned char Receive_Data(int Delay) {
if(Delay > 0) {
while( !(UCSRA & 0x80) ) { delay_ms(1); Delay--; if(Delay == 0) return 0; } return UDR; } else return getchar(); }
void Send_Data(unsigned char *Data) {
delay_ms(10); // need delay to clear the transmition puts(Data);
}
lxiv
function varargout = SoftComputing(varargin)
% SOFTCOMPUTING MATLAB code for SoftComputing.fig
% SOFTCOMPUTING, by itself, creates a new SOFTCOMPUTING or raises the existing
% singleton*. %
% H = SOFTCOMPUTING returns the handle to a new SOFTCOMPUTING or the handle to
% the existing singleton*. %
% SOFTCOMPUTING('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in SOFTCOMPUTING.M with the given input arguments.
%
% SOFTCOMPUTING('Property','Value',...) creates a new SOFTCOMPUTING or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before SoftComputing_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to SoftComputing_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)". %
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help SoftComputing % Last Modified by GUIDE v2.5 15-Sep-2013 11:28:53
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @SoftComputing_OpeningFcn, ...
'gui_OutputFcn', @SoftComputing_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
lxv
function SoftComputing_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn. % hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % varargin command line arguments to SoftComputing (see VARARGIN)
% Choose default command line output for SoftComputing
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes SoftComputing wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = SoftComputing_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure
varargout{1} = handles.output;
% Create Own Function --Start
function Main_Idle(hObject, eventdata, handles) handles = guidata(handles)
RetVal = open_serial(handles.com)
if RetVal == 0
set(handles.pushbutton1, 'String', 'Connect') handles.con_stat = false stop(handles.idle_loop) guidata(handles.guifig, handles) return end Water1 = fgetl(handles.com) if isempty(Water1) fclose(handles.com) return end fwrite(handles.com, 'S') Texture1 = fgetl(handles.com) if isempty(Texture1) fclose(handles.com) return end fwrite(handles.com, 'S')
lxvi Water2 = fgetl(handles.com) if isempty(Water2) fclose(handles.com) return end fwrite(handles.com, 'S') Texture2 = fgetl(handles.com) if isempty(Texture2) fclose(handles.com) return end fwrite(handles.com, 'S') Water3 = fgetl(handles.com) if isempty(Water3) fclose(handles.com) return end fwrite(handles.com, 'S') Texture3 = fgetl(handles.com) if isempty(Texture3) fclose(handles.com) return end fwrite(handles.com, 'S') fclose(handles.com)
TextureDec = (hex2dec(Texture1) + hex2dec(Texture2) + hex2dec(Texture3)) / 3
WaterDec = (hex2dec(Water1) + hex2dec(Water2) + hex2dec(Water3)) / 3
if (WaterDec > 50) || (TextureDec > 50)
fis_figure = readfis(strcat(handles.fruit_choose, '_Air')) result_water = evalfis(WaterDec, fis_figure)
fis_figure = readfis(strcat(handles.fruit_choose, '_Tekstur')) result_texture = evalfis(TextureDec, fis_figure)
fis_figure = readfis(handles.fruit_choose)
result_analysis = evalfis([TextureDec WaterDec], fis_figure)
switch handles.fruit_choose
case'Mangga'
if result_analysis < 70
text_result = 'Mentah'
elseif (result_analysis >= 70) && (result_analysis < 80) text_result = 'Mengkal'
elseif (result_analysis >= 80) && (result_analysis < 145) text_result = 'Matang'
elseif (result_analysis >= 145) && (result_analysis < 180) text_result = 'Lewat Matang'
else text_result = 'Busuk' end case'Alpukat' if result_analysis < 80 text_result = 'Mentah'
elseif (result_analysis >= 80) && (result_analysis < 90) text_result = 'Mengkal'
lxvii
text_result = 'Matang'
elseif (result_analysis >= 110) && (result_analysis < 130) text_result = 'Lewat Matang'
else text_result = 'Busuk' end case'Pepaya' if result_analysis < 75 text_result = 'Mentah'
elseif (result_analysis >= 75) && (result_analysis < 90) text_result = 'Mengkal'
elseif (result_analysis >= 90) && (result_analysis < 115) text_result = 'Matang'
elseif (result_analysis >= 115) && (result_analysis < 165) text_result = 'Lewat Matang'
else
text_result = 'Busuk'
end end
set(handles.edit1, 'String', strcat(sprintf('%0.2f', result_water), ' %'))
set(handles.edit2, 'String', sprintf('%0.2f', result_texture)) set(handles.edit3, 'String', strcat(sprintf('%0.2f',
result_analysis), ' %'))
set(handles.edit4, 'String', text_result)
else
set(handles.edit1, 'String', 'ERROR') set(handles.edit2, 'String', 'ERROR') set(handles.edit3, 'String', 'ERROR') set(handles.edit4, 'String', 'ERROR')
end
guidata(handles.guifig, handles)
function Ret = open_serial(serial_port)
try
fopen(serial_port)
catch
Ret = 0
figure = msgbox('Open Port Failed', 'Communication', 'error') uiwait(figure)
return end
Ret = 1
% Create Own Function --End
% --- Executes during object creation, after setting all properties.
function figure1_CreateFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
handles.fruit_choose = 'Mangga'
handles.con_stat = false
lxviii
handles.guifig = gcf handles.idle_loop = timer
set(handles.idle_loop, 'ExecutionMode', 'fixedSpacing')
set(handles.idle_loop, 'TimerFcn', {@Main_Idle, handles.guifig}) set(handles.idle_loop, 'Period', 0.1)
guidata(hObject, handles)
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1
com = get(hObject, 'Value')
switch com case 1 com = 'COM1' case 2 com = 'COM2' case 3 com = 'COM3' case 4 com = 'COM4' case 5 com = 'COM5' case 6 com = 'COM6' case 7 com = 'COM7' case 8 com = 'COM8' case 9 com = 'COM9' end
set(handles.com, 'Port', com) guidata(hObject, handles)
% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
lxix
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
if handles.con_stat == false RetVal = open_serial(handles.com) if RetVal == 0 return end fwrite(handles.com, 'C') Data = fgetl(handles.com) if Data ~= 'C'
msgbox('Connection Failed', 'Communication', 'error')
return end
fwrite(handles.com, 'Y') fclose(handles.com)
set(handles.pushbutton1, 'String', 'Disconnect') handles.con_stat = true start(handles.idle_loop) else stop(handles.idle_loop) RetVal = open_serial(handles.com) if RetVal == 0 return end fwrite(handles.com, 'D') Data = fgetl(handles.com) if Data ~= 'D'
msgbox('Connection Failed', 'Communication', 'error')
return end
fclose(handles.com)
set(handles.pushbutton1, 'String', 'Connect') handles.con_stat = false
end
guidata(hObject, handles)
% --- Executes when user attempts to close figure1.
function figure1_CloseRequestFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Hint: delete(hObject) closes the figure
if handles.con_stat == true stop(handles.idle_loop) RetVal = 1;
try
lxx catch RetVal = 0 end if RetVal == 1 fwrite(handles.com, 'D') fclose(handles.com) end end delete(hObject);
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close
% --- Executes when selected object is changed in uipanel2.
function uipanel2_SelectionChangeFcn(hObject, eventdata, handles)
% hObject handle to the selected object in uipanel2 % eventdata structure with the following fields (see UIBUTTONGROUP)
% EventName: string 'SelectionChanged' (read only)
% OldValue: handle of the previously selected object or empty if none was selected
% NewValue: handle of the currently selected object
% handles structure with handles and user data (see GUIDATA)
switch get(eventdata.NewValue, 'Tag')
case'radiobutton1' handles.fruit_choose = 'Mangga' case'radiobutton2' handles.fruit_choose = 'Alpukat' case'radiobutton3' handles.fruit_choose = 'Pepaya' end guidata(hObject, handles)
lxxi
LAMPIRAN E
Datasheet
lxxiv
LE.2. Datasheet ATMEGA8
lxxvii
LE.3. Datasheet CA3130
lxxxi