Tugas Akhir - Adri Irfan Luthfan Fadhilah [PDF]

  • Author / Uploaded
  • redho
  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

RANCANG BANGUN SISTEM AKUISISI DATA DAN PENGENDALI NUTRISI PADA SISTEM HIDROPONIK NFT BERBASIS FUZZY LOGIC CONTROLLER DAN NODE-RED TUGAS AKHIR Diajukan untuk memenuhi syarat akademik pada program Strata-1 Jurusan Teknik Elektro Universitas Jenderal Achmad Yani



Oleh ADRI IRFAN LUTHFAN FADHILAH NIM 2211181078



PROGRAM STUDI TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS JENDERAL ACHMAD YANI 2022



LEMBAR PENGESAHAN RANCANG BANGUN SISTEM AKUISISI DATA DAN PENGENDALI NUTRISI PADA SISTEM HIDROPONIK NFT BERBASIS FUZZY LOGIC CONTROLLER DAN NODE-RED Oleh ADRI IRFAN LUTHFAN FADHILAH 2211181078 Teknik Kendali Dan Instrumentasi Tugas Akhir sudah disetujui



Cimahi, 13 September 2022 Menyetujui, Pembimbing



DEDE IRAWAN SAPUTRA, S.Pd., M.T. NID. 412197591 Mengetahui, Ketua Prodi Teknik Elektro



EEN TARYANA, ST., MT., IPM. NID. 412143271



LEMBAR PERNYATAAN BEBAS PLAGIASI



Yang bertanda tangan di bawah ini Nama Mahasiswa



: Adri Irfan Luthfan Fadhilah



NIM



: 2211181078



Program Studi



: Teknik Elektro



Judul Tugas Akhir



: RANCANG BANGUN SISTEM AKUISISI DATA DAN PENGENDALI NUTRISI PADA SISTEM HIDROPONIK NFT BERBASIS FUZZY LOGIC CONTROLLER DAN NODE-RED



Tugas Akhir (skripsi) tersebut diatas telah dicek plagiasi oleh tim turnitin program studi, disetujui oleh pembimbing, serta diperkenankan untuk dilanjutkan proses cetak dan unggah mandiri.



Cimahi, 13 September 2022 Mengetahui Pembimbing



Mahasiswa



Bermatrai 10.000



Dede Irawan Saputra, S.Pd., M.T. NID 412197591



Adri Irfan Luthfan Fadhilah NIM 2211181078



LEMBAR PERNYATAAN PUBLIKASI KARYA ILMIAH



Yang bertanda tangan di bawah ini Nama Mahasiswa : Adri Irfan Luthfan Fadhilah Tempat, tgl lahir : Cimahi, 07 Desember 1998 NIM : 2211181078 Fakultas/Program Studi : Fakultas Teknik/ Teknik Elektro Judul Tugas Akhir : RANCANG BANGUN SISTEM AKUISISI DATA DAN PENGENDALI NUTRISI PADA SISTEM HIDROPONIK NFT BERBASIS FUZZY LOGIC CONTROLLER DAN NODERED Demi Pengembangan ilmu pengetahuan, menyetujui untuk memberikan kepada Universitas Jenderal Achmad Yani Hak Bebas Royalti Non Ekslusif (Non-exlusive Royalti-Free Right) Atas Karya ilmiah yang berjudul : “Rancang Bangun Sistem Akuisisi Data Dan Pengendali Nutrisi Pada Sistem Hidroponik NFT Berbasis Fuzzy Logic Controller Dan Node-Red” Beserta perangkat yang ada. Dengan Hak bebas Royalti Non Ekslusif ini, Univestas Jenderal Achmad Yani yang berhak menyimpan, mengalih-mediakan, mengelolanya dalam bentuk pangkalan data (database), mendistribusikannya, menampilkan /mempublikasikannya di internet atau media lain untuk kepentingan akademis tanpa perlu meminta izin selama tetap mencantumkan nama-nama kami sebagai penulis/pemilik karya ilmiah ini. Segala bentuk tuntutan hukum yang timbul atas pelanggaran Hak Cipta dalam karya ilmiah ini menjadi tanggung jawab penulis.



Demikian pernyataan ini dibuat dengan sebenarnya. Cimahi, 13 September 2022 Pembimbing



Mahasiswa



Dede Irawan Saputra, S.Pd., M.T. NID 412197591



Adri Irfan Luthfan Fadhilah NIM 22211181078



ABSTRAK Urban farming dengan sistem hidroponik merupakan salah satu solusi untuk berbudidaya tanaman dengan lahan yang terbatas. Pada sistem hidroponik tanaman tumbuh menggunakan media air dengan campuran larutan nutrisi untuk mendapatkan unsur hara sehingga tanaman dapat tumbuh dengan baik. Budidaya tanaman menggunakan sistem hidroponik memerlukan perawatan khusus dalam mengatur dan memantau nilai TDS dan tingkat keasaman dari larutan nutrisi secara rutin, hal ini membuat sistem hidroponik menjadi tidak efektif, sehingga diperlukan sistem akuisisi data dan sistem pengendalian nilai TDS dan tingkat keasaman pada larutan nutrisi agar budidaya menggunakan sistem hidroponik menjadi lebih efektif dan efisien. Tujuan dari tugas akhir ini adalah merancang sistem akuisisi data dan pengendalian nutrisi pada sistem hidroponik NFT menggunakan fuzzy logic dan Node-Red. Perancangan perangkat keras pada sistem akuisisi data pengendalian mencakup mikrokontroler ESP32 sebagai pengendali, analog TDS sensor SEN0244 dan analog pH sensor SEN0161 sebagai masukan, serta diaphragm pump dan water pump sebagai aktuator untuk pengendalian TDS, peristaltic pump sebagai aktuator pengendalian pH. Kemudian pada perancangan perangkat lunak menggunakan Node-Red sebagai alat untuk membuat sistem Internet of Things dengan memanfaatkan Message Queuing Telemetery Transport (MQTT) sebagai protokol komunikasi antara ESP32 dengan Node-Red. Hasil pengujian dengan mengimplementasikan fuzzy logic nilai TDS dapat mencapai dan menjaga tetap pada nilai set point dengan error steady state dibawah 8% sedangkan pada kendali close loop nilai TDS cenderung fluktuatif dan terdapat overshoot, pada pengendalian pH naik dengan mengimplementasikan fuzzy logic hasil respon transien menunjukan nilai pH dapat mencapai set point tanpa adanya overshoot dengan error steady state dibawah 5%. Pengujian sistem selama 4 hari dengan proses penjadwalan menunjukan sistem kendali fuzzy logic dapat mempertahankan nilai TDS dan pH sesuai dengan set point yang diharapkan. Kata kunci : Hidroponik, TDS, pH, fuzzy logic, Node–Red.



i



ABSTRACT



Urban farming with a hydroponic system is one solution for cultivating plants with limited land. In the hydroponic system, plants grow using water media with a mixture of nutrient solutions to get nutrients so that plants can grow well. Cultivation of plants using a hydroponic system requires special care in regulating and monitoring the TDS value and acidity level of the nutrient solution on a regular basis, this makes the hydroponic system ineffective, so a data acquisition system and a system for controlling the TDS value and acidity level of the nutrient solution are needed for cultivation. using a hydroponic system to be more effective and efficient. The purpose of this final project is to design a data acquisition and nutrient control system in an NFT hydroponic system using fuzzy logic and Node-Red. The hardware design for the control data acquisition system includes an ESP32 microcontroller as a controller, an analog TDS sensor SEN0244 and an analog pH sensor SEN0161 as inputs, as well as a diaphragm pump and water pump as actuators for controlling TDS, peristaltic pump as an actuator for controlling pH. Then the software design uses Node-Red as a tool to create an Internet of Things system by utilizing Message Queuing Telemetery Transport (MQTT) as a communication protocol between ESP32 and Node-Red. The test results by implementing fuzzy logic TDS value can reach and maintain the set point value with steady state error below 8% while in close loop control the TDS value tends to fluctuate and there is an overshoot, in controlling pH increases by implementing fuzzy logic the results of the transient response show the value pH can reach the set point without overshoot with steady state error below 5%. System testing for 4 days with a scheduling process shows the fuzzy logic control system can maintain the TDS and pH values according to the expected set point. Keywords : Hydroponics, TDS, pH, fuzzy logic, Node-Red.



ii



KATA PENGANTAR Alhamdulillah, puji syukur penulis panjatkan kepada Allah SWT atas karunia dan kemampuan yang telah diberikan sehingga dapat menyelesaikan tugas akhir yang hasilnya dilaporkan dalam karya tulis. Penulis ingin menyampaikan ucapan terima kasih kepada pihak yang secara langsung maupun tidak langsung memberikan bantuan dalam penyelesaian tugas akhir. Penulis sangat berterima kasih kepada: 1. Orang tua, Bapak Dudung dan Ibu Ratnawati yang telah membantu secara moril maupun materil dan tidak lelah mendukung dengan doa yang tidak pernah henti sehingga penulis dapat menyelesaikan studi di Jurusan Teknik Elektro Unjani. 2. Penulis sangat berterima kasih kepada Bapak Dede Irawan Saputra, S.Pd., M.T. sebagai pembimbing utama yang telah memberikan saran, bimbingan dan nasehatnya selama penyelesaian tugas akhir dan penulisan karya tulis. 3. Penulis berterima kasih kepada Bapak Een Taryana, S.T., M.T., IPM sebagai ketua Jurusan Program Studi Teknik Elektro Universitas Jenderal Achmad Yani. 4. Penulis juga berterima kasih kepada Bapak Zul Fakhri, S.ST., M.T. sebagai dosen wali akademik yang telah memberikan bimbingan dalam setiap proses akademik. 5. Terima kasih disampaikan juga kepada dosen penguji yang membantu secara teknis pada proses sidang. 6. Kepada, Manda Anggita Dewi yang sudah membantu saya selama ini, dan selalu memberi motivasi, terima kasih banyak. 7. Terima kasih kepada rekan-rekan Mahasiswa Asisten Laboratorium Teknik Elektro Universitas Jenderal Achmad Yani 2021-2022 serta rekan-rekan Mahasiswa Teknik Elektro Universitas Jenderal Achmad Yani angkatan 2018 yang banyak membantu dan berjuang sampai tahap ini. 8. Serta kepada pihak-pihak yang telah memberikan bantuan kepada penulis, yang tidak dapat penulis sebutkan satu persatu tanpa mengurangi rasa hormat penulis ucapkan banyak terima kasih.



iii



Semoga Tugas Akhir ini dapat bermanfaat untuk pengembangan ilmu pengetahuan.



Cimahi, 13 September 2022



Adri Irfan Luthfan Fadhilah



iv



DAFTAR ISI ABSTRAK ............................................................................................................... i ABSTRACT ............................................................................................................ ii KATA PENGANTAR ........................................................................................... iii DAFTAR ISI ........................................................................................................... v DAFTAR LAMPIRAN ........................................................................................ viii DAFTAR GAMBAR ............................................................................................. ix DAFTAR TABEL ................................................................................................ xiii DAFTAR SINGKATAN ...................................................................................... xv BAB I PENDAHULUAN ....................................................................................... 1 1.1.



Latar Belakang ............................................................................................. 1



1.2.



Tujuan Penelitian ......................................................................................... 2



1.3.



Batasan Masalah........................................................................................... 2



1.4.



Sistematika Penulisan .................................................................................. 3



BAB II TEORI PENUNJANG ............................................................................... 5 2.1.



Tinjauan Pustaka .......................................................................................... 5



2.2.



Hidroponik ................................................................................................... 6



2.2.1.



Sistem Hidroponik Nutrient Film Technique ............................................ 6



2.3.



Parameter Larutan Nutrisi ............................................................................ 7



2.4.



Larutan pH ................................................................................................... 9



2.5.



Larutan Nutrisi AB Mix ............................................................................. 10



2.6.



Fuzzy Logic ................................................................................................ 11



2.6.1. 2.7.



Fuzzy Logic Tipe Sugeno ....................................................................... 14 Mikrokontroler ........................................................................................... 15



2.7.1.



ESP32 ..................................................................................................... 16



2.7.2.



Konfigurasi Pin ESP32 ........................................................................... 17



2.8.



Sensor ......................................................................................................... 20



v



2.8.1.



pH sensor ................................................................................................ 20



2.8.2.



TDS Sensor ............................................................................................. 21



2.9.



Driver ......................................................................................................... 22



2.9.1.



Driver motor L298N ............................................................................... 22



2.9.2.



Relay ....................................................................................................... 23



2.10.



Motor Servo ............................................................................................ 23



2.11.



Pompa ..................................................................................................... 25



2.11.1. Diaphragm Pump .................................................................................... 25 2.11.2. Peristaltic Pump ...................................................................................... 25 2.12.



Internet of Things ................................................................................... 26



2.13.



MQTT ..................................................................................................... 26



2.14.



Node - Red .............................................................................................. 27



2.15.



JSON (Java Script Object Notation) ...................................................... 28



2.16.



SQLite .................................................................................................... 29



BAB III METODE PENELITIAN........................................................................ 30 3.1.



System Development Life Cycle ................................................................. 30



3.2.



Perancangan Hardware .............................................................................. 31



3.2.1.



Diagram Blok Sistem .............................................................................. 32



3.2.2.



Diagram Blok Sistem Kendali ................................................................ 33



3.2.3.



Perancangan Skematik Sistem ................................................................ 36



3.2.4.



Perancangan PCB.................................................................................... 39



3.3.



Perancangan Software ................................................................................ 41



3.3.1.



Diagram Alir ........................................................................................... 41



3.3.2.



Sub Process Pada Diagram Alir Sistem .................................................. 43



3.3.3.



Data Flow Diagram ................................................................................. 53



3.3.4.



Perancangan Fuzzy logic ......................................................................... 55



3.3.5.



Perancangan Node-Red ........................................................................... 62



vi



3.3.5.



Pembuatan Database SQLite................................................................... 70



3.3.6.



Hosting Node-Red Pada Server .............................................................. 71



BAB IV HASIL PENGUJIAN DAN ANALISIS ................................................. 72 4.1.



Hasil Implementasi Perangkat.................................................................... 72



4.1.1.



Hasil Perancangan Board ........................................................................ 72



4.1.2.



Hasil Pengimplemantasian Perangkat Pada Plant ................................... 74



4.2.



Hasil Pengujian Hardware.......................................................................... 75



4.2.1.



Pengujian sensor dan kalibrasi ................................................................ 75



4.2.2.



Pengujian kendali close loop dan fuzzy logic.......................................... 79



4.3.



Pengujian Software .................................................................................... 94



4.3.1.



Pengujian Proses Koneksi WiFi dan MQTT .......................................... 95



4.3.2.



Pengujian Akses Dashboard ................................................................... 96



4.3.3.



Pengujian Waktu ..................................................................................... 98



4.3.4.



Pengujian Pengiriman Data..................................................................... 98



4.3.5.



Pengujian Penyimpanan Database ....................................................... 103



4.4.



Pengujian Sistem Selama 4 Hari .............................................................. 105



BAB V KESIMPULAN DAN SARAN .............................................................. 107 5.1.



Kesimpulan .............................................................................................. 107



5.2.



Saran ......................................................................................................... 108



DAFTAR PUSTAKA ......................................................................................... 109



vii



DAFTAR LAMPIRAN LAMPIRAN A PERTUMBUHAN TANAMAN ............................................... A-1 LAMPIRAN B KALIBRASI SENSOR ............................................................ B-1 LAMPIRAN C CODING ESP32 ........................................................................ C-1



viii



DAFTAR GAMBAR Gambar 2. 1 Sistem hidroponik Nutrient Film Technique [12]. ............................. 7 Gambar 2. 2 Larutan pH naik dan pH turun.......................................................... 10 Gambar 2. 3 Larutan nutrisi AB mix. ................................................................... 10 Gambar 2. 4 Representasi kurva segitiga. ............................................................. 12 Gambar 2. 5 Representasi kurva trapesium........................................................... 13 Gambar 2. 6 Struktur mikrokontroler.................................................................... 15 Gambar 2. 7 Konfigurasi pin out ESP32............................................................... 17 Gambar 2. 8 Analog pH sensor. ............................................................................ 20 Gambar 2. 9 Analog TDS sensor SEN0244 .......................................................... 21 Gambar 2. 10 Driver motor L298N ...................................................................... 22 Gambar 2. 11 Modul relay. ................................................................................... 23 Gambar 2. 12 Motor servo MG90S. ..................................................................... 24 Gambar 2. 13 Diaphragm pump. ........................................................................... 25 Gambar 2. 14 Peristaltic pump. ............................................................................. 26 Gambar 2. 15 Protokol MQTT. ............................................................................. 27 Gambar 2. 16 Tampilan Node-Red. ...................................................................... 28 Gambar 2. 17 Contoh format JSON. ..................................................................... 29 Gambar 3. 1 System Development Life Cycle……………………………………30 Gambar 3. 2 Diagram Blok Sistem. ...................................................................... 32 Gambar 3. 3 Diagram blok sistem kendali close loop TDS. ................................. 33 Gambar 3. 4 Diagram blok sistem kendali close loop pH..................................... 34 Gambar 3. 5 Diagram blok sistem kendali fuzzy logic TDS. ............................... 35 Gambar 3. 6 Diagram blok sistem kendali fuzzy logic pH. .................................. 35 Gambar 3. 7 Wiring rangkaian sistem................................................................... 37 Gambar 3. 8 Layout PCB modul input.................................................................. 40 Gambar 3. 9 Layout PCB main board. .................................................................. 40 Gambar 3. 10 Layout PCB modul output. ............................................................ 41 Gambar 3. 11 Diagram alir sistem. ....................................................................... 42 Gambar 3. 12 Sub proses menghubungkan perangkat ke WiFi dan MQTT. ........ 44 ix



Gambar 3. 13 Sub proses parsing data. ................................................................. 46 Gambar 3. 14 Sub proses monitoring mode. ......................................................... 47 Gambar 3. 15 Sub proses kendali TDS menggunakan fuzzy logic. ....................... 48 Gambar 3. 16 Sub proses kendali pH menggunakan fuzzy logic. ......................... 51 Gambar 3. 17 Data flow diagram. ......................................................................... 54 Gambar 3. 18 Membership function error pada kendali TDS. .............................. 56 Gambar 3. 19 Membership function delta error pada kendali TDS. ..................... 56 Gambar 3. 20 Membership function PWM pada kendali TDS. ............................ 57 Gambar 3. 21 Membership function timer pada kendali TDS. ............................. 57 Gambar 3. 22 Membership function error pada kendali pH. ................................ 59 Gambar 3. 23 Membership function delta error pada kendali pH......................... 60 Gambar 3. 24 Membership function PWM pada kendali pH. .............................. 60 Gambar 3. 25 Membership function timer pada kendali pH. ................................ 61 Gambar 3. 26 Script function pada flow set timer. ............................................... 63 Gambar 3. 27 Flow set timer. ................................................................................ 64 Gambar 3. 28 Script pada function force on. ........................................................ 64 Gambar 3. 29 Script pada function force stop....................................................... 64 Gambar 3. 30 Flow force on dan force stop. ......................................................... 65 Gambar 3. 31 Script pada function set point. ........................................................ 66 Gambar 3. 32 Flow set point. ................................................................................ 66 Gambar 3. 33 Function gather data. ...................................................................... 67 Gambar 3. 34 Function insert data. ....................................................................... 68 Gambar 3. 35 Function select table. ...................................................................... 68 Gambar 3. 36 Flow read value. ............................................................................. 69 Gambar 3. 37 Flow read state. .............................................................................. 70 Gambar 3. 38 Tampilan pada dashboard Node-Red. ............................................ 70 Gambar 3. 39 Perintah untuk membuat database. ................................................. 71 Gambar 3. 40 Perintah untuk membuat tabel pengukuran TDS. .......................... 71 Gambar 3. 41 Perintah untuk membuat tabel pengukuran pH. ............................. 71 Gambar 4. 1 Modul input sistem…………………………………………………72 Gambar 4. 2 Main board sistem. ........................................................................... 73



x



Gambar 4. 3 Modul output sistem. ........................................................................ 73 Gambar 4. 4 Penempatan modul. .......................................................................... 74 Gambar 4. 5 Plant hidroponik setelah pengimplementasian perangkat. ............... 74 Gambar 4. 6 Grafik perbandingan nilai referensi dengan tegangan...................... 76 Gambar 4. 7 Grafik perbandingan hasil kalibrasi pada analog TDS sensor. ........ 78 Gambar 4. 8 Respon transien kendali TDS close loop dengan set point 700. ...... 80 Gambar 4. 9 Respon transien kendali TDS close loop dengan set point 1000. .... 81 Gambar 4. 10 Respon transien kendali close loop dengan set point 1300. ........... 82 Gambar 4. 11 Respon transien kendali TDS menggunakan fuzzy logic dengan set point 700 ppm. ...................................................................................................... 83 Gambar 4. 12 Respon transien kendali TDS menggunakan fuzzy logic dengan set point 1000 ppm. .................................................................................................... 84 Gambar 4. 13 Respon transien kendali TDS menggunakan fuzzy logic dengan set point 1300 ppm. .................................................................................................... 85 Gambar 4. 14 Respon transien kendali pH naik metode close loop dengan set point 5,5. ......................................................................................................................... 87 Gambar 4. 15 Respon transien kendali pH turun metode close loop dengan set point 5,0. ......................................................................................................................... 88 Gambar 4. 16 Respon transien kendali pH naik menggunakan fuzzy logic dengan set point 5,5. .......................................................................................................... 89 Gambar 4. 17 Respon transien kendali pH naik menggunakan fuzzy logic dengan set point 6,0. .......................................................................................................... 90 Gambar 4. 18 Respon transien kendali pH naik menggunakan fuzzy logic dengan set point 6,5. .......................................................................................................... 91 Gambar 4. 19 Respon transien kendali pH turun menggunakan fuzzy logic dengan nilai awal 5,5 dan set point 5,0.............................................................................. 92 Gambar 4. 20 Respon transien kendali pH turun menggunakan fuzzy logic dengan nilai awal 6,0 dan set point 5,0.............................................................................. 93 Gambar 4. 21 Proses koneksi perangkat dengan WiFi. ........................................ 95 Gambar 4. 22 Tampilan LCD jika proses koneksi gagal. ..................................... 95 Gambar 4. 23 Tampilan jika proses koneksi berhasil. .......................................... 96



xi



Gambar 4. 24 Tampilan dashboard jika diakses melalui dekstop. ........................ 97 Gambar 4. 25 Tampilan dashboard jika diakses melalui smartphone. .................. 97 Gambar 4. 26 Hasil pengujian waktu perangkat dengan waktu pada smartphone.98 Gambar 4. 27 Pengiriman data timer 1 melalui dashboard. .................................. 99 Gambar 4. 28 Data timer 1 ditampilkan pada LCD. ............................................. 99 Gambar 4. 29 Tampilan serial monitor ketika data timer 1 diterima. ................... 99 Gambar 4. 30 Pengiriman data timer 2 melalui dashboard. ................................ 100 Gambar 4. 31 Data timer 2 ditampilkan pada LCD. ........................................... 100 Gambar 4. 32 Tampilan serial monitor ketika data timer 2 diterima. ................. 100 Gambar 4. 33 Pengiriman data timer 3 melalui dashboard. ................................ 101 Gambar 4. 34 Data timer 3 ditampilkan pada LCD. ........................................... 101 Gambar 4. 35 Tampilan serial monitor ketika data timer 3 diterima. ................. 101 Gambar 4. 36 Pengiriman data set point melalui dashboard. .............................. 102 Gambar 4. 37 Data set point ditampilkan pada LCD. ......................................... 102 Gambar 4. 38 Tampilan serial monitor ketika data set point diterima. ............... 102 Gambar 4. 39 Isi tabel pengukuran TDS pada database. .................................... 103 Gambar 4. 40 Isi tabel pengukuran pH pada database. ....................................... 104 Gambar 4. 41 Tampilan tabel pengukuran pada dashboard Node-Red. ............. 104



xii



DAFTAR TABEL Tabel 2. 1 Anjuran kebutuhan nutrisi dan pH tanaman .......................................... 8 Tabel 2. 2 Spesifikasi ESP32 ................................................................................ 16 Tabel 2. 3 Pin ESP32. ........................................................................................... 18 Tabel 2. 4 Spesifikasi analog pH sensor SEN0161 ............................................... 20 Tabel 2. 5 Spesifikasi analog TDS sensor SEN0244 ............................................ 21 Tabel 2. 6 Spesifikasi driver motor L298N ........................................................... 22 Tabel 2. 7 Spesifikasi motor servo MG90S .......................................................... 24 Tabel 3. 1 Konfigurasi pin out yang terhubung ke modul……………………….38 Tabel 3. 2 Pembentukan fungsi keanggotaan fuzzy untuk kendali tds ................. 55 Tabel 3. 3 Rules base output pwm pada kendali tds ............................................. 58 Tabel 3. 4 Rules base output timer pada kendali tds ............................................. 58 Tabel 3. 5 Pembentukan fungsi keanggotaan fuzzy pada kendali pH................... 59 Tabel 3. 6 Rules base output pwm pada kendali pH. ............................................ 61 Tabel 3. 7 Rules base output timer pada kendali pH............................................. 61 Tabel 4. 1 Hasil pengukuran pada saat kalibrasi…………………………………75 Tabel 4. 2 Hasil pengukuran dengan persamaan polinomial orde 3. .................... 77 Tabel 4. 3 Hasil pengukuran dengan persamaan polinomial orde 4. .................... 77 Tabel 4. 4 Hasil pengukuran analog pH sensor setelah kalibrasi. ......................... 79 Tabel 4. 5 Performasi kendali TDS close loop dengan set point 700. .................. 80 Tabel 4. 6 Performasi kendali TDS close loop dengan set point 1000. ................ 81 Tabel 4. 7 Performasi kendali TDS close loop dengan set point 1300. ................ 82 Tabel 4. 8 Performasi kendali TDS fuzzy logic dengan set point 700. ................. 83 Tabel 4. 9 Performasi kendali TDS fuzzy logic dengan set point 1000. ............... 84 Tabel 4. 10 Performasi kendali TDS fuzzy logic dengan set point 1300. ............. 85 Tabel 4. 11 Performasi kendali pH naik close loop dengan set point 5,5. ............ 88 Tabel 4. 12 Performasi kendali pH turun close loop dengan set point 5,0. .......... 88 Tabel 4. 13 Performasi kendali pH naik fuzzy logic dengan set point 5,5. .......... 89 Tabel 4. 14 Performasi kendali pH naik fuzzy logic dengan set point 6,0. .......... 90 Tabel 4. 15 Performasi kendali pH naik fuzzy logic dengan set point 6,5. .......... 91 xiii



Tabel 4. 16 Performasi kendali pH turun fuzzy logic dengan nilai awal 5,5 dan set point 5,0.. .............................................................................................................. 92 Tabel 4. 17 Performasi kendali pH turun fuzzy logic dengan nilai awal 6,0 dan set point 5,0. ............................................................................................................... 93 Tabel 4. 18 Pengendalian nilai TDS selama 4 hari. ............................................ 105 Tabel 4. 19 Pengendalian nilai pH selama 4 hari. ............................................... 105



xiv



DAFTAR SINGKATAN Pemakian Singkatan



Arti



pertama kali pada halaman



TDS



Total Dissolved Solids



1



pH



power of Hidrogen



1



PID



Proportional Integral Derevative



1



IoT



Internet of Things



2



NFT



Nutrient Film Technique



2



MQTT



Message Queuing Telemetry Transport



3



PWM



Pulse Width Modulation



3



ppm



part per million



8



ADC



Analog to Digital Converter



16



JSON



Java Script Object Notation



27



SDLC



System Development Life Cycle



29



LCD



Liquid Crystal Display



31



PSU



power supply unit



38



NTP



Network Time Protokol



41



VPS



Virtual Private Server



68



xv



BAB I PENDAHULUAN 1.1. Latar Belakang Urban farming menggunakan sistem hidroponik telah mendapatkan popularitas dalam beberapa tahun ini. Hal ini dikarenakan lahan pertanian yang semakin terbatas sehingga sistem hidroponik menjadi solusi untuk budidaya tanaman dengan lahan yang terbatas [1][2]. Sistem hidroponik menggunakan air sebagai media tumbuh tanaman menggantikan tanah dengan mengandalkan nutrisi yang diperoleh dari pupuk berupa campuran bahan kimia [3]. Namun metode bertani menggunakan sistem hidroponik memerlukan perawatan khusus dalam mengendalikan Total Dissolved Solids (TDS) dan power of Hidrogen (pH) larutan nutrisi untuk menghasilkan tanaman yang baik hingga masa panen dengan mematau rutin setiap hari [4].



Pemeliharaan



konsentrasi



larutan



nutrisi



yang



tepat



diperlukan



untuk



mengoptimalkan hasil. Ketidakseimbangan unsur hara akan mempengaruhi pertumbuhan tanaman pada sistem hidroponik. Pemeliharaan yang harus dilakukan secara rutin ini menyebabkan budidaya tanaman dengan menggunakan hidroponik ini menjadi tidak efisien karena membutuhkan tenaga yang cukup besar serta waktu untuk melakukan pengecekan ke lokasi sistem hidroponik berada [5]. Dengan menerapkan precision farming yaitu memanfaatkan teknologi informasi yang memungkinkan mengamati dan mengelola larutan nutrisi hidroponik secara efisien. Akan tetapi diperlukan pengendalian yang tepat untuk mengatur TDS dan pH nutrisi agar parameter tersebut dapat sesuai dengan nilai yang diinginkan, serta sistem akuisisi data agar parameter-parameter yang dikendalikan dapat dipantau dari jarak jauh sehingga pemeliharaan konsentrasi larutan dapat lebih efisien dan efektif [6][7].



Pengendalian TDS dan pH dapat menggunakan berbagai metode, baik menggunakan pengendalian Proportional Integral Derevative (PID) maupun menggunakan



kendali



fuzzy



logic



[8][9][10][11]. 1



Untuk



mempermudah



pengambilan data dan penjadwalan sistem kendali pemanfaatan sistem Internet of Things (IoT) dapat diimplementasikan agar mempermudah pemantauan larutan nutrisi ketika berada jauh dari lokasi hidroponik.



Pada penelitian ini bertujuan untuk merancang sebuah sistem akuisisi data pada hidroponik Nutrient Film Technique untuk mengendalikan parameter larutan nutrisi dengan memanfaatkan metode pengendalian fuzzy logic untuk mengatur nilai TDS dan pH sesuai dengan nilai yang dikehendaki agar tanaman dapat berkembang secara optimal. Adapun kontroler yang digunakan adalah ESP32 karena sudah dilengkapi dengan modul komunikasi WiFi sehingga memudahkan dalam mengimplementasikan IoT. Analog TDS sensor SEN0244 dan analog pH sensor SEN0161 untuk mengukur kepekatan nutrisi dan nilai pH. Serta diaphragm pump dan water pump sebagai aktuator untuk mengendalikan nilai TDS, sedangkan aktuator untuk mengatur nilai pH menggunakan peristaltic pump. Kemudian untuk pembuatan sistem IoT yang akan dirancang menggunakan Node-Red. Lingkup penelitian ini dibatasi yaitu sistem hidroponik yang digunakan adalah Nutrient Film Technique dan metode pengendalian yang digunakan adalah fuzzy logic tipe sugeno.



1.2. Tujuan Penelitian Penulis menetapkan beberapa tujuan pada penelitian ini, yaitu sebagai berikut : 1.



Merancang sistem hidroponik nutrient film technique



2.



Merancang sistem kendali TDS dan pH nutrisi menggunakan fuzzy logic



3.



Mengimplementasikan teknologi Internet of Things pada kendali TDS dan pH nutrisi menggunakan Node-Red.



4.



Menganalisis tanggapan waktu kendali TDS dan pH yang dihasilkan.



1.3. Batasan Masalah Penulis menetapkan beberapa batasan masalah pada penelitian ini, yaitu sebagai berikut : 1.



Sistem hidroponik yang digunakan adalah Nutrient Film Technique (NFT).



2



2.



Jenis tanaman yang dibudidayakan adalah kangkung dan pakcoy dengan range nilai TDS yang diatur 700 ppm hingga 1300 ppm dan range pH 5,5 hingga 6,5.



3.



Perancangan yang dibuat menggunakan mikrokontroler ESP32.



4.



Perancangan yang dibuat menggunakan analog TDS sensor SEN0244 dan analog pH sensor SEN0161.



5.



Metode



pengendalian



dilakukan



secara



close



loop



dengan



mengimplementasikan fuzzy logic tipe sugeno. 6.



Perancangan fuzzy logic menggunakan dua variabel input yaitu error dan delta error, kemudian hasil defuzzifikasi terdiri dari dua output yaitu sinyal pulse witdh midulation (PWM) dan timer dengan 25 aturan.



7.



Protokol Internet of Things yang digunakan adalah Message Queuing Telemetry Transport (MQTT).



1.4. Sistematika Penulisan Penulisan laporan Tugas Akhir ini disusun dengan sistematika sebagai berikut : BAB I PENDAHULUAN, berisi tentang menguraikan penjelasan mengenai latar belakang masalah, tujuan, batasan masalah, serta sistematika penulisan yang menggambarkan secara umum dari bab-bab yang ada pada tugas akhir ini.



BAB II TEORI PENUNJANG, bab ini menjelaskan tentang teori dasar yang menunjang isi dari tugas akhir ini, diantaranya menjelaskan pengertian teori yang digunakan, komponen-komponen yang digunakan, software yang digunakan untuk penyusunan tugas akhir, dan lain-lain yang mendasari pembahasan dari prototipe yang dirancang.



BAB III METODE PENELITIAN, bab ini memuat mengenai langkah-langkah dalam peracangan sistem kendali yang dibuat, dimulai dari peracangan hardware seperti diagram blok sistem, perancangan skematik sistem, kemudian perancangan software seperti diagram alir, peracangan IoT, serta perancangan kendali fuzzy logic.



3



BAB IV HASIL PENGUJIAN DAN ANALISIS, bab ini menjelaskan tentang hasil pengujian dari sistem kendali yang telah dilakukan, pengujian sistem IoT, dan analisis respon sistem yang telah didapatkan.



BAB V KESIMPULAN DAN SARAN, bab ini menjelaskan kesimpulan dari penelitian yang telah dilakukan dan saran untuk pengembangan penelitian selanjutnya.



4



BAB II TEORI PENUNJANG 2.1. Tinjauan Pustaka Berikut adalah rujukan penelitian-penelitian sebelumnya yang dijadikan acuan pada penelitian ini : 1. Adnan Rafi, 2020, Kendali pH untuk sistem IoT hidroponik deep flow technique berbasis fuzzy logic controller, hasil yang didapat adalah pengimplementasian FLC pada sistem hidroponik deep flow technique mampu menjaga kestabilan pH pada rentang 6,5 – 7,5. 2. Dian Pancawati, 2016, Implementasi fuzzy logic controller untuk mengatur pH nutrisi pada sistem hidroponik nutrient film technique, hasil yang didapat adalah pengendalian mampu mempertahankan pH sebesar 5,5 dengan hasil pertumbuhan selda setinggi 20 cm dan banyak daun 7 helai selama 54 hari, hasil respon terbaik dari implementasi fuzzy logic controller terdapat pada sistem yang memiliki 25 aturan. 3. Fitria Suryatini, 2021, Sistem kendali nutrisi hidroponik berbasis fuzzy logic berdasarkan objek tanam, hasil yang didapat adalah kendali fuzzy logic memiliki nilai keberhasilan 99,15% untuk durasi output nutrisi dari perbandingan pemodelan di MatLab. Penggunaan persamaan polynomial dapat mengurangi error pembacaan sensor TDS dari 30,75% menjadi 2,78%. Respon waktu pada kendali kadar nutrisi mencapai settling time pada 50 detik dan memiliki error steady state sebesar 5,9%. 4. Annisa Nurul Sholihah, Sistem kendali TDS untuk nutrisi hidroponik deep flow technique menggunakan fuzzy logic, hasil yang didapat adalah error pembacaan sensor TDS terbilang kecil dengan rata-rata 0.165% dan program fuzzy logic dapat bekerja dimana saat error lebih kecil dari set point relay yang terhubung dengan pompa air on dan saat error melebihi set point relay yang terhubung ke pompa air off.



5



2.2. Hidroponik Pada saat ini telah banyak beragam sistem hidroponik yang digunakan dalam skala komersil. Sistem hidroponik terbagi menjadi dua kelompok, yaitu kultur media tanam dan kultur larutan nutrisi. Pada kultur dengan menggunakan media tanam, penanaman dilakukan menggunakan media tanam padat berpori sebagai tempat akar tanaman tumbuh atau campuran dari keduanya. Berdasarkan metode pemberian larutan nutrisi dibedakan menjadi dua kelompok, yaitu sub irrigation atau sistem irigasi bawah permukaan dan top irrigation atau irigasi permukaan. Pada top irrigation sering diaplikasikan pada sistem hidroponik dengan menggunakan penetes makan sistem hidroponik ini lebih dikenal dengan sebutan drip irrigation system atau sistem irigasi tetes. Pada sub irrigation terbagi menjadi dua kelompok, yaitu passive sub irrigation atau sistem irigasi dengan prinsip kapiler, dan ebb and flow atau sistem irigasi genang dan alir.



Pada kultur larutan nutrisi, penanaman dilakukan tidak menggunakan media tanam atau tumbuh, sehingga akar tanaman tumbuh di dalam larutan nutrisi atau udara. Kultur larutan nutrisi dibagi menjadi tiga kelompok besar, yaitu hidroponik larutan diam, hidroponik dengan larutan nutrisi yang disirkulasikan, dan aeroponic. Sistem hidroponik dipilih berdasarkan pertimbangan jenis tanaman yang akan dibudidayakan.



2.2.1. Sistem Hidroponik Nutrient Film Technique Nutrient Film Technique (NFT) diartikan sebagai metode hidroponik yang dimana akar tanaman tumbuh di dalam larutan nutrisi sangat dangkal yang membentuk lapisan tipis nutrisi (nutrient film) dan tersirkulasi. Dengan demikian, tanaman dapat memperoleh unsur hara, air, dan oksigen yang cukup. Komponen sistem NFT adalah saluran, tangki, pompa, dan pipa.



NFT memiliki karakteristik, bahwa akar tanaman berada di udara dan larutan nutrisi sekaligus. Sebagian akar berada pada ruang udara dalam saluran nutrisi, sehingga dapat menyerap oksigen, sebagian yang lain terdiam dalam larutan nutrisi sehingga



6



akar tanaman dapat menyerap unsur hara dan air yang diperlukan oleh tanaman tersebut.



Saluran



yang



ditempatkan



dengan



kemiringan



sudut



tertentu



memungkinkan larutan nutrisi mengalir sampai ujung saluran dan ditampung kembali dalam tangki.



Gambar 2. 1 Sistem hidroponik Nutrient Film Technique [12].



2.3. Parameter Larutan Nutrisi Pada dasarnya, nutrisi hidroponik merupakan zat-zat yang dibutuhkan oleh tanaman hidroponik agar dapat tumbuh dan berkembang dengan baik, tujuan pemberian nutrisi hidroponik adalah untuk mendapatkan unsur hara yang diperlukan oleh tumbuhan pada media tanam. Unsur hara seperti nitrogen bisa didapatkan dari tanah akan tetapi karena media tanam hidroponik tidak menggunakan tanah, sehingga diperlukan nutrisi khusus agar tanaman bisa tumbuh dengan baik.



Larutan nutrisi ini akan terus berubah sesuai dengan kondisi lingkungan sekitar dan aktivitas dari tanaman, seperti penyerapan nutrisi oleh akar tanaman yang akan merubah jumlah nutrisi yang terkandung di dalam larutan nutrisi. Berikut adalah beberapa parameter yang diperhatikan pada penelitian ini :



7



a) TDS TDS atau Total Dissolved Solids adalah jumlah zat padat yang terlarut baik dalam berupa ion organik, senyawa, ataupun koloid, dan lain-lain. Satuan yang digunakan untuk menunjukan nilai TDS pada suatu larutan adalah part per million (ppm) yang merupakan perbandingan antara konsentrasi zat terlarut dengan zat pelarutnya dalam perbandingan 1 juta [13].



b) pH pH adalah singkatan dari power of hydrogen, yang merupakan pengukuran konsentrasi ion hidrogen. Total skala pH berkisar dari 1 hingga 14, dengan 7 dianggap netral. Sebuah nilai pH kurang dari 7 dikatakan asam, sedangkan jika sebuah nilai pH diatas 7 dikatakan basa. pH adalah derajat keasaman yang digunakan untuk menyatakan tingkat keasaman atau kebasaan yang dimiliki oleh suatu larutan [14].



Setiap tanaman mempunyai kebutuhan nutrisi dan pH yang berbeda-beda, agar dapat tumbuh dengan maksimal pemberian nutrisi harus tepat. Berikut adalah tabel kebutuhan nutrisi dan pH yang dianjurkan untuk tanaman daun.



Tabel 2. 1 Anjuran kebutuhan nutrisi dan pH tanaman [15]. Nama Sayuran



pH



ppm



Artichoke



6.5 – 7.5



560 – 1260



Asparagus



6.0 – 6.8



980 – 1200



Bawang Pre



6.5 – 7.0



980 – 1260



Bayam



6.0 – 7.0



1260 – 1610



Brokoli



6.0 – 6.8



1960 – 2450



Brussel Kecambah



6.5



1750 – 2100



Endive



5.5



1400 – 1680



Kailan



5.5 – 6.5



1050 – 1400



8



Kangkung



5.5 – 6.5



1050 – 1400



Kubis



6.5 – 7.0



1750 – 2100



Kubis Bunga



6.5 – 7.0



1750 – 2100



Pakcoy



7.0



1050 – 1400



Sawi Manis



5.5 – 6.5



1050 – 1400



Sawi Pahit



6.0 – 6.5



840 – 1680



Seledri



6.5



1260 – 1680



Selada



6.0 – 7.0



560 – 840



2.4. Larutan pH Nutrisi yang diberikan kepada tanaman erat kaitannya dengan derajat keasaman atau pH pada larutan nutrisi, dimana pH akan mempengaruhi daya larut dari unsur hara yang berakibat pada pertumbuhan tanaman. Pada larutan nutrisi yang memiliki nilai pH dibawah 6.0 atau asam unsur hara makro seperti kalsium, magnesium, dan fosfor akan sulit diserap oleh tanaman yang berakibat tanaman tidak dapat berproduksi dengan maksimal. Pada larutan nutrisi yang memiliki pH diatas 7 atau basa unsur hara mikro seperti tembaga, mangan, seng, dan besi tidak akan bisa diserap oleh tanaman yang berakibat tanaman akan mengalami defisiensi unsur hara sehingga tanaman akan cepat mati [16]. Pengkondisian nilai pH pada larutan nutrisi dilakukan dengan penambahan asam (HNO3, H3PO4 atau H2SO4) jika pH larutan terlalu basa atau penambah basa (KOH) jika larutan terlalu asam. Pada penelitian ini larutan untuk menambah pH menggunakan larutan kalium hidroksida (KOH) dan untuk mengurangi jika larutan terlalu basa menggunakan asam fosfat (H3PO4).



9



Gambar 2. 2 Larutan pH naik dan pH turun.



2.5. Larutan Nutrisi AB Mix Nutrisi AB mix atau pupuk racikan merupakan larutan yang terbuat dari bahanbahan kimia untuk diberikan melalui media tanam, berfungsi sebagai nutrisi tanaman agar dapat tumbuh dengan baik. Nutrisi AB mix terdiri dari 2 nutrisi yaitu nutrisi A dan nutrisi B, pada nutrisi A mengandung unsur kalium dan nutrisi B mengandung sulfat dan fosfat [17].



Gambar 2. 3 Larutan nutrisi AB mix.



10



2.6. Fuzzy Logic Pada tahun 1965 seorang guru besar di University of California yang bernama Prof. Lotfi A. Zadeh yang merupakan pencetus ide tentang cara mekanisme pengolahan ketidakpastian yang kemudian dikenal fuzzy logic. Sebelum adanya fuzzy logic dikenal sebuah logika tegas (crisp logic) yang mempunyai nilai benar atau salah secara tegas. Saat logika classic menyatakan segala sesuatu dapat diekspresikan dalam istilah biner 0 atau 1, hitam atau putih, iya atau tidak. Logika fuzzy memungkinkan nilai keanggotaan antara 0 dan 1 dalam bentuk linguistic, konsep tidak pasti seperti “sedikit”, “lumayan”, dan “sangat”. Logika ini sangat berhubungan dengan set fuzzy dan teori kemungkinan. Fuzzy logic menggunakan pengalaman seorang ahli model matematika dari sebuah sistem untuk mengontrol sebuah plant, dan dapat menangani sistem non linear yang kompleks dengan model matematika yang tidak diketahui.



Tahapan membangun fuzzy logic tergantung dari metode yang digunakan, di karekan banyak metode untuk membangun sebuah sistem fuzzy logic. Secara garis besar fuzzy logic terdiri dari beberapa tahap, berikut adalah tahapan dari fuzzy logic: a) Fuzzyfikasi Proses fuzzyfikasi yaitu mengubah suatu nilai masukan menjadi suatu fungsi keanggotaan fuzzy. Pada proses ini membership function dari variabel ditentukan. Membership function sendiri merupakan suatu kurva yang mewakili besar dari derajat keanggotaan masing-masing variabel input yang berada pada interval 0 dan 1. 1. Representasi kurva segitiga Kurva segitiga merupakan gabungan antara 2 garis linear seperti pada Gambar 2.4.



11



Gambar 2. 4 Representasi kurva segitiga. Representasi kurva segitiga adalah sebagai berikut: 0 ; 𝑥 ≤ 𝑎 𝑎𝑡𝑎𝑢 𝑥 ≥ 𝑐 (𝑥−𝑎)



𝜇[𝑥] =



(𝑏−𝑎) (𝑐−𝑥)



{



(𝑐−𝑏)



;𝑎 ≤ 𝑥 ≤ 𝑏



(2.1)



;𝑏 ≤ 𝑥 ≤ 𝑐



Atau 𝑥−𝑎 𝑐−𝑥



𝑢[𝑥] = max (min (𝑏−𝑎 , 𝑥−𝑏) , 0)



(2.2)



Dimana : a = nilai domain terkecil yang mempunyai derajat keanggotaan nol b = nilai domain yang mempunyai derajat keanggotaan satu c = nilai domain terbesar yang mempunyai derajat keanggotaan nol x = nilai input yang akan diubah ke dalam bilangan fuzzy



2. Representasi kurva trapesium Kurva trapesium pada dasarnya adalah bentuk segitiga, hanya saja ada beberapa titik yang memiliki nilai derajat keanggotaan 1 seperti Gambar 2.5.



12



Gambar 2. 5 Representasi kurva trapesium. Representasi kurva trapesium adalah sebagai berikut : 0 ; 𝑥 ≤ 𝑎 𝑎𝑡𝑎𝑢 𝑥 ≥ 𝑑 (𝑥−𝑎) (𝑏−𝑎)



𝜇[𝑥] =



;𝑎 ≤ 𝑥 ≤ 𝑏 (2.3)



1 ;𝑏 ≤ 𝑥 ≤ 𝑐 (𝑑−𝑥)



{



(𝑑−𝑐)



;𝑐 ≤ 𝑥 ≤ 𝑑



Atau 𝑥−𝑎



𝑢[𝑥] = max (min (𝑏−𝑎 , 1,



𝑑−𝑥 𝑑−𝑐



) , 0)



(2.4)



Dimana : a = nilai domain terkecil yang mempunyai derajat keanggotaan nol b = nilai domain terkecil yang mempunyai derajat keanggotaan satu c = nilai domain terbesar yang mempunyai derajat keanggotaan satu d = nilai domain terbesar yang mempunyai derajat keanggotaan nol x = nilai input yang akan diubah ke dalam bilangan fuzzy b) Fuzzy logic inference Merupakan proses mengaplikasikan aturan atau rules base pada masukan fuzzy yang dihasilkan dalam proses fuzzyfikasi. Mengevaluasi tiap aturan dengan masukan yang dihasilkan dari proses fuzzyfikasi dengan mengevaluasi hubungan antara derajat keanggotaannya. Rules base pada fuzzy logic merupakan suatu bentuk aturan relasi “if-then” seperti if x is A then y is B, dimana A dan B adalah linguistic values yang didefinisikan dalam rentang variabel x dan y. Pernyataan “x is A” disebut antecedent atau premis. Pernyataan “y is B” disebut consequent atau kesimpulan.



13



c) Defuzzifikasi Defuzzifikasi merupakan proses pengubahan data–data fuzzy kembali ke dalam bentuk numerik yang dapat diproses ke dalam peralatan pengendalian [18].



2.6.1. Fuzzy Logic Tipe Sugeno Fuzzy logic metode sugeno merupakan metode inferensi fuzzy untuk aturan yang direpresentasikan dalam bentuk “if-then”, dimana output atau consequent sistem tidak berupa himpunan fuzzy, melainkan berupa konstanta atau sebuah persamaan linear. Michio Sugeno mengusulkan penggunaan singleton sebagai membership function dari consequent. Singleton sendiri adalah sebuah himpunan fuzzy dengan membership function yang pada titik tertentu mempunyai sebuah nilai dan 0 di luar titik tersebut. Terdapat tahapan-tahapan yang harus dilakukan dalam implementasi fuzzy logic tipe sugeno yaitu : a) Fuzzifikasi, pada tahapan ini seperti pada proses fuzzyfikasi pada metode lainnya dimana variabel input dari sistem fuzzy akan diubah ke dalam bentuk himpunan fuzzy untuk digunakan dalam perhitungan nilai kebenaran dari antecedent pada setiap aturan dalam rules base. b) Aplikasi fungsi implikasi, tiap-tiap aturan pada rules base akan berhubungan dengan suatu relasi fuzzy. Bentuk umum dari aturan yang digunakan dalam fungsi implikasi adalah “if x is A then y is B” dengan x dan y adalah bentuk skalar, A dan B adalah himpunan fuzzy. c) Defuzzifikasi, pada metode sugeno defuzzifikasi dilakukan dengan perhitungan Weight Average (WA) [19]: 𝑊𝐴 =



(𝑎1 ×𝑧1 )+(𝑎2 ×𝑧2 )+(𝑎3 ×𝑧3 )+...+(𝑎𝑛 ×𝑧𝑛 ) 𝑎1 +𝑎2 +𝑎3 +...+𝑎𝑧



Dimana : WA = nilai rata-rata 𝑎𝑛 = nilai predikat aturan ke-n 𝑧𝑛 = indeks nilai output (konstanta) ke-n



14



(2.5)



2.7. Mikrokontroler Mikrokontroler merupakan sebuah sistem komputer yang sebagian besar elemennya sudah dikemas dalam satu chip IC, sehingga sering disebut juga single chip microcomputer. Mikrokontroler merupakan sistem komputer yang mempunyai satu atau beberapa tugas yang spesifik, berbeda dengan personal computer yang memiliki beragam fungsi. Perbedaan lainnya adalah perbandingan RAM, ROM yang sangat berbeda antara komputer dengan mikrokontroler. Mikrokontroler adalah sistem microprosesor dimana di dalamnya sudah terdapat CPU, ROM, RAM, I/O, Clock, dan peralatan internal lainnya yang sudah terhubung dan terintegrasi satu sama lain yang dikemas dalam satu chip siap pakai. Sehingga hanya tinggal memprogram isi dari ROM sesuai dengan aturan pengguna.



Gambar 2. 6 Struktur mikrokontroler. Pada Gambar 2.6 Menunjukan diagram blok dari struktur mikrokontroler secara umum. Mikrokontroler terdiri dari beberapa bagian yang saling terhubung melalui internal bus. Berikut adalah penjelasan dan fungsi dari bagian dalam struktur mikrokontroler : a) ALU (Arithmetic and Logic Unit), berfungsi untuk menangani operasi aritmatika dan juga operasi logika. b) Accumulator Register, berfungsi sebagai tempat penyimpanan sementara hasil suatu operasi aritmatika atau logika.



15



c) Internal RAM, merupakan memori penyimpanan data yang isinya dapat diubah atau dihapus, biasanya berisi data-data variabel dan register. Data yang tersimpan pada RAM akan hilang jika catu daya yang diberikan kepadanya dimatikan. d) Internal ROM, merupakan memori penyimpanan program atau instruksi yang isinya tidak dapat diubah atau dihapus. e) I/O Port, digunakan untuk berkomunikasi dengan perangkat-perangkat di luar, maka mikrokontroler menggunakan terminal input dan output. f) Program counter, merupakan register khusus yang berfungsi sebagai pencacah atau penghitung eksekusi program mikrokontroler. g) Stack pointer, merupakan bagian dari RAM yang memiliki metode penyimpanan dan pengambilan data secara khusus. Data yang disimpan dan dibaca tidak dapat dilakukan dengan metode acak [20].



2.7.1. ESP32 ESP32 merupakan mikrokontroler yang diperkenalkan oleh espressif system sebagai penerus mikrokontroler ESP8266. Pada ESP32 ini sudah terdapat modul WiFi di dalam chipnya sehingga memudahkan untuk pengaplikasian sistem Internet of Things. Berikut adalah spesifikasi yang dimiliki oleh ESP32.



Tabel 2. 2 Spesifikasi ESP32 [21]. Attribut



Detail



CPU



Xtensa LX6 32-bit dual core, operating at 160 or 240 MHz



SRAM



520 KB



FLASH



2 MB (max 64 MB)



Tegangan External Power Supply



5V – 12V



Tegangan



2,2 V – 3.6 V



Arus



80 mA



16



Pemrograman



C, C++, Python, Lua, dll



Konektivitas



Detail



WiFi



802.11 b / g / n



Bluetooth



4.2 + BLE (Bluetooth Low Energy)



UART



2



I/O



Detail



GPIO



32



SPI



4



I2C



2



PWM



16



Analog to Digital Converter (ADC)



18 (12 – bit)



DAC



2 (8 – bit)



2.7.2. Konfigurasi Pin ESP32 Berikut adalah konfigurasi pin ESP32 dapat dilihat pada Gambar 2.7 dan Tabel 2.3 untuk keterangan dari pin ESP32.



Gambar 2. 7 Konfigurasi pin out ESP32.



17



Tabel 2. 3 Pin ESP32 [22]. Nomor Pin



Nama Pin



Fungsi



1



VIN



Eksternal



Keterangan Power 5V – 12V



Suply 2



GND



Ground



3



GPIO 13



ADC2,



Touch Dapat dijadikan



Sensor,



HSPI input atau output



MOSI, PWM 4



GPIO 12



ADC2,



Touch Dapat dijadikan



Sensor,



HSPI input atau output



MISO, PWM 5



GPIO 14



ADC2,



Touch Dapat dijadikan



Sensor,



HSPI input atau output



CLK, PWM 6



GPIO 27



ADC2,



Touch Dapat dijadikan



Sensor, PWM 7



GPIO 26



ADC2,



DAC2, Dapat dijadikan



PWM 8



GPIO 25



ADC2,



input atau output DAC1, Dapat dijadikan



PWM 9



GPIO 33



ADC1,



input atau output Touch Dapat dijadikan



Sensor, PWM 10



11



GPIO 32



ADC1,



GPIO 35



input atau output



input atau output



Touch Dapat dijadikan



Sensor, PWM



input atau output



ADC1, PWM



Hanya



dapat



dijadikan Input 12



GPIO 34



ADC1, PWM



Hanya



dapat



dijadikan Input 13



GPIO 39



ADC1



Hanya



dapat



dijadikan Input



18



14



GPIO 36



ADC1



Hanya



dapat



dijadikan Input 15



EN



3.3V



regulator



enable pin 16



GPIO 23



VSPI MOSI



Dapat dijadikan input atau output



17



GPIO 22



SCL



Dapat dijadikan input atau output



18



GPIO 1



TX 0 pin



19



GPIO 3



RX 0 pin



20



GPIO 21



SDA



Dapat dijadikan input atau output



21



22



GPIO 19



GPIO 18



VSPI



MISO, Dapat dijadikan



PWM



input atau output



VSPI CLK, PWM



Dapat dijadikan input atau output



23



GPIO 5



VSPI CS, PWM



Dapat dijadikan input atau output



24



GPIO 17



TX 2 pin, PWM



Dapat dijadikan input atau output



25



GPIO 16



RX 2 pin, PWM



Dapat dijadikan input atau output



26



GPIO 4



ADC



2,



Touch Dapat dijadikan



Sensor, PWM 27



GPIO 2



ADC



2,



Touch Dapat dijadikan



Sensor 28



GPIO 15



ADC



input atau output 2,



Touch Dapat dijadikan



Sensor, HSPI CS 29



GND



30



3.3V



19



input atau output



input atau output



2.8. Sensor 2.8.1. pH sensor pH sensor adalah sebuah sensor yang digunakan untuk mengukur pH dari suatu larutan. pH sensor terdiri dari sebuah probe pH yang terhubung dengan rangkaian elektronik untuk mengolah dan menampilkan hasil pembacaan. Pada penelitian kali ini sensor pH yang digunakan adalah SEN0161 pH meter.



Gambar 2. 8 Analog pH sensor.



Berikut adalah spesifikasi dari sensor pH yang digunakan dapat dilihat pada Tabel 2.4. Tabel 2. 4 Spesifikasi analog pH sensor SEN0161 [23]. Transmitter Board Tegangan input



3,3 V – 5,0 V



Ukuran modul



43 × 32 mm



Range pengukuran



0 – 14



Temperatur pengukuran



0 – 60 °C



Akurasi



± 0.1 pH (25 °C)



Respon time



< 1 menit



Interface modul



PH2.0 – 3 pin



Interface probe



BNC connector



20



2.8.2. TDS Sensor Sensor TDS (Total Dissolved Solid) merupakan sensor yang bekerja dengan cara mendeteksi konduktivitas suatu larutan, jika suatu larutan memiliki konduktivitas tinggi maka output sensor akan semakin besar, begitu pun sebaliknya apabila cairan mengandung sedikit mineral maka output nya akan semakin kecil. Sensor TDS dihubungkan dengan pin ADC mikrokontroler.



Gambar 2. 9 Analog TDS sensor SEN0244 Pada penelitian kali ini sensor TDS yang digunakan adalah SEN0244 Gravity Analog TDS Sensor yang memiliki spesifikasi sebagai berikut.



Tabel 2. 5 Spesifikasi analog TDS sensor SEN0244 [24]. Transmitter Board Tegangan input



3,3 V – 5,0 V



Tegangan output



0,0 V – 2,3 V



Arus kerja



3 – 6 mA



Akurasi pengukuran



± 10%



Ukuran modul



42 × 32 mm



Interface modul



PH2.0 – 3 pin



Interface probe



XH2.54 – 2 pin Probe TDS



21



Jumlah jarum



2



Panjang probe



83 cm



Interface



XH2.54 – 2 pin



Water proof



yes



2.9. Driver 2.9.1. Driver motor L298N Driver motor L298N adalah sebuah modul driver motor DC yang difungsikan untuk mengontrol kecepatan serta arah perputaran motor. IC L298 merupakan sebuah IC tipe H-Bridge yang mampu mengendalikan beban induktif seperti solenoid, relay, motor stepper, dan motor DC. Kelebihan dari modul ini adalah kepresisian dalam mengendalikan motor sehingga lebih mudah untuk dikendalikan.



Gambar 2. 10 Driver motor L298N Berikut adalah spesifikasi dari modul driver motor L298N dapat dilihat pada tabel 2.6. Tabel 2. 6 Spesifikasi driver motor L298N [25]. Spesifikasi Driver L298N Chip



L298N



Drive Voltage



5 V – 35 V



Drive Current



2A max



Tegangan operasional



5V



Arus operasional



0 – 36 mA



Daya maksimal



25



22



2.9.2. Relay Relay adalah komponen elektronika yang berupa saklar atau switch elektrik yang dioperasikan menggunakan listrik. Relay juga dapat disebut sebagai komponen electromechanical yang terdiri dari dua buah bagian utama yaitu coil dan kontak saklar. Komponen relay menggunakan prinsip elektromagnetik sebagai penggerak kontak saklar, sehingga dengan menggunakan arus listrik yang kecil atau low power dapat menghatarkan arus atau tegangan yang lebih tinggi.



Gambar 2. 11 Modul relay.



Relay memiliki fungsi sebagai saklar elektrik. Dalam pengaplikasiannya relay mempunyai beberapa fungsi. Berikut adalah beberapa fungsi dari relay saat diaplikasikan ke dalam rangkaian elektronika. 1.



Mengendalikan sirkuit dengan tegangan tinggi dengan bantuan sinyal tegangan rendah.



2.



Menjalankan fungsi logika.



3.



Memberikan fungsi penundaan waktu alias delay function.



4.



Melindungi motor atau komponen lainnya dari kelebihan tegangan atau korsleting listrik [26].



2.10. Motor Servo Motor servo adalah motor dengan sistem closed feedback dimana posisi dari motor akan diinformasikan kembali ke rangkaian pengontrol yang terdapat di dalam motor



23



servo. Dengan input kontrol yang bisa berupa sinyal analog ataupun sinyal digital, motor servo biasa digunakan sebagai aktuator yang membutuhkan posisi putaran motor yang cukup presisi. Sedangkan sudut dari sumbu motor dapat diatur berdasarkan lebar pulsa yang dikirimkan ke pin sinyal pada motor servo. Motor servo hanya bergerak mencapai sudut tertentu saja dan tidak bergerak secara kontinyu, tetapi untuk beberapa keperluan motor servo ini dapat dimodifikasi sehingga bisa bergerak secara kontinyu [27]. Pada penelitian ini motor servo yang digunakan adalah motor servo MG90S sebagai mekanik penggerak dari sensor TDS. Berikut adalah tampak hardware dari motor servo MG90S dapat dilihat pada Gambar 2.12 dan spesifikasi dapat dilihat pada Tabel 2.7.



Gambar 2. 12 Motor servo MG90S.



Tabel 2. 7 Spesifikasi motor servo MG90S Spesifikasi Servo MG90S Operating Voltage



4,8V – 6V



Rotation Angle



180 degrees



Weigth



13,4 g



Dimension



22,5 x 12 x 35,5 mm



Operating temperature



0 – 55 °C



24



2.11. Pompa 2.11.1. Diaphragm Pump Diaphragm pump adalah pompa yang termasuk kategori positive displacement pump, dimana adalah jenis pompa yang mampu menghisap dan mendorong keluar fluida dengan menggunakan diafragma atau membran sebagai komponen yang bekerja bolak-balik. Dinamika membran nantinya akan menghasilkan daya hisap fluida ketika membran bergerak mundur dan daya tekan keluar fluida ketika membran bergerak maju [28].



Gambar 2. 13 Diaphragm pump.



2.11.2. Peristaltic Pump Peristaltic pump adalah pompa yang termasuk ke dalam pompa positive displacement yang digunakan untuk memompa aliran fluida. Peristaltic pump bekerja dengan tekanan dan perpindahan, hal ini digunakan terutama untuk pompa fluida melalui tabung, yang membedakan dari pompa lain adalah bagian dari pompa lain aliran fluida masuk ke dalam bagian pompa sehingga bersentuhan. Pada peristaltic pump mekanisme kerja pompa ini tidak bersentuhan langsung dengan fluida. Fluida ini mengalir ke dalam casing pompa melalui selang [29].



25



Gambar 2. 14 Peristaltic pump.



2.12. Internet of Things IoT atau Internet of Things merupakan sebuah konsep yang bertujuan untuk memperluas manfaat konektivitas dari internet yang tersambung secara terusmenerus sehingga memungkinkan menghubungkan mesin, peralatan, dan benda fisik lainnya dengan jaringan internet, sehingga mesin dapat berkolaborasi dan bahkan bertindak berdasarkan informasi baru yang diperoleh secara independent. Internet of Things adalah sebuah gagasan dimana semua benda dapat berkomunikasi satu dengan yang lain sebagai bagian dari satu kesatuan sistem terpadu menggunakan jaringan internet sebagai penghubungnya. Ide awal Internet of Things pertama kali dimunculkan oleh Kevin Ashton pada tahun 1999 [30].



2.13. MQTT MQTT atau Message Queuing Telemetry Transport adalah protokol Internet of Things yang ringan dan sering digunakan untuk kirim atau terima pesan antar perangkat. Protokol MQTT berjalan dengan mengunakan TCP/IP, sehingga protokol ini membutuhkan transportasi untuk menjalankan perintah MQTT, bytestream dari client to server atau server to client. Berikut gambaran protokol MQTT bekerja dapat dilihat pada Gambar 2.15.



26



Gambar 2. 15 Protokol MQTT.



MQTT mempunyai karakteristik transfer data dalam paket ukuran rendah, sehingga sangat membantu dalam mengembangkan teknologi remote dengan perangkat terbatas. Prinsip MQTT adalah meminimalisasi bandwidth jaringan dan kebutuhan resource perangkat dan tetap menjamin keandalan dan beberapa tingkat jaminan tersampaikannya pesan. Prinsip inilah yang membuat protokol MQTT sangat ideal untuk pengaplikasian IoT. Pertukaran pesan pada MQTT adalah model publish/subscribe yang merupakan model alternatif dari client-server. Pada MQTT client (publisher/subscriber) berkomunikasi langsung dengan sebuah endpoint pada sebuah topic melalui broker. MQTT broker berfungsi untuk menangani data publish dan subscribe dari berbagai perangkat [31].



2.14. Node-Red Node-Red merupakan sebuah tool berbasis browser untuk membuat aplikasi dari Internet of Things yang dimana lingkungan pemrogramannya berbasis visual sehingga mempermudah penggunaannya untuk membuat aplikasi dengan menghubungkan node-node yang berada pada pallete sehingga menghasilkan sebuah flow. Berikut adalah tampilan dari Node-Red dapat dilihat pada Gambar 2.16.



27



Gambar 2. 16 Tampilan Node-Red. Flow terbentuk dari node-node yang saling berhubungan, setiap node mempunyai tugas tertentu. Walaupun Node-Red di desain untuk keperluan aplikasi Internet of Things, Node-Red juga dapat digunakan untuk keperluan umum dan untuk berbagai macam jenis aplikasi [32].



2.15. JSON (Java Script Object Notation) JSON atau Java Script Object Notation adalah sebuah format pertukaran data yang ringan dan mudah dibaca serta mudah ditulis oleh manusia, JSON juga mudah dibuat dan diterjemahkan oleh komputer. Format ini dibuat berdasarkan bagian dari bahasa pemrograman Java Script. JSON merupakan format teks yang tidak bergantung pada bahasa pemrograman apapun dikarenakan mengunakan bahasa yang umum digunakan oleh programmer. JSON terbuat dari dua struktur : a) Kumpulan pasangan nilai atau nama. Pada beberapa bahasa hal ini biasanya dinyatakan sebagai object, record, struct, dictionary, hash table, keyed list, dan associative array. b) Daftar nilai terurutkan (an ordered list of values). Pada kebanyakan bahasa hal ini dinyatakan sebagai array, vector, list, atau sequence. Struktur data ini disebut sebagai struktur data universal, yang pada dasarnya semua bahasa pemrograman modern mendukung struktur data ini dalam bentuk yang sama maupun berlainan [33]. JSON menggunakan bentuk sebagai berikut :



28



a) Object adalah sepasang nilai atau nama yang tidak terurutkan. Object dimulai dengan “{” (kurung kurawal buka) dan diakhiri dengan “}” (kurung kurawal tutup). Setiap nama diikuti dengan “ : ” (titik dua) dan setiap pasangan nama atau nilai dipisahkan oleh “ , ” (koma). b) Array merupakan kumpulan nilai yang terurutkan, array dimulai dengan “ [ ” (kurung kotak tutup buka) dan diakhiri dengan “ ] ” (kurung kotak tutup). Setiap nilai dipisahkan oleh “ , ” (koma).



Gambar 2. 17 Contoh format JSON. 2.16. SQLite SQLite adalah sebuah library perangkat lunak yang menyediakan database tanpa konfigurasi dan tanpa menggunakan server. SQLite merupakan mesin database SQL tertanam dan tidak memiliki proses server terpisah seperti kebanyakan database SQL lainnya. Pada SQLite read dan write langsung dapat ke file disk biasa. Format database dapat lintas platform, fitur inilah yang menjadikan SQLite sebagai format file aplikasi [34].



29



BAB III METODE PENELITIAN 3.1. System Development Life Cycle Pada penelitian ini menggunakan metode System Development Life Cycle (SDLC) dimana metode ini merupakan model konseptual yang dalam sebuah manajemen proyek untuk menggambarkan tahapan yang terlibat dalam proyek pengembangan. Setiap sistem perangkat keras ataupun perangkat lunak akan melalui proses pengembangan yang dapat dianggap sebagai sebuah proses berulang dengan beberapa langkah. System Development Life Cycle digunakan untuk memberikan kerangka kerja untuk menentukan fase dan langkah yang terlibat dalam pengembangan sistem.



Adapun tahapan atau langkah-langkah yang ada dalam metode SDLC seperti yang ditunjukan pada Gambar 3.1 adalah perencanaan (planning), analisis (analysis), desain (design), implementasi (implementation), uji coba (testing), dan pengelolaan (maintenance).



Gambar 3. 1 System Development Life Cycle.



30



a) Perencanaan (planning), merupakan sebuah tahapan awal untuk mendefenisikan masalah dan ruang lingkup sistem yang ada, apa saja yang akan dilakukan dan tujuan akhir yang akan dicapai dari suatu sistem yang akan diteliti. b) Analisis (analysis), pada tahapan ini dilakukan pengumpulan informasi, menganalisis, dan memvalidasi dari sistem yang telah ada sebelumnya, kemudian menentukan kebutuhan serta persyaratan dari sistem baru yang akan dikembangkan. c) Desain (design), tahap ini adalah kelanjutan dari tahapan sebelumnya dimana pada tahap desain mencakup perancangan software maupun hardware sesuai dengan kebutuhan sistem yang telah dianalisis. d) Implementasi (implementation), merupakan sebuah tahap mengintegrasikan semua komponen sistem yang telah di desain, pada tahapan ini akan dilakukan penerapan algoritma fuzzy logic yang telah didesain ke dalam sistem yang telah di integrasikan. e) Uji coba (testing), setelah sistem berhasil di integrasikan selanjutnya merupakan tahap uji coba dimana pada tahapan ini sistem akan di uji coba untuk diamati apakah hasil dari sistem tersebut sudah sesuai yang diharapkan atau tidak. f) Pengelolaan (maintenance), tahap ini akan melibatkan perubahan atau pembaruan sistem setelah di uji coba apakah hardware atau software yang mungkin perlu peningkatkan, penyesuaian atau perubahan agar lebih sesuai dengan kebutuhan atau tujuan dari sistem yang dirancang.



3.2. Perancangan Hardware Untuk perancangan dan implementasi dari sistem kendali TDS dan pH, diperlukan beberapa hal dalam proses perancangannya. Mulai dari perancangan komponen yang akan digunakan, memilih spesifikasi yang tepat untuk sistem, tujuannya agar sistem yang dirancang sesuai dengan apa yang diharapkan.



31



3.2.1. Diagram Blok Sistem Pada penelitian kali ini adalah merancang sebuah sistem kendali dan akuisisi data untuk sistem hidroponik nutrient film technique menggunakan metode fuzzy logic dengan implementasi Internet of Things (IoT) untuk memudahkan pengendalian dan monitoring nilai nutrisi dan pH larutan nutrisi. Sistem pengendalian ini dirancang untuk mengendalikan serta memonitoring parameter sesuai dengan jadwal yang sudah diatur pada dashboard Node-Red sebagai tools IoT. Berikut adalah diagram blok dari sistem secara keseluruhan.



Gambar 3. 2 Diagram Blok Sistem.



Dari diagram blok pada Gambar 3.2, terlihat bahwa alat yang akan dirancang terdiri dari beberapa bagian : a) Bagian input menggunakan analog TDS sensor dan analog pH sensor untuk membaca nilai TDS dan pH yang terkandung dalam tandon larutan nutrisi. b) Bagian kontrol yaitu ESP32 yang akan menerima data dari Node-Red berupa penjadwalan kontrol TDS dan pH, serta mengirimkan nilai-nilai parameter yang terbaca. c) Bagian output menggunakan diaphragm pump untuk menyalurkan nutrisi ke dalam tandon larutan nutrisi guna menaikan kadar TDS pada larutan. Aerator pump digunakan untuk menyalurkan air ke dalam tandon nutrisi guna



32



mengurangi kadar TDS pada larutan. Kemudian peristaltic pump digunakan untuk menyalurkan larutan penambah dan penurun pH ke dalam tandon larutan nutrisi. d) Bagian driver, menggunakan driver motor L298N untuk mengatur dan menggerakan kecepatan pump. Relay digunakan sebagai switch untuk mematikan serta menyalakan aerator pump. e) Bagian mekanik, menggunakan 1 buah motor servo untuk memasukan sensor TDS. f) Bagian interface untuk menampilkan hasil pengukuran secara langsung menggunakan Liquid Crystal Display (LCD) 16x2. g) MQTT Broker, digunakan untuk menangani data pengukuran yang akan dikirimkan ke platform IoT. h) Platform IoT, untuk platform IoT sendiri pada penelitian kali ini adalah menggunakan Node-Red yang merupakan tools pemrograman untuk mengolah dan menampilkan data hasil pengukuran. i) Penyimpanan,



untuk



penyimpanan



data



hasil-hasil



pengukuran



akan



ditempatkan pada database SQLite.



3.2.2. Diagram Blok Sistem Kendali Untuk perancangan sistem kendali yang akan digunakan penulis menggunakan dua buah metode yang nantinya akan dibandingkan hasil respon output. Yang pertama adalah menggunakan sistem kendali close loop. Berikut adalah diagram blok untuk sistem kendali close loop untuk TDS dan pH.



Gambar 3. 3 Diagram blok sistem kendali close loop TDS.



33



Gambar 3. 4 Diagram blok sistem kendali close loop pH.



Keterangan blok diagram pada sistem kendali close loop: a) Blok input, pada bagian blok input merupakan sebuah nilai set point yang akan kita atur baik dalam pengendalian TDS maupun pH. b) Blok proses, pada bagian blok ini nilai set point yang diinginkan akan diproses atau diolah pada mikrokontroler, nilai yang akan diproses pada miktrokontroler ini merupakan nilai error, yang nantinya digunakan untuk memutuskan apakah nilai TDS atau pH akan dinaikan atau diturunkan, dan hasil keluaran dari blok ini adalah berupa PWM dan timer, dimana PWM dan timer yang diatur adalah konstan untuk tiap pengendali TDS dan pH adalah 255 untuk PWM dan 2 detik untuk timer. c) Blok aktuator, pada bagian blok ini aktuator akan bekerja sesuai dengan sinyal PWM dan timer yang diatur. Dimana pada pengendalian TDS diaphragm pump akan mengalirkan larutan nutrisi ke tandon nutrisi, dan water pump akan mengalirkan air ke dalam tandon nutrisi guna mengurangi kandungan nutrisinya. Kemudian pada pengendalian pH terdapat dua buah peristaltic pump untuk menaikan nilai pH dengan mengalirkan larutan pH naik ke tandon nutrisi dan menurunkan nilai pH dengan mengalirkan larutan pH turun ke tandon nutrisi. d) Blok plant, pada blok ini merupakan sebuah objek yang dikendalikan yaitu tandon berisi larutan nutrisi. e) Blok sensor, pada pengendalian TDS sensor TDS akan mengukur nilai TDS aktual setelah aksi pengontrolan yang selanjutnya akan diumpan balikan untuk dibandingkan dengan set point sehingga menghasilkan sinyal error. Sedangkan



34



pada pengendalian pH larutan, sensor yang digunakan untuk membaca pH larutan secara aktual adalah analog pH sensor. Yang kedua adalah sistem kendali dengan mengimplementasikan algoritma fuzzy logic. Berikut adalah blok diagram sistem kendalinya.



Gambar 3. 5 Diagram blok sistem kendali fuzzy logic TDS.



Gambar 3. 6 Diagram blok sistem kendali fuzzy logic pH.



Keterangan blok diagram pada sistem kendali menggunakan fuzzy logic: a) Blok input, pada bagian blok input merupakan sebuah nilai set point yang akan kita atur baik dalam pengendalian TDS maupun pH. Yang selanjutnya nilai ini yang akan dibandingkan dengan nilai TDS dan pH aktual sehingga menghasilkan nilai error dan delta error.



35



b) Blok proses, nilai yang akan diproses pada miktrokontroler ini merupakan nilai error dan delta error yang digunakan sebagai variabel input untuk diproses menggunakan algoritma fuzzy logic. Hasil keluaran dari fuzzy logic ini berupa nilai PWM dan timer untuk mengontrol kecepatan dari pompa dan lama waktunya pompa tersebut bekerja. c) Blok aktuator, pada bagian blok ini aktuator akan bekerja sesuai dengan sinyal PWM dan timer yang dihasilkan dari defuzzyfikasi. Dimana pada pengendalian TDS diaphragm pump akan mengalirkan larutan nutrisi ke tandon nutrisi, dan water pump akan mengalirkan air ke dalam tandon nutrisi guna mengurangi kandungan nutrisinya. Kemudian pada pengendalian pH terdapat dua buah peristaltic pump untuk menaikan nilai pH dengan mengalirkan larutan pH naik ke tandon nutrisi dan menurunkan nilai pH dengan mengalirkan larutan pH turun ke tandon nutrisi. d) Blok plant, pada blok ini merupakan sebuah objek yang dikendalikan yaitu tandon berisi larutan nutrisi. e) Blok sensor, sama seperti pada sistem kendali close loop, pengendalian TDS sensor TDS akan mengukur nilai TDS aktual setelah aksi pengontrolan yang selanjutkan akan diumpan balikan untuk dibandingkan dengan set point sehingga menghasilkan nilai error dan delta error sebagai variabel input untuk fuzzy logic. Sedangkan pada pengendalian pH larutan, sensor yang digunakan untuk membaca pH larutan secara aktual adalah analog pH sensor.



3.2.3. Perancangan Skematik Sistem Perancangan sistem kendali dan akuisisi data untuk sistem hidroponik NFT menggunakan metode fuzzy logic dengan implementasi Internet of Things (IoT) dibuat menggunakan beberapa komponen hardware dan software yang diintegrasikan. Perancangan yang telah dibuat dapat dilihat pada skematik rangkaian pada Gambar 3.7.



36



Gambar 3. 7 Wiring rangkaian sistem.



Untuk lebih jelasnya mengenai konfigurasi pin yang digunakan pada sistem ini dapat dilihat pada tabel 3.1. Sistem yang dirancang menggunakan dua buah sensor analog yaitu analog TDS sensor dan analog pH sensor yang dihubungkan dengan pin ADC 2 pada ESP32, untuk analog TDS sensor dihubungkan dengan pin 35 sedangkan analog pH sensor dihubungkan dengan pin 34. Kemudian untuk mekanik memasukan sensor TDS ke dalam tandon larutan nutrisi menggunakan servo, dimana pin PWM untuk servo TDS terhubung ke pin 19.



Untuk menampilkan hasil pengukuran secara langsung pada perangkat menggunakan LCD I2C 16x2 dengan menghubungkan pin SCL pada LCD ke pin 22 pada ESP32 dan pin SDA pada LCD dihubungkan ke pin 21. Driver motor digunakan untuk menggerakan diaphragm pump dan peristaltic pump, terdapat dua buah driver motor untuk driver motor yang pertama digunakan untuk menggerakan



37



peristaltic pump pH naik dan peristaltic pump pH turun dimana pin ENA dihubungkan dengan pin PWM pada ESP32 yaitu pin 32, pin IN1 dihubungkan dengan pin 33, pin IN2 dihubungkan dengan ground, pin IN3 dihubungkan dengan pin 26, pin IN4 dihubungkan dengan ground, dan pin ENB dihubungkan dengan pin PWM yaitu pin 25. Tujuan pin IN2 dan IN4 pada driver motor dihubungkan ke ground adalah untuk menghemat penggunaan pin dan juga pompa yang digunakan tidak perlu melakukan forward atau reverse, cukup forward saja karena hanya mengalirkan ke satu arah saja. Kemudian untuk driver motor yang kedua digunakan untuk menggerakan diaphragm pump, dimana ENA dihubungkan dengan pin 27, pin IN1 dihubungkan dengan pin 14, dan pin IN2 dihubungkan dengan pin ground. Pin IN3, IN4, dan ENB tidak digunakan. Kemudian untuk menggerakan water pump menggunakan modul relay 2 channel, IN2 dihubungkan dengan pin 13.



Tabel 3. 1 Konfigurasi pin out yang terhubung ke modul. Komponen



Pin



Analog TDS Sensor



Analog Vcc Gnd Analog Vcc Gnd PWM Vcc Gnd PWM Vcc Gnd SCL SDA Vcc Gnd 12V Gnd 5V ENA



Analog pH Sensor Servo TDS



Servo pH



LCD I2C 16x2



Driver Motor 1



Pin yang terhubung ke ESP32 Pin 35 Pin 3.3V Pin Gnd Pin 34 Pin 3.3V Pin Gnd Pin 19 Pin 18 Pin 22 Pin 21 Pin 32



38



Buck Converter 5V Gnd 5V Gnd 5V Gnd -



Power Supply 12V 12V Gnd -



Driver Motor 2



Modul Relay 2 ch



IN1 IN2 IN3 IN4 ENB 12V Gnd 5V ENA IN1 IN2 IN3 IN4 ENB Gnd IN1 IN2 Vcc



Pin 33 Pin Gnd Pin 26 Pin Gnd Pin 25 Pin 27 Pin 14 Pin Gnd Pin Gnd Pin 13 Pin 3.3V



-



12V Gnd -



3.2.4. Perancangan PCB Pada perancangan PCB, hardware yang akan dirancang terbagi menjadi tiga buah bagian yaitu modul input yang terdiri dari perangkat-perangkat sensor, mekanik untuk sensor, dan connector untuk menghubungkan modul input dengan main board. Main board terdiri dari power supply unit (PSU) 12 V, buck converter untuk menurunkan tegangan 12 V ke 5 V untuk keperluan power external ESP32 dan beberapa modul yang membutuhkan tegangan 5 V, kemudian connector untuk LCD, modul input dan modul output. Modul output terdiri dari dua buah driver L298N, modul relay, dan connector untuk menghubungkan modul output dengan main board. Connector yang digunakan adalah connector JST. Berikut adalah layout PCB yang dirancang.



39



Gambar 3. 8 Layout PCB modul input.



Gambar 3. 9 Layout PCB main board.



40



Gambar 3. 10 Layout PCB modul output.



3.3. Perancangan Software Untuk mengimplementasikan proses kendali fuzzy logic dan Internet of Things agar sesuai yang diharapkan, diperlukanlah peracangan software untuk membuat cara kerja dari algoritma yang akan diimplementasikan pada perangkat, perancangan fuzzy logic yang akan digunakan, kemudian aliran data dari sistem, dan juga sistem IoT nya.



3.3.1. Diagram Alir Untuk memahami cara kerja dari sistem yang dibuat dapat dilihat pada diagram alir pada Gambar 3.11. Sistem pengendalian dibuat secara sequence dimana proses pengendalian TDS dilakukan terlebih dahulu dan setelah proses pengendalian TDS selesai maka akan dilanjutkan dengan proses pengendalian pH. Berikut adalah diagram alir dari sistem.



41



Gambar 3. 11 Diagram alir sistem.



Penjelasan dari diagram alir pada Gambar 3.11 adalah : 1.



Diawali dengan start yang menandakan awal mulai diagram alir ini bekerja.



2.



Melakukan inisialisasi pada fungsi WiFi, MQTT broker, Network Time Protokol (NTP) server, input, output, dan variabel-variabel yang digunakan dalam program.



3.



Selanjutnya masuk ke dalam proses menghubungkan perangkat ke dalam jaringan WiFi, setelah proses koneksi berhasil kemudian masuk ke dalam proses menghungkan perangkat dengan MQTT broker.



4.



Ketika perangkat menerima data dari MQTT broker maka, data-data tersebut akan diuraikan terlebih dahulu pada sub proses parsing data.



42



5.



Setelah sistem menerima data dari MQTT berupa data timer untuk proses pengendalian, data timer tersebut akan parsing dan dibandingkan dengan data waktu yang didapat dari NTP server. Jika waktu yang didapat dari NTP server sudah sama dengan data timer makan sistem akan masuk ke dalam mode pengendalian. Kemudian terdapat data force on dimana jika data tersebut bernilai 1 atau true maka sistem akan menjalankan proses pengendalian tanpa harus sesuai dengan jadwal yang ditentukan.



6.



Jika data timer sudah dengan waktu dari NTP server atau data force on bernilai 1 maka sistem akan menjalan proses pengendalian TDS terlebih dahalu, setelah proses pengendalian TDS selesai, akan dilanjutkan dengan proses pengendalian pH. Apabila data timer masih belum sesuai dengan NTP server maka sistem akan masuk ke dalam monitoring mode.



7.



Setelah proses pengendalian selesai maka program akan kembali ke proses pengecekan data dari MQTT broker dan pengecekan data timer dengan NTP server. Apabila sistem dimatikan maka program berakhir.



3.3.2. Sub Process Pada Diagram Alir Sistem Setelah di atas dijelaskan tentang cara kerja sistem melalui proses diagram alir, karena pada diagram alir tersebut terdapat sub proses sistem maka selanjutnya akan dijelaskan lebih lanjut pada bagian sub proses dari diagram alir sistem. Terdapat 4 buah sub process yang ada pada sistem ini, yaitu sub proses connect WiFi dan MQTT broker, sub proses parsing data, sub proses kendali TDS, serta sub proses kendali pH.



a) Sub proses connect WiFi dan MQTT broker Berikut adalah sub proses untuk menghubungkan perangkat dengan WiFi dan MQTT broker dapat dilihat pada diagram alir pada Gambar 3.12.



43



Gambar 3. 12 Sub proses menghubungkan perangkat ke WiFi dan MQTT.



Pada sub proses menghubungakan WiFi, diawali dengan setup ssid dan password yang akan digunakan untuk sebagai penyedia layanan konektifitas untuk perangkat. Kemudian selanjutnya adalah proses koneksi perangkat ke jaringan yang sesuai dengan ssid dan password yang sudah di setup, pada saat



44



proses koneksi LCD akan menampilkan notifikasi “Connecting WiFi” dan variabel attempt bertambah, apabila proses koneksi telah 40 kali gagal mencoba untuk menghubungkan dengan jaringan maka LCD akan menampilkan notifikasi “Connecting Fail” dan ESP32 akan restart kembali dari awal. Setelah proses menghubungkan perangkat dengan jaringan berhasil selanjutnya adalah proses menghubungkan perangkat dengan MQTT server dimana setup config yang dilakukan adalah dengan memasukan MQTT server yang akan digunakan dan port yang akan digunakan, pada penelitian kali ini adalah menggunakan broker MQTTX, setting MQTT server yang digunakan adalah broker.emqx.io dan port yang digunakan adalah 1883, ketika proses menghubungkan perangkat dengan MQTT broker telah berhasil maka akan dilanjutkan ke proses selanjutnya.



b) Sub proses parsing data Pada sub proses ini berfungsi untuk menguraikan data-data yang dikirimkan dari MQTT broker ke ESP32. Dimana data-data yang dikirimkan dalam bentuk format JSON, dan data akan di deserialize atau proses konversi data string ke dalam bentuk object kemudian disimpan ke dalam variabel. Ketika data yang diterima merupakan data timer dan memiliki key [0][“timer1”] maka value yang ada di dalam key tersebut akan disimpan dalam variabel timer 1, apabila data yang dikirimkan memiliki key [1][“timer2”] maka value yang ada di dalam key tersebut akan disimpan ke dalam variabel timer 2, begitu pun seterusnya apabila data tersebut memiliki key [2][“timer3”] maka value nya akan disimpan ke dalam variabel timer 3. Data – data timer yang berada di dalam variabel timer kemudian akan disimpan di dalam EEPROM. Ketika data yang diterima adalah data set point dan memiliki key [0][“tds_set”] maka value nya akan disimpan ke dalam variabel set point TDS dan apabila data memiliki key [1][“ph_set] maka value nya akan disimpan ke dalam variabel set point pH. Kemudian data set point yang sudah disimpan pada variabel selanjutnya akan disimpan kembali ke dalam EEPROM.



45



Jika data yang diterima memiliki key [0][“force_on”], value yang dimiliki key tersebut akan disimpan di dalam variabel force on, jika data yang diterima memiliki key [0][“force_stop”], value yang dimiliki key tersebut akan disimpan di dalam variabel force stop. Key yang dikirimkan dari MQTT broker ke ESP32 telah disesuaikan dengan atau diatur di dalam Node-Red. Berikut adalah sub proses untuk parsing data dapat dilihat pada Gambar 3.13.



Gambar 3. 13 Sub proses parsing data.



46



c) Sub proses monitoring mode Berikut adalah sub proses dari monitoring mode dapat dilihat pada Gambar 3.14.



Gambar 3. 14 Sub proses monitoring mode. Sub proses akan bekerja apabila sistem belum masuk ke dalam proses pengendalian, dimana data force on masih bernilai “0” dan data timer masih belum sama dengan NTP server. Apabila waktu sekarang dikurang dengan waktu sebelumnya sudah lebih dari sama dengan interval sampling maka timer sampling aktif dan servo TDS akan aktif untuk memasukan analog TDS sensor ke dalam tandon nutrisi. Waktu Sekarang diambil dari fungsi millis pada ESP32 yang merupakan waktu internal setiap milli secara independen. Kemudian sistem akan melakukan pengukuran nilai TDS dan pengukuran ADC dari analog pH sensor yang selanjutnya akan dilakukan proses filtering untuk mendapatkan nilai pH yang stabil. Ketika timer sampling sudah berjalan selama 30 detik maka data-data hasil pengukuran akan dikirimkan ke MQTT dan servo TDS akan



47



kembali ke posisi awal. Apabila timer sampling belum berjalan selama 30 detik maka proses pembacaan nilai TDS dan pH akan dilakukan kembali.



d) Sub proses kendali TDS Berikut adalah sub proses dari kendali TDS dengan algoritma fuzzy logic dapat dilihat pada Gambar 3.15.



Gambar 3. 15 Sub proses kendali TDS menggunakan fuzzy logic.



48



Pada sub proses ini ketika sistem sudah mulai melaksanakan proses pengendalian TDS maka sub proses ini akan aktif, diawali dengan menyalanya servo dimana servo akan bergerak 90° untuk mencelupkan sensor TDS ke dalam larutan nutrisi, selanjutnya adalah proses pembacaan nilai TDS dimana pada proses ini akan dilakukan selama 10 detik agar pembacaan yang dihasilkan stabil. Sesudah nilai TDS didapatkan, nilai tersebut akan dibandingkan dengan nilai threshold, dimana nilai threshold ini merupakan nilai ambang pada program yang dibuat terdapat dua buah nilai threshold yaitu nilai threshold atas dan nilai threshold bawah, nilai threshold bawah ini diambil dari nilai set point dikurang dengan nilai set point yang sudah dikalikan dengan set point. Sedangkan nilai threshold atas diambil dari nilai set point ditambah dengan nilai set point yang sudah dikalikan dengan set point.



Ketika nilai pembacaan TDS sudah berada antara nilai threshold bawah dan nilai threshold atas maka timer kontrol akan aktif selama 3 menit dan runonce akan aktif untuk mencegah timer kontrol ini mengulang lagi perhitungannya pada loop berikutnya, dan apabila nilai pembacaan TDS belum menyentuh nilai threshold maka timer kontrol tidak akan aktif terlebih dahulu. Setelah membandingkan nilai threshold selanjutnya nilai pembacaan TDS akan dikirimkan ke MQTT broker dan ditampilkan ke LCD.



Selanjutnya adalah proses mencari nilai error, nilai error ini didapat dari hasil pengurangan set point dengan nilai pembacaan TDS, setelah itu proses mencari nilai delta error dengan mengurangkan nilai error saat ini dengan nilai error sebelumnya, kemudian nilai error akan disimpan di dalam variabel last error. nilai error dan delta error ini akan dijadikan variabel input fuzzy logic.



Setelah mendapatkan nilai error dan delta error, selanjutnya adalah proses fuzzyfikasi. Nilai error dan delta error ini akan diubah ke dalam bentuk fuzzy input, yang berupa nilai linguistik yang ditentukan berdasarkan fungsi keanggotaan. Fuzzy inference system akan melakukan penalaran menggunakan



49



fuzzy input dan fuzzy rules yang telah dibuat sehingga menghasilkan fuzzy output, setelah mendapatkan fuzzy output pada defuzzifikasi akan diubah ke dalam suatu nilai tegas.



Hasil proses defuzzyfikasi berupa nilai PWM dan timer untuk aktuator bekerja. Nilai PWM dan timer ini digunakan untuk menjalan diaphragm pump, sedangkan untuk water pump hanya menggunakan nilai timer nya saja untuk lama waktunya water pump ini bekerja. Apabila nilai error lebih dari sama dengan nol maka hanya diaphragm pump yang akan bekerja berdasarkan nilai PWM dan timer, apabila nilai error kurang dari nol maka hanya water pump saja yang bekerja berdasarkan nilai timer. Dan kondisi aktuator ini ketika bekerja akan dikirimkan ke MQTT broker untuk dimonitoring apakah bekerja atau tidak. Diaphragm pump atau water pump ini akan bekerja hingga timer selesai. Jika timer sudah selesai maka Diaphragm pump atau water pump yang tadinya bekerja akan dipadamkan.



Jika timer kontrol tidak aktif maka proses akan kembali lagi ke proses pembacaan nilai TDS, apabila timer kontrol sudah aktif maka akan masuk ke kondisi berikutnya yaitu memastikan apakah timer kontrol sudah aktif selama 3 menit, apabila timer kontrol belum berjalan selama 3 menit maka proses akan kembali lagi ke proses pembacaan nilai TDS, jika timer sudah berjalan 3 menit maka runonce akan diubah ke 0 kembali untuk proses pengendalian TDS pada jadwal berikutnya, dan servo akan padam sehingga bergerak ke 0°.



50



e) Sub proses kendali pH Berikut adalah sub proses dari kendali pH dapat dilihat pada Gambar 3.16.



Gambar 3. 16 Sub proses kendali pH menggunakan fuzzy logic.



Pada sub proses kendali pH sedikit berbeda dengan kendali TDS pada bagian pembacaan pengukuran nilai pH, waktu yang diatur untuk mengukur pH adalah 30 detik, pertama ketika sistem sudah selesai melaksanakan proses pengendalian TDS maka sub proses kendali pH ini akan aktif, diawali dengan melakukan pembacaan nilai ADC dari sensor pH dan mendapatkan nilai pH, kemudian nilai pH tersebut akan dilakukan proses filtering dengan cara merata-ratakan nilai pH



51



yang didapat selama proses pengukuran 30 detik agar hasil nilai pembacaan pH yang didapatkan stabil. Sesudah nilai pH didapatkan, nilai tersebut akan dibandingkan dengan nilai threshold, dimana nilai threshold cara kerjanya sama seperti yang sudah diuraikan pada sub proses kendali TDS.



Ketika nilai pembacaan pH sudah berada antara nilai threshold bawah dan nilai threshold atas maka timer kontrol akan aktif selama 5 menit dan runonce akan aktif untuk mencegah timer kontrol ini mengulang lagi perhitungannya pada loop berikutnya, dan apabila nilai pembacaan pH belum menyentuh nilai threshold maka timer kontrol tidak akan aktif terlebih dahulu. Setelah membandingkan nilai threshold selanjutnya nilai pembacaan TDS akan dikirimkan ke MQTT broker dan ditampilkan ke LCD.



Selanjutnya adalah proses mencari nilai error, nilai error ini didapat dari hasil pengurangan set point dengan nilai pembacaan pH, setelah itu proses mencari nilai delta error dengan mengurangkan nilai error saat ini dengan nilai error sebelumnya, kemudian nilai error akan disimpan di dalam variabel last error. nilai error dan delta error ini akan dijadikan variabel input fuzzy logic.



Setelah mendapatkan nilai error dan delta error, selanjutnya adalah proses fuzzyfikasi. Nilai error dan delta error ini akan diubah ke dalam bentuk fuzzy input, yang berupa nilai linguistik yang ditentukan berdasarkan fungsi keanggotaan. Fuzzy inference system akan melakukan penalaran menggunakan fuzzy input dan fuzzy rules yang telah dibuat sehingga menghasilkan fuzzy output, setelah mendapatkan fuzzy output pada defuzzifikasi akan diubah ke dalam suatu bilangan riil.



Hasil proses defuzzyfikasi berupa nilai PWM dan timer untuk aktuator bekerja. Nilai PWM dan timer ini digunakan untuk menjalankan peristaltic pump. Apabila nilai error lebih dari sama dengan nol maka hanya peristaltic pump untuk menaikan nilai pH yang akan bekerja berdasarkan nilai PWM dan timer,



52



apabila nilai error kurang dari nol maka peristaltic pump untuk menurunkan pH saja yang bekerja berdasarkan nilai PWM dan timer. Dan kondisi aktuator ini ketika bekerja akan dikirimkan ke MQTT broker untuk dimonitoring apakah sedang aktif atau tidak. Peristaltic pump ini akan bekerja hingga timer selesai. Jika timer sudah selesai maka Peristaltic pump yang tadinya bekerja akan dipadamkan.



Jika timer kontrol tidak aktif maka proses akan kembali lagi ke proses pembacaan nilai pH, apabila timer kontrol sudah aktif maka akan masuk ke kondisi berikutnya yaitu memastikan apakah timer kontrol sudah aktif selama 3 menit, apabila timer kontrol belum berjalan selama 5 menit maka proses akan kembali lagi ke proses pembacaan nilai pH, jika timer sudah berjalan 5 menit maka runonce akan diubah ke 0 kembali untuk proses pengendalian pH pada jadwal berikutnya.



3.3.3. Data Flow Diagram Untuk melihat aliran data yang secara jelas dapat dilihat pada Gambar 3.17 dalam diagram dapat dilihat terdapat data yang disiapkan pada proses fuzzy logic berupa pembacaan sensor dan kondisi aktuator. Data yang dikirimkan dalam format string dengan struktur data “nilai TDS, nilai pH” pada paket data sensor, sedangkan untuk paket data aktuator memiliki struktur data “state pH up, state pH down, state TDS up, state TDS down”. Kemudian pada proses pengambilan data Node-Red akan mengambil data yang diperlukan dengan mengakses MQTT broker. Data pembacaan sensor dan kondisi aktuator tersebut akan di parsing berdasarkan “,”.



Kemudian pada entitas Node-Red akan mengirimkan beberapa data berupa data timer, data set point, dan data force. Data-data tersebut akan di serialize terlebih dahulu atau konversi object data ke dalam bentuk string pada proses serialize data kemudian dipublikasikan ke MQTT broker dalam format JSON yang kemudian data tersebut akan di parsing atau diuraikan pada proses dan deserialize dan schedule. Kemudian data time set dan set point akan disimpan pada entitas



53



EEPROM dan data set point akan dikirimkan ke proses fuzzy logic. Data force akan masuk ke entitas state control, data force ini digunakan untuk memberikan control signal pada proses fuzzy logic tanpa bergantung dengan jadwal. Data time set akan dikirimkan ke entitas time control dimana pada entitas ini digunakan untuk membandingkan data jadwal dengan waktu aktual, apabila data timer sama dengan waktu aktual maka entitas time control akan mengirimkan control signal ke proses fuzzy logic.



Gambar 3. 17 Data flow diagram.



54



3.3.4. Perancangan Fuzzy logic Untuk metode pengendalian yang akan diimplementasikan adalah fuzzy logic tipe sugeno dengan menggunakan dua buah variabel input yaitu error dan delta error dan dua buah variabel output hasil defuzzyfikasi yaitu nilai PWM dan timer untuk mengendalikan pompa.



a) Fuzzy logic untuk kendali TDS Pada bagian fuzzyfikasi variabel input error terdapat 5 membership function yaitu negatif error besar, negatif error kecil, zero error, positif error kecil, dan positif error besar. Kemudian untuk variabel input delta error terdapat 5 membership function yaitu negatif delta error besar, negatif delta error kecil, zero delta error, positif delta error kecil, dan positif delta error besar. Dan untuk variabel output PWM terdapat 3 buah membership function yaitu lambat, sedang, dan cepat. Untuk variabel output timer terdapat 3 buah membership function bentar, sedang, dan lama. Berikut adalah tabel pembentukan fungsi keanggotaan fuzzy dapat dilihat pada Tabel 3.2. Tabel 3. 2 Pembentukan fungsi keanggotaan fuzzy untuk kendali TDS. I/O



Input 1



Input 2



Output 1



Output 2



Variabel



Error



Delta Error



PWM



Timer



Range



[-250 250]



[-150 150]



Membership function



Type



Parameter



Negatif Error Besar (NB-Er)



trapmf



[-250 -250 -200 -100]



Negatif Error Kecil (NK-Er)



trimf



[-200 -100 0]



Zero Error (Z-Er)



trimf



[-100 0 100]



Positif Error Kecil (PK-Er)



trimf



[0 100 200]



Positif Error Besar (PB-Er)



trapmf



[100 200 250 250]



Negatif dError Besar (NB-dEr)



trapmf



[-150 -150 -100 -50]



Negatif dError Kecil (NK-dEr)



trimf



[-100 -50 0]



Zero dError (Z-dEr)



trimf



[-50 0 50]



Positif dError Kecil (PK-dEr)



trimf



[0 50 100]



Positif dError Besar (PB-dEr)



trapmf



[50 100 150 150]



Lambat



Constant



[178]



Sedang



Constant



[204]



Cepat



Constant



[255]



Bentar



Constant



[0]



Sedang



Constant



[1000]



Lama



Constant



[2000]



[0 1]



[0 1]



55



Dan berikut adalah hasil perancangan membership function pada MATLAB menggunakan fuzzy logic toolbox.



Gambar 3. 18 Membership function error pada kendali TDS.



Gambar 3. 19 Membership function delta error pada kendali TDS.



56



Gambar 3. 20 Membership function PWM pada kendali TDS.



Gambar 3. 21 Membership function timer pada kendali TDS.



Rules base yang dirancang pada pengendalian TDS ini menggunakan 25 basis aturan, dapat dilihat pada Tabel 3.3 Untuk mengendalikan nilai PWM dan Tabel 3.4 Untuk nilai timer untuk lama bekerjanya aktuator.



57



Tabel 3. 3 Rules base output PWM pada kendali TDS. NK - Er Sedang



Z - Er



PK - Er



PB - Er



NB - dEr



NB - Er Cepat



Lambat



-



-



NK- dEr



Cepat



Sedang



Lambat



-



-



Z - dEr



Cepat



Sedang



Lambat



-



-



PK - dEr



Cepat



Sedang



Lambat



-



-



PB - dEr



Sedang



Sedang



Lambat



-



-



Tabel 3. 4 Rules base output timer pada kendali TDS. NB - Er



NK - Er



Z - Er



PK - Er



PB - Er



NB - dEr



Lama



Sedang



Sedang



Sedang



Lama



NK- dEr



Lama



Sedang



Bentar



Sedang



Lama



Z - dEr



Lama



Sedang



Bentar



Sedang



Lama



PK - dEr



Sedang



Sedang



Bentar



Sedang



Lama



PB - dEr



Sedang



Sedang



Sedang



Sedang



Lama



b) Fuzzy logic untuk kendali pH Untuk perancangan fuzzy logic pada kendali pH sama seperti pada fuzzy logic kendali TDS hanya saja perbedaan dari nilai parameter tiap membership function yang digunakan dan juga rules base yang digunakan. Berikut adalah tabel pembentukan fungsi keanggotaan pada kendali pH.



58



Tabel 3. 5 Pembentukan fungsi keanggotaan fuzzy pada kendali pH. I/O



Input 1



Input 2



Output 1



Output 2



Variabel



Error



Delta Error



PWM



Timer



Range



[-1,5 1,5]



[-1,5 1,5]



Membership function



Type



Parameter



Negatif Error Besar (NB-Er)



trapmf



[-1,5 -1,5 -0,4 -0,1]



Negatif Error Kecil (NK-Er)



trimf



[-0,4 -0,1 0 ]



Zero Error (Z-Er)



trimf



[-0,1 0 0,1]



Positif Error Kecil (PK-Er)



trimf



[0 0,1 0,4]



Positif Error Besar (PB-Er)



trapmf



[0,1 0,4 1,5 1,5]



Negatif dError Besar (NB-dEr)



trapmf



[-1.5 -1.5 -0,4 -0,1]



Negatif dError Kecil (NK-dEr)



trimf



[-0,4 -0,1 0 ]



Zero dError (Z-dEr)



trimf



[-0,1 0 0,1]



Positif dError Kecil (PK-dEr)



trimf



[0 0,1 0,4]



Positif dError Besar (PB-dEr)



trapmf



[0,1 0,4 1,5 1,5]



Lambat



Constant



[127]



Sedang



Constant



[178]



Cepat



Constant



[255]



Bentar



Constant



[0]



Sedang



Constant



[2500]



Lama



Constant



[5000]



[0 1]



[0 1]



Berikut adalah hasil perancangan membership function pada MATLAB menggunakan fuzzy logic toolbox.



Gambar 3. 22 Membership function error pada kendali pH.



59



Gambar 3. 23 Membership function delta error pada kendali pH.



Gambar 3. 24 Membership function PWM pada kendali pH.



60



Gambar 3. 25 Membership function timer pada kendali pH.



Rules base yang dirancang pada pengendalian pH ini menggunakan 25 basis aturan sama seperti pada pengendalian TDS hanya saja basis aturannya yang berbeda baik untuk PWM dan timer, rules base yang digunakan dapat dilihat pada Tabel 3.6 Untuk mengendalikan nilai PWM dan Tabel 3.7 untuk nilai timer untuk lama bekerjanya aktuator. Tabel 3. 6 Rules base output PWM pada kendali pH. NK - Er Sedang



Z - Er



PK - Er



PB - Er



NB - dEr



NB - Er Cepat



Lambat



Sedang



Sedang



NK- dEr



Cepat



Sedang



Lambat



Sedang



Cepat



Z - dEr



Cepat



Sedang



Lambat



Sedang



Cepat



PK - dEr



Cepat



Sedang



Lambat



Sedang



Cepat



PB - dEr



Sedang



Sedang



Lambat



Sedang



Cepat



Tabel 3. 7 Rules base output timer pada kendali pH. NK - Er Lama



Z - Er



PK - Er



PB - Er



NB - dEr



NB - Er Lama



Sedang



Bentar



Bentar



NK- dEr



Lama



Lama



Bentar



Bentar



Sedang



Z - dEr



Lama



Sedang



Bentar



Sedang



Lama



PK - dEr



Sedang



Bentar



Bentar



Lama



Lama



PB - dEr



Bentar



Bentar



Sedang



Lama



Lama



61



3.3.5. Perancangan Node-Red Pada perancangan Node-Red terdiri dari beberapa grup flow, grup flow time set untuk melakukan penjadwalan pengendalian perangkat, grup flow force on dan force off untuk menyalakan pengendalian TDS dan pH tanpa perlu sesuai dengan jadwal dan mematikan pengendalian ketika sedang bekerja. Grup flow set point untuk mengatur nilai set point TDS dan pH yang akan dikirimkan ke perangkat. Grup flow read value untuk mengolah data pembacaan nilai TDS dan pH yang dikirimkan dari ESP32 ke MQTT broker. Grup flow read state untuk mengolah data kondisi dari aktuator yang dikirimkan ESP32 ke MQTT broker.



a) Grup flow timer set Pada grup timer set terdiri dari 3 node text input yang diatur dalam mode time picker yang nantinya waktu yang ingin atur dimasukan ke dalam node tersebut, data waktu yang dimasukan pada node text input ini akan diubah format nya pada node date/time formatter ke dalam bentuk jam dan menit yang time zone nya disesuaikan dengan tempat dimana perangkat berada. Terdapat juga 3 buah node switch dimana node ini berfungsi sebagai switch untuk timer, ketika switch ini dinyalakan maka data timer yang sudah diatur akan bisa aktif dan data timer akan dikirimkan sesuai dengan data yang sudah diatur, sebaliknya ketika switch ini dimatikan maka data timer yang sudah diatur maka data yang akan dikirimkan akan bernilai “0”.



Kemudian node join digunakan untuk menggabungkan beberapa data atau pesan ke dalam satu data. Data-data yang sudah digabungkan tersebut maka akan diubah ke dalam format JSON pada node function untuk script yang digunakan pada node function dapat dilihat pada Gambar 3.26.



62



Gambar 3. 26 Script function pada flow set timer.



Node JSON digunakan untuk mengkonversi bentuk json string ke object. kemudian data yang sudah berbentuk JSON ini akan dikirim kan melalui MQTT broker dengan topic /SendValue. Berikut adalah flow time set yang sudah dihubungkan antar nodenya



63



Gambar 3. 27 Flow set timer.



b) Grup flow Force On / Stop Pada grup flow ini terdiri dari 2 buah node button untuk menyalakan pengendalian pada perangkat secara paksa dan mematikannya secara paksa, dimana sebelum dikirimkan ke MQTT broker data dari force on dan force off ini diubah dalam bentuk JSON pada node function. Berikut adalah script pada node function untuk force on dapat dilihat pada Gambar 3.28 dan force stop dapat dilihat pada Gambar 3.29.



Gambar 3. 28 Script pada function force on.



Gambar 3. 29 Script pada function force stop.



64



Berikut adalah flow force on dan force stop yang sudah dihubungkan antar flownya dapat dilihat pada Gambar 3.30.



Gambar 3. 30 Flow force on dan force stop.



c) Grup flow set point Pada grup flow set point terdiri dari 2 buah node text input yang diubah dalam mode number jadi pada node ini hanya bisa dimasukan nilai dalam bentuk angka saja. Node text input yang pertama adalah untuk memasukan nilai set point untuk pH dan yang kedua untuk set point TDS. Kemudian data-data set point digabungkan menggunakan node join. Data-data set point yang telah dihubungkan selanjutnya diubah format nya ke dalam bentuk JSON pada node function dan node json. Berikut adalah script yang digunakan pada node function dapat dilihat pada Gambar 3.31.



65



Gambar 3. 31 Script pada function set point.



Setelah data set point diubah ke dalam format JSON selanjutnya data tersebut dikirimkan ke MQTT broker dengan topic yang sama yaitu /SendValue. Berikut adalah grup flow set point yang sudah dihubungkan antar node nya dapat dilihat pada Gambar 3.32.



Gambar 3. 32 Flow set point.



d) Grup flow read value Pada grup flow ini digunakan untuk membaca data yang dikirimkan ESP32 ke MQTT broker sehingga dapat ditampilkan pada dashboard Node-Red yang sudah dibuat. Sebelum data tersebut bisa ditampilkan data-data yang dikirim



66



ESP32 harus diolah terlebih dahulu. Diawali dengan membaca data dari MQTT broker dengan topic /ReadValue kemudian data tersebut dipisahkan berdasarkan koma (,) dengan menggunakan node csv karena data yang dikirimkan berbentuk paket yang terdiri dari pembacaan nilai TDS dan pH. Data yang dihasilkan pada node csv akan terdiri dari 2 buah kolom, kolom yang pertama adalah pembacaan nilai TDS, dan kolom yang kedua adalah pembacaan nilai pH. Setelah data tersebut dipisahkan maka data akan masuk ke dalam node change dimana pada node ini akan mengganti nilai pembacaan payload atau pesan menjadi pembacaan yang lebih spesifik, pada node change pertama data payload akan diambil data payload kolom pertamanya saja yang merupakan nilai TDS, dan node change kedua data payload akan diambil kolom keduanya saja yang merupakan nilai pH. Data-data ini kemudian akan ditampilkan menggunakan node gauge dan node chart. Data-data hasil pembacaan disimpan ke dalam database SQLite, dengan mengubah payload dari pembacaan TDS dan pH kedalam variabel flow, kemudian masuk ke dalam function gather data, pada function ini data tanggal, waktu, dan pengukuran akan dijadikan pesan. Berikut adalah script dari function gather data.



Gambar 3. 33 Function gather data.



67



Setelah melewati function gather flow, data akan masuk ke dalam node function insert data TDS dan insert data pH, pada function ini msg.topic akan diubah ke dalam menjadi perintah query untuk memasukan nilai pembacaan ke dalam database berikut adalah script pada function insert data.



Gambar 3. 34 Function insert data.



Setelah memasukan hasil pengukuran ke dalam database, data hasil pengukuran akan ditampilkan pada dashboard dalam bentuk tabel dengan menggunakan perintah query select table pada database, perintah ini dimasukan ke dalam function dan msg.topic diubah menjadi perintah query setelah itu node function akan dihubungkan dengan node table untuk menampilkan data dari database Berikut adalah script function select table dan grup flow read value yang nodenya sudah dihubungkan dapat dilihat pada Gambar 3.35 dan Gambar 3.36.



Gambar 3. 35 Function select table.



68



Gambar 3. 36 Flow read value. e) Grup flow read state Pada grup ini digunakan untuk membaca state atau kondisi aktuator apakah sedang dalam kondisi nyala atau dalam kondisi mati. Data pembacaan kondisi yang dikirimkan ESP32 ke MQTT broker dengan topic /ReadState akan masuk ke dalam node csv terlebih dahalu untuk dipisahkan berdasarkan koma (,) , dimana data yang dikirimkan dalam bentuk paket yang terdiri dari state peristaltic pump pH naik, state peristaltic pump pH turun, state diaphragm pump, dan state water pump. Data yang sudah dipisahkan masih ke dalam satu paket pesan atau payload akan tetapi tiap pesannya sudah terpisah berdasarkan kolom, dimana kolom satu adalah state peristaltic pump pH naik, kolom kedua adalah state peristaltic pump pH turun, kolom ketiga state diaphragm pump, dan kolom keempat adalah state water pump. Data-data tersebut akan masuk ke dalam node change untuk mengambil nilai state tersebut berdasarkan kolomnya yang berisi data state. Setelah itu tiap data state akan ditampilkan dalam bentuk led pada dashboard. Berikut adalah flow read state yang sudah dihubungkan setiap node nya dapat dilihat pada Gambar 3.37.



69



Gambar 3. 37 Flow read state.



Berikut adalah tampilan dashboard yang sudah dirancang berdasarkan flow yang sudah dibuat dapat dilihat pada Gambar 3.38.



Gambar 3. 38 Tampilan pada dashboard Node-Red.



3.3.5. Pembuatan Database SQLite Untuk penyimpanan data hasil pengukuran TDS dan pH, data – data tersebut akan disimpan di dalam sebuah database, database yang digunakan untuk sistem kali ini adalah SQLite. Pada database yang dirancang terdapat dua buah tabel pengukuran yaitu tabel pengukuran TDS yang terdiri dari tiga buah values date, time, TDS value dan untuk tabel pengukuran pH terdiri dari tiga buah values date, time, pH value. Untuk proses pembuatan database masuk ke dalam terminal server. Berikut adalah tahapan dalam pembuatan database dapat dilihat Gambar 3.39, Gambar 3.40, dan Gambar 3.41.



70



Gambar 3. 39 Perintah untuk membuat database.



Gambar 3. 40 Perintah untuk membuat tabel pengukuran TDS.



Gambar 3. 41 Perintah untuk membuat tabel pengukuran pH.



3.3.6. Hosting Node-Red Pada Server Untuk membuat dashboard Node-Red dapat diakses secara remote maka diperlukan untuk hosting Node-Red terlebih dahulu pada server. Untuk hosting Node-Red diperlukan sebuah Virtual Private Server (VPS), kemudian menginstal software yang diperlukan yaitu Node-Red dan SQLite pada server dan import flow Node-Red yang sebelumnya sudah dibuat pada Node-Red lokal.



71



BAB IV HASIL PENGUJIAN DAN ANALISIS 4.1. Hasil Implementasi Perangkat 4.1.1. Hasil Perancangan Board Hasil perancangan dari layout PCB yang sudah dibuat terbagi menjadi tiga bagian, yaitu modul input, main board, modul output. Pada modul input terdiri dari transmitter board untuk sensor TDS, transmitter board untuk sensor pH, dan connector untuk motor servo sebagai mekanik untuk sensor TDS. Berikut adalah hasil modul input yang sudah dibuat dapat dilihat pada Gambar 4.1.



Gambar 4. 1 Modul input sistem.



Kemudian untuk main board sendiri terdari PSU 12V, buck converter, ESP32, dan berbagai connector untuk LCD, modul input, dan modul output. Berikut adalah hasil main board yang sudah dirancang dapat dilihat pada Gambar 4.2.



72



Gambar 4. 2 Main board sistem.



Untuk modul output sendiri terdiri dari driver motor L298N dan relay. Berikut adalah hasil modul output yang sudah dirancang dapat dilihat pada Gambar 4.3.



Gambar 4. 3 Modul output sistem.



73



4.1.2. Hasil Pengimplemantasian Perangkat Pada Plant Berikut adalah penempatan modul input, main board, dan modul output pada plant hidroponik.



Gambar 4. 4 Penempatan modul.



Gambar 4. 5 Plant hidroponik setelah pengimplementasian perangkat.



74



4.2. Hasil Pengujian Hardware Pengujian perangkat mencakup pengujian sensor pH dan sensor TDS, penerimaan data pada perangkat, pengujian jadwal pengontrolan, pengujian sistem secara close loop, dan pengujian sistem dengan implementasi fuzzy logic.



4.2.1. Pengujian sensor dan kalibrasi a) Kalibrasi Sensor TDS Pada pengujian ini sensor-sensor yang digunakan akan dikalibrasi terlebih dahulu. Kalibrasi dilakukan dengan membandingkan pembacaan sensor dengan alat ukur yang dijadikan referensi. Alat ukur yang dijadikan referensi untuk kalibrasi sensor TDS adalah TDS meter dan untuk kalibrasi sensor pH adalah pH meter. Berikut adalah pembacaan analog TDS sensor dengan menggunakan persamaan sebelum dilakukan adjustment dapat dilihat pada Tabel 4.1. Tabel 4. 1 Hasil pengukuran pada saat kalibrasi.



No



Larutan (ppm)



persamaan ADC



Voltage



bawaan hasil (ppm)



Error (%)



1



57



54



0.04



17



70,175



2



198



604



0.49



184



7,070



3



401



1071



0.86



314



21,695



4



496



1386



1.12



412



16,935



5



618



1607



1.29



484



21,682



6



844



1789



1.44



547



35,189



7



1100



1960



1.58



615



44,090



Error rata-rata



30,977



Nilai referensi yang digunakan merupakan larutan nutrisi yang sudah diukur dengan TDS meter. Berdasarkan hasil pengukuran pada tabel nilai error yang dihasilkan cukup besar sehingga pembacaan tidak akan akurat. Untuk persamaan bawaan yang



75



digunakan merupakan persamaan yang didapat pada website resmi dari dfrobot. Berikut adalah persamaan yang digunakan. 𝑡𝑑𝑠 = ((133,42 × 𝑉𝑜𝑙𝑡𝑎𝑔𝑒 3 ) − (255,86 × 𝑉𝑜𝑙𝑡𝑎𝑔𝑒 2 ) + (857,39 × 𝑉𝑜𝑙𝑡𝑎𝑔𝑒)) × 0,5



(4.1)



Dikarenakan hasil error pengukuran yang cukup besar maka adjustment dilakukan dengan membandingkan nilai referensi dengan tegangan yang terbaca oleh ESP32. Berikut adalah perbandingan nilai referensi dengan tegangan yang terbaca dapat dilihat pada Gambar 4.6.



Perbandingan tds dengan voltage 1200 1000



ppm



800 600 400 200 0 0



0,2



0,4



0,6



0,8



1



1,2



1,4



1,6



1,8



Voltage (V)



Gambar 4. 6 Grafik perbandingan nilai referensi dengan tegangan. Berdasarkan grafik tersebut didapatkan persamaan polinomial orde ke-3 dan orde ke-4. Berikut adalah persamaan polinomial orde ke-3 dan ke-4. 𝑦 = 504.41𝑥 3 − 821.86𝑥 2 + 711𝑥 + 22.652



(4.2)



𝑦 = 913.98𝑥 4 − 2556.2𝑥 3 + 2437𝑥 2 − 416.27𝑥 + 69.331



(4.3)



Variabel x merupakan besaran tegangan yang dihasilkan oleh analog TDS sensor nantinya akan dibaca oleh ESP32. Persamaan yang didapatkan tersebut akan diimplementasikan ke dalam program yang dibuat. Berikut adalah hasil dari pengukuran TDS dengan menggunakan rumus polinomial orde ke-3 dan orde ke-4.



76



Tabel 4. 2 Hasil pengukuran dengan persamaan polinomial orde 3.



No.



Larutan (ppm)



polinomial orde 3 hasil (ppm)



Error (%)



1



57



52



8.771



2



198



231



16.666



3



401



348



13.216



4



496



494



0.403



5



618



654



5.825



6



844



832



1.421



7



1100



1052



4.363



Error rata-rata



7.237



Tabel 4. 3 Hasil pengukuran dengan persamaan polinomial orde 4.



No.



Larutan (ppm)



polinomial orde 4



Error (%)



hasil (ppm)



1



57



57



0



2



198



197



0.505



3



401



393



1.995



4



496



508



2.419



5



618



635



2.750



6



844



816



3.317



7



1100



1097



0.272



Error rata-rata



1.608



77



Gambar 4. 7 Grafik perbandingan hasil kalibrasi pada analog TDS sensor.



Dari hasil yang didapat terlihat bahwa dengan mengimplementasikan persamaan polinomial orde ke-4 pembacaan yang dihasilkan sangat baik dengan error rata-rata adalah 1,608 % sedangkan pembacaan TDS dengan mengimplementasikan persamaan polinomial orde ke-3 mempunyai error rata-rata sebesar 7,237 %.



b) Kalibrasi sensor pH Pada kalibrasi sensor pH media yang digunakan adalah pH buffer 4,01 dan pH buffer 6,86, pengujian hanya dilakukan dengan dua titik pengukuran dikarenakan sensor pH merupakan sensor linear. Kalibrasi dilakukan dengan membandingkan ADC yang dihasilkan dengan pH media yang digunakan, pada pengukuran pH buffer 4,01 nilai ADC yang dihasilkan adalah 7 dan pengukuran pH buffer 6,86 nilai ADC yang dihasilkan pada serial monitor adalah 1152. Dengan menggunakan persamaan linear maka persamaan pengukuran yang didapat adalah sebagai berikut. 𝑦 = 0,0025𝑥 + 3,9926



78



(4.4)



Dimana “y” merupakan pH yang terbaca dan “x” merupakan nilai ADC yang terbaca. Dengan menggunakan persamaan 4.4 hasil perbandingan pembacaan analog pH sensor setelah kalibrasi dan sebelum dikalibrasi dengan menggunakan persamaan bawaan dapat dilihat pada Tabel 4.3.



Tabel 4. 4 Hasil pengukuran analog pH sensor setelah kalibrasi.



Media



pH meter



Sebelum Kalibrasi Analog pH sensor



pH buffer 4,01 pH buffer 6,86 Air



Error (%)



Setelah Kalibrasi Analog pH sensor



Error (%)



4,04



3,83



5.198%



4,05



0,247%



6,78



6,45



4.867%



6,81



0,442%



7,10



6,77



4.647%



7,12



0,281%



Error ratarata



4,904%



Error rata– rata



0,323%



Dari hasil yang didapat dengan menggunakan persamaan 4.4 hasil pengukuran pH tidak berbeda jauh dengan nilai referensi dengan rata-rata error 0,323% sedangkan pembacaan pH sebelum dilakukan kalibrasi memiliki rata-rata error 4,904%.



4.2.2. Pengujian kendali close loop dan fuzzy logic Pengujian kendali close loop dan fuzzy logic dilakukan sebagai perbandingan respon transien yang dihasilkan antara kendali dengan menggunakan metode close loop dengan menggunakan fuzzy logic. a) Kendali TDS Pada pengujian kendali close loop TDS timer aktuator yang diatur adalah konstan 2 detik dan nilai PWM yang diatur adalah konstan 255. Berikut adalah hasil respon transien yang dihasilkan pada pengujian kendali close loop.



79



1200 1000



ppm



800 600 400 200



0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580



0



Time (s) TDS actual



Set Point



Gambar 4. 8 Respon transien kendali TDS close loop dengan set point 700.



Tabel 4. 5 Performasi kendali TDS close loop dengan set point 700. Kendali TDS close loop set point 700 Time Delay



77,5 s



Rise Time



126,08 s



Peak Time



140 s



Settling Time



-



Maximum Overshoot



28,70%



80



1600 1400 1200



ppm



1000 800 600 400



200 0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580



0



Time (s) TDS actual



Set Point



Gambar 4. 9 Respon transien kendali TDS close loop dengan set point 1000.



Tabel 4. 6 Performasi kendali TDS close loop dengan set point 1000. Kendali TDS close loop set point 1000 Time Delay



64,04 s



Rise Time



85,29 s



Peak Time



120 s



Settling Time



-



Maximum Overshoot



44,78%



81



1600 1400 1200



800 600 400



200 0



0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580



ppm



1000



Time (s) TDS actual



Set Point



Gambar 4. 10 Respon transien kendali close loop dengan set point 1300.



Tabel 4. 7 Performasi kendali TDS close loop dengan set point 1300. Kendali TDS close loop set point 1300 Time Delay



98.12 s



Rise Time



120.73 s



Peak Time



170 s



Settling Time



-



Maximum Overshoot



23,49%



82



Berikut adalah hasil respon transien dari kendali fuzzy logic untuk mengatur nilai TDS. 1200 1000



ppm



800 600 400 200



0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580



0



Time (s) TDS actual



Set Point



Gambar 4. 11 Respon transien kendali TDS menggunakan fuzzy logic dengan set point 700 ppm.



Tabel 4. 8 Performasi kendali TDS fuzzy logic dengan set point 700. Kendali TDS fuzzy logic set point 700 Time Delay



60,33 s



Rise Time



101,5 s



Peak Time



-



Settling Time



170 s



Maximum Overshoot



-



83



1200 1000



ppm



800 600 400 200



0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580



0



Time (s) TDS actual



Set Point



Gambar 4. 12 Respon transien kendali TDS menggunakan fuzzy logic dengan set point 1000 ppm.



Tabel 4. 9 Performasi kendali TDS fuzzy logic dengan set point 1000. Kendali TDS fuzzy logic set point 1000 Time Delay



72,48 s



Rise Time



87,05 s



Peak Time



-



Settling Time



190 s



Maximum Overshoot



-



84



1600 1400 1200 1000 800 600 400



200 0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580



0



Series1



Series2



Gambar 4. 13 Respon transien kendali TDS menggunakan fuzzy logic dengan set point 1300 ppm.



Tabel 4. 10 Performasi kendali TDS fuzzy logic dengan set point 1300. Kendali TDS fuzzy logic set point 1300 Time Delay



120 s



Rise Time



128,26 s



Peak Time



-



Settling Time



200 s



Maximum Overshoot



-



Pada pengendalian TDS menggunakan metode close loop tanpa implementasi fuzzy logic, hasil respon transien sistem menunjukan nilai yang sangat fluktuatif dikarenakan ketika nilai pembacaan TDS di bawah set point sinyal PWM yang diberikan ke diaphragm pump konstan 255 dan timer yang diatur konstan 2 detik hal ini menyebabkan volume larutan nutrisi yang diberikan ke tandon nutrisi cukup banyak sehingga nilai TDS akan naik secara signifikan. Penyebab lainnya adalah perbandingan larutan nutrisi dengan air, dimana dengan menambahkan sedikit larutan nutrisi ke dalam air akan menaikan nilai TDS cukup tinggi, 85



sebaliknya untuk menurunkan nilai TDS pada tandon nutrisi diperlukan volume air yang cukup banyak. Seperti yang ditunjukan pada Gambar 4.7 penurunan nilai TDS relatif lebih lambat sedangkan untuk menaikan nilai TDS relatif lebih cepat.



Pada pengendalian TDS dengan mengimplementasikan fuzzy logic hasil respon transien sistem cukup baik, dimana nilai TDS dapat dipertahankan berada didekat set point hal ini dikarenakan sinyal PWM dan timer yang diberikan ke diaphragm pump adaptif tergantung sinyal error, delta error, membership function input, konstanta output, dan rules base yang dibuat, sehingga volume larutan nutrisi yang dialirkan akan semakin sedikit jika mendekati nilai set point.



Jika dibandingkan antara pengendalian nilai TDS menggunakan close loop dengan fuzzy logic performa yang dihasilkan lebih baik menggunakan kendali fuzzy logic dapat dilihat pada Gambar 4.12 dengan set point 700 ppm kendali fuzzy logic sangat baik dalam mempertahankan nilai TDS dengan error steady state sekitar 7%, kemudian delay time dan rise time yang didapat lebih cepat dibandingkan kendali close loop. Begitu pun pada percobaan dengan set point 1000 ppm hasil respon transien sistem dengan menggunakan fuzzy logic pada Gambar 4.13 memperlihatkan pengendalian fuzzy logic dapat mempertahankan nilai TDS dengan error steady state sekitar 8%. Akan tetapi delay time dan rise time yang dihasilkan sedikit lebih lambat jika dibandingan dengan kendali close loop, dimana delay time pada kendali fuzzy logic 72.48 detik sedangkan kendali close loop 64.04 detik, kemudian untuk rise time pada kendali fuzzy logic 87.05 detik sedangkan pada kendali close loop 85.29 detik. Pada percobaan dengan set point 1300 ppm kendali close loop menunjukan delay time dan rise time yang lebih cepat dibandingkan menggunakan kendali fuzzy logic. Pada kendali fuzzy logic delay time yang dihasilkan 120 detik sedangkan kendali close loop lebih cepat dengan waktu 98.12 detik. Kemudian rise time yang dihasilkan kendali fuzzy logic adalah 128.26 detik sedangkan kendali close loop 120.73 detik. Akan tetapi pada pengendalian close loop terdapat overshoot sebesar 23.49%.



86



Dengan demikian pada percobaan pengendalian nilai TDS dengan set point 700 ppm kendali fuzzy logic lebih unggul jika dilihat delay time, rise time, dan stabilitas dalam mempertahankan nilai TDS mendekati set point. Pada percobaan pengendalian nilai TDS dengan set point 1000 ppm dan 1300 ppm kendali close loop lebih unggul dalam jika dilihat dari delay time dan rise time, akan tetapi nilai TDS yang dihasilkan cenderung sangat fluktuatif sehingga larutan nutrisi menjadi lebih boros.



b) Kendali pH Pada pengujian kendali close loop pH, timer aktuator yang diatur adalah konstan 5 detik dengan nilai PWM konstan 255. Pengujian kendali close loop pH dilakukan dengan menaikan dan menurunkan nilai pH. Berikut adalah hasil respon transien kendali close loop pH. 6 5,8



pH



5,6 5,4 5,2 5 4,8 0



60 120 180 240 300 360 420 480 540 600 660 720 780 840 900 960 1020



Time (s) pH actual



Set Point



Gambar 4. 14 Respon transien kendali pH naik metode close loop dengan set point 5,5.



87



Tabel 4. 11 Performasi kendali pH naik close loop dengan set point 5,5. Kendali pH naik close loop set point 5,5 Time Delay



240 s



Rise Time



260 s



Peak Time



360



Settling Time



-



Maximum Overshoot



30.6 %



6 5,8 5,6 5,4 5,2 5 4,8 0



60 120 180 240 300 360 420 480 540 600 660 720 780 840 900 960 1020 pH actual



Set Point



Gambar 4. 15 Respon transien kendali pH turun metode close loop dengan set point 5,0.



Tabel 4. 12 Performasi kendali pH turun close loop dengan set point 5,0. Kendali pH turun close loop set point 5,0 Time Delay



240 s



Rise Time



390 s



Peak Time



570 s



Settling Time



-



Maximum Overshoot



6%



88



Berikut adalah hasil respon transien dari kendali fuzzy logic untuk mengatur nilai



1020



960



900



840



780



720



660



600



540



480



420



360



300



240



180



120



60



6 5,9 5,8 5,7 5,6 5,5 5,4 5,3 5,2 5,1 5 4,9 4,8



0



pH



pH naik dapat dilihat pada Gambar 4.15, Gambar 4.16, dan Gambar 4.17.



Time (s) pH actual



Set Point



Gambar 4. 16 Respon transien kendali pH naik menggunakan fuzzy logic dengan set point 5,5.



Tabel 4. 13 Performasi kendali pH naik fuzzy logic dengan set point 5,5. Kendali pH naik fuzzy logic set point 5,5 Time Delay



180 s



Rise Time



510 s



Peak Time



-



Settling Time



660 s



Maximum Overshoot



-



89



6,4 6,2 6



pH



5,8



5,6 5,4 5,2 5



1020



960



900



840



780



720



660



600



540



480



420



360



300



240



180



120



60



0



4,8



Time (s) pH actual



Set Point



Gambar 4. 17 Respon transien kendali pH naik menggunakan fuzzy logic dengan set point 6,0.



Tabel 4. 14 Performasi kendali pH naik fuzzy logic dengan set point 6,0. Kendali pH naik fuzzy logic set point 6,0 Time Delay



315 s



Rise Time



540 s



Peak Time



-



Settling Time



690 s



Maximum Overshoot



-



90



pH



6,8 6,6 6,4 6,2 6 5,8 5,6 5,4 5,2 5 4,8 0



60 120 180 240 300 360 420 480 540 600 660 720 780 840 900 960 1020



Time (s) pH actual



Set Point



Gambar 4. 18 Respon transien kendali pH naik menggunakan fuzzy logic dengan set point 6,5.



Tabel 4. 15 Performasi kendali pH naik fuzzy logic dengan set point 6,5. Kendali pH naik fuzzy logic set point 6,5 Time Delay



440 s



Rise Time



652.6 s



Peak Time



-



Settling Time



840 s



Maximum Overshoot



-



91



5,6



5,5 5,4 5,3 5,2 5,1 5 4,9 4,8



pH actual



1020



960



900



840



780



720



660



600



540



480



420



360



300



240



180



120



60



0



4,7



Set Point



Gambar 4. 19 Respon transien kendali pH turun menggunakan fuzzy logic dengan nilai awal 5,5 dan set point 5,0.



Tabel 4. 16 Performasi kendali pH turun fuzzy logic dengan nilai awal 5,5 dan set point 5,0.. Kendali pH turun fuzzy logic set point 5,0 Time Delay



440 s



Rise Time



-



Peak Time



-



Settling Time



-



Maximum Overshoot



-



92



6,4 6,2 6 5,8 5,6 5,4 5,2 5



pH actual



1020



960



900



840



780



720



660



600



540



480



420



360



300



240



180



120



60



0



4,8



Set Point



Gambar 4. 20 Respon transien kendali pH turun menggunakan fuzzy logic dengan nilai awal 6,0 dan set point 5,0.



Tabel 4. 17 Performasi kendali pH turun fuzzy logic dengan nilai awal 6,0 dan set point 5,0. Kendali pH turun fuzzy logic set point 5,0 Time Delay



570 s



Rise Time



-



Peak Time



-



Settling Time



-



Maximum Overshoot



-



Pada pengendalian nilai pH naik menggunakan kendali close loop, respon transien sistem yang dihasilkan menunjukan nilai yang berosilasi terus menerus seperti pada Gambar 4.10, hal ini disebabkan karena sinyal kendali PWM dan timer yang diatur adalah konstan dengan nilai PWM 255 dan timer 5 detik. Jika dibandingkan dengan kendali fuzzy logic hasil respon transien sistem seperti pada Gambar 4.15 menunjukan respon yang sangat baik dimana nilai pH dapat mendekati set point tanpa adanya overshoot, dikarenakan volume larutan pH naik yang dialirkan ke dalam tandon nutrisi tergantung dari sinyal error dan



93



delta error sehingga volume larutan pH naik yang dialirkan akan semakin sedikit jika nilai aktual mendekati nilai set point. Jika dilihat dari performasi antara kendali close loop dan fuzzy logic pada percobaan pH naik dengan nilai pH awal 5,0 dan set point 5,5. Delay time pada kendali fuzzy logic lebih cepat dengan waktu 180 detik sedangkan pada kendali close loop delay time yang dihasilkan adalah 240 detik. Akan tetapi pada kendali close loop rise time yang dihasilkan lebih cepat dibandingkan kendali fuzzy logic, dimana pada kendali close loop rise time yang dihasilkan adalah 260.2 detik sedangkan pada kendali fuzzy logic adalah 510 detik.



Pada pecobaan kendali pH naik dengan menggunakan fuzzy logic pada set point 6,0 dan 6,5 seperti pada Gambar 4.16 dan 4.17. Berdasarkan hasil respon transien dengan mengimplementasikan kendali fuzzy logic nilai pH dapat mendekati set point tanpa adanya overshoot dengan error steady state dibawah 5%, akan tetapi respon yang dihasilkan cukup lambat dikarenakan sampling time yang dilakukan adalah 30 detik agar larutan pH dapat terlebih dahulu terlarut merata pada tandon nutrisi.



Kemudian pada percobaan pH turun dengan menggunakan fuzzy logic hasil respon transien menunjukan nilai pH yang dikendalikan tidak dapat mendekati set point sedangkan pada kendali close loop nilai pH dapat mencapai set point. Adapun hal yang menyebabkan nilai pH tidak dapat mendekati set point pada kendali fuzzy logic adalah aturan yang dibuat masih belum tepat dan waktu pengendalian yang dibutuhkan harus lebih lama. Pada percobaan pengendalian pH turun kendali close loop lebih unggul jika dibandingkan fuzzy logic.



4.3.



Pengujian Software



Hasil pengujian software mencakup pengujian proses koneksi WiFi dan MQTT, Pengujian akses dashboard yang telah dibuat menggunakan desktop atau smartphone, dan pengujian pengiriman data yang telah dirancang.



94



4.3.1. Pengujian Proses Koneksi WiFi dan MQTT Pada pengujian WiFi dan MQTT, SSID dan password sudah diatur di dalam program yang dibuat, proses koneksi WiFi akan ditampilkan pada LCD. Berikut adalah proses koneksi perangkat dengan WiFi.



Gambar 4. 21 Proses koneksi perangkat dengan WiFi. Perangkat akan mencoba menghubungkan dengan WiFi yang sudah tersedia sebanyak 40 kali, ketika proses koneksi gagal dan perangkat sudah mencoba menghubungkan sebanyak 40 kali maka perangkat akan menampilkan “connecting fail” dan melakukan restart, kemudian masuk kembali ke proses koneksi. Berikut adalah tampilan perangkat jika proses koneksi gagal dapat dilihat pada Gambar 4.21.



Gambar 4. 22 Tampilan LCD jika proses koneksi gagal. 95



Jika proses koneksi WiFi dan MQTT berhasil maka perangkat akan menampilkan waktu saat ini dan nilai timer 1 yang diatur. Pada proses koneksi MQTT tidak ditampilkan pada LCD, jika proses koneksi WiFi berhasil tetapi proses koneksi MQTT gagal, maka tampilan akan tetap “connecting” hingga perangkat berhasil terhubung dengan MQTT broker. Berikut adalah tampilan ketika perangkat sudah terhubung dengan WiFi dan MQTT broker.



Gambar 4. 23 Tampilan jika proses koneksi berhasil.



4.3.2. Pengujian Akses Dashboard Untuk membuka dashboard yang sudah dibuat dilakukan dengan mengakses melalui IP Public dari server. Pada pengujian kali ini IP Puclic yang digunakan adalah 68.183.184.227 dengan port 1880 untuk mengakses Node-Red. Kemudian untuk



mengakses



dashboard



Node-Red



hanya



tinggal



membuka



http://68.183.184.227:1880/ui/. Berdasarkan hasil pengujian dashboard sudah dapat diakses melalui desktop maupun smartphone secara remote. Berikut adalah hasil tampilan dashboard jika diakses melalui desktop dan smartphone.



96



Gambar 4. 24 Tampilan dashboard jika diakses melalui dekstop.



Gambar 4. 25 Tampilan dashboard jika diakses melalui smartphone.



97



4.3.3. Pengujian Waktu Pada pengujian waktu, waktu yang ada perangkat akan dibandingkan dengan waktu yang sebenarnya untuk menguji keakuratan waktu yang tampilkan pada perangkat menggunakan NTP server pengujian dilakukan dengan membandingkan waktu yang ditampilkan pada perangkat dengan waktu yang ditampilkan pada smartphone berdasarkan hasil pengamatan dengan menggunakan NTP server, waktu yang ditampilkan pada perangkat sama dengan waktu yang ditampilkan pada smartphone berikut adalah hasil pengujian waktu.



Gambar 4. 26 Hasil pengujian waktu perangkat dengan waktu pada smartphone.



4.3.4. Pengujian Pengiriman Data Pengujian pengiriman data dilakukan melalui smartphone dengan mengakses dashboard Node-Red kemudian data timer 1, data timer 2, data timer 3, dan data set point dikirimkan ke perangkat melalui MQTT Broker. Berdasarkan hasil pengujian data-data yang dikirimkan dapat diterima perangkat dan ditampilkan pada LCD. Berikut adalah hasil dari pengujian pengiriman data.



98



Gambar 4. 27 Pengiriman data timer 1 melalui dashboard.



Gambar 4. 28 Data timer 1 ditampilkan pada LCD.



Gambar 4. 29 Tampilan serial monitor ketika data timer 1 diterima.



99



Gambar 4. 30 Pengiriman data timer 2 melalui dashboard.



Gambar 4. 31 Data timer 2 ditampilkan pada LCD.



Gambar 4. 32 Tampilan serial monitor ketika data timer 2 diterima.



100



Gambar 4. 33 Pengiriman data timer 3 melalui dashboard.



Gambar 4. 34 Data timer 3 ditampilkan pada LCD.



Gambar 4. 35 Tampilan serial monitor ketika data timer 3 diterima.



101



Gambar 4. 36 Pengiriman data set point melalui dashboard.



Gambar 4. 37 Data set point ditampilkan pada LCD.



Gambar 4. 38 Tampilan serial monitor ketika data set point diterima.



102



4.3.5. Pengujian Penyimpanan Database Pada pengujian database hasil pengukuran TDS dan pH disimpan pada database yang sudah dibuat. Untuk pengukuran TDS nilai disimpan pada tabel pengukuran TDS dan untuk pengukuran pH nilai disimpan pada tabel pengukuran pH. Kemudian data yang berada pada database diambil kembali untuk dimunculkan pada dashboard Node-Red. Berdasarkan hasil pengujian data hasil pengukuran dapat disimpan dengan baik dan dimunculkan pada dashboard Node-Red. Berikut adalah hasil penyimpanan pada database.



Gambar 4. 39 Isi tabel pengukuran TDS pada database.



103



Gambar 4. 40 Isi tabel pengukuran pH pada database.



Gambar 4. 41 Tampilan tabel pengukuran pada dashboard Node-Red.



104



4.4. Pengujian Sistem Selama 4 Hari Pengujian ini dilakukan untuk melihat nilai TDS dan pH selama 4 hari pengimplementasian perangkat. Untuk penjadwalan pemberian nilai TDS dan pH dilakukan pada jam 9 pagi dengan mengatur jadwal pada Node-Red. Berikut adalah hasil nilai TDS dan pH selama 4 hari pengimplementasian perangkat. Tabel 4. 18 Pengendalian nilai TDS selama 4 hari. Hari



Set



Tanggal



Jam



Nilai TDS



Jam



Nilai Tds



Point



pada awal



setelah



(ppm)



pengendalian



pengendalian



1



700



19/7/2022



10:28



254



10:43



701



2



800



20/7/2022



09:00



945



09:11



767



3



800



21/7/2022



09:00



480



09:10



773



4



800



22/7/2022



09:00



852



09:04



804



Tabel 4. 19 Pengendalian nilai pH selama 4 hari. Hari



Set



Tanggal



Jam



Nilai pH



Point



Jam



Nilai pH



pada awal



setelah



pengendalian



pengendalian



1



6,5



19/7/2022



10:43



5,63



10:51



6,59



2



6,5



20/7/2022



09:11



7,15



09:21



6,51



3



6,5



21/7/2022



09:10



6,73



09:14



6,47



4



6,5



22/7/2022



09:04



7,1



09:11



6,43



Hasil pengujian pengedalian dapat berjalan sesuai dengan jadwal yang telah diatur, pada hari pertama sistem dijalankan tanpa penjadwalan untuk mengendalikan larutan nutrisi pada tandon yang masih berisi air baku, sehingga pengendalian dilakukan tanpa penjadwalan pada hari berikutnya pengendalian dijadwalkan pada jam 9 pagi, nilai TDS pada awal pengukuran menunjukan peningkatan yaitu 945 ppm kemudian setelah selesai pengendalian nilai TDS turun menjadi 767 ppm, pada kendali pH nilai awal menunjukan 7,15 dimana nilai ini cukup jauh dari set point



105



yang telah ditentukan, setelah pengendalian pH selesai nilai pH yang didapat adalah 6,51. Pada hari ke 3 nilai TDS pada awal pengendalian turun menjadi 480 ppm setelah selesai pengendalian nilai TDS menunjukan 773 ppm, kemudian pada pengendalian pH nilai awal menunjukan 6,73 setelah selesai pengendalian nilai pH turun menjadi 6,47. Pada hari ke 4 nilai TDS pada awal pengendalian menunjukan 854 ppm dimana selisihnya tidak terlalu jauh dengan set point sehingga waktu pengendalian cenderung lebih cepat. Nilai akhir TDS yang didapatkan adalah 804. Kemudian pada pengendalian pH nilai awal menunjukan kenaikan yaitu 7,1 setelah selesai pengendalian nilai pH yang didapat adalah 6,43. Setelah dilakukannya pengujian selama 4 hari, sistem pengendalian yang telah dirancang menunjukan hasil yang baik dan dapat bekerja sesuai dengan jadwal yang telah diatur, hasil pengendalian dapat mendekati nilai set point yang diatur.



106



BAB V KESIMPULAN DAN SARAN 5.1. Kesimpulan Berdasarkan hasil pengujian yang telah dilakukan dapat diambil kesimpulan sebagai berikut : 1.



Perancangan pada sistem ini menggunakan dua sensor yaitu sensor analog TDS sensor SEN0224 dan analog pH sensor SEN0161. Berdasarkan hasil pengujian sensor TDS penggunaan persamaan polinomial orde-4 pada kalibrasi analog TDS sensor SEN0244 dapat memberikan pembacaan yang lebih baik dibandingkan menggunakan persamaan polinomial orde-3 dan persamaan bawaan dari sensor dengan rata-rata error 1,608%. Pada pengujian analog pH sensor SEN0161 setelah dilakukan kalibrasi memiliki rata-rata error sebesar 0,323%.



2.



Proses penjadwalan dalam mengendalikan nilai TDS dan pH dapat bekerja sesuai dengan waktu yang ditentukan, serta dengan pengimplementasian IoT memudahkan pemantauan nilai TDS dan pH ketika proses pengendalian berlangsung.



3.



Sistem kendali fuzzy logic yang telah dirancang dengan menggunakan 25 aturan dapat mengendalikan nilai TDS dan pH larutan nutrisi untuk mencapai set point. Hasil respon transien pada pengendalian nilai TDS larutan nutrisi memiliki delay time dan rise time sedikit lebih lambat jika dibandingkan kendali close loop dengan error steady state dibawah 8%. Sedangkan hasil respon transien pada pengendalian nilai pH naik larutan nutrisi menghasilkan respon transien tanpa adanya overshoot, dan delay time yang dihasilkan lebih cepat dibandingkan dengan menggunakan kendali close loop. Akan tetapi rise time pada kendali fuzzy logic lebih lambat jika dibandingkan dengan menggunakan kendali close loop dengan error steady state dibawah 5%.



4.



Penggunaan protokol MQTT sebagai komunikasi antara ESP32 dengan Node-Red telah diuji dan telah bekerja dengan baik. Pengiriman data timer, data force on, data set point dari Node-Red dapat diterima oleh ESP32, begitu pula sebaliknya pengiriman data pembacaan nilai TDS dan pH dari ESP32 107



dapat diterima oleh Node-Red dan berhasil ditampilkan pada dashboard kemudian disimpan pada database SQLite.



5.2. Saran Dalam perancangan sistem akuisisi data untuk nutrient analyst hidroponik berbasis fuzzy logic dan Node-Red, terdapat beberapa saran untuk pengembangan dari peneliatian ini, diantaranya : 1.



Perancangan fuzzy logic diubah menggunakan tipe fuzzy logic yang lain seperti tipe mamdani.



2.



Penambahan parameter suhu air pada larutan nutrisi, agar dapat menghitung temperature compensation guna mendapatkan pembacaan nilai TDS dan pH yang akurat.



3.



Penambahan mekanisme gateway dalam menghimpun data sebelum dikirimkan ke database pada server.



108



DAFTAR PUSTAKA [1]



S. T. Cortes et al., “Assesing Problem And Prospects Of Urban Agriculture In Cebu City , Philippines : Towards Developing Action Plans Corresponding author : [email protected] More than half of the global population is now residing in urban areas because their huma,” vol. 7, no. 1, pp. 264–291, 2022.



[2]



U. Kelompok, T. Di, and J. Dan, “Pelatihan Sistem Otomasi Pertanian Hidroponik Untuk Kelompok Tani di Jatinangor dan Cimahi Dalam Rangka Pemulihan Ekonomi,” vol. 5, pp. 507–514, 2022.



[3]



P. B. Menjadi et al., “Pelatihan Bangga Menjadi Petani Hidroponik Pada Komunitas Pemuda Di Desa Cigugur Girang Kabupaten Bandung Barat.”



[4]



Herman and N. Surantha, “Intelligent Monitoring And Controlling System For Hydroponics Precision Agriculture,” 2019 7th Int. Conf. Inf. Commun. Technol.



ICoICT



2019,



no.



July



2019,



2019,



doi:



10.1109/ICoICT.2019.8835377. [5]



F. Suryatini, S. Pancono, S. B. Bhaskoro, and P. M. S. Muljono, “Sistem Kendali Nutrisi Hidroponik berbasis Fuzzy Logic berdasarkan Objek Tanam,” ELKOMIKA J. Tek. Energi Elektr. Tek. Telekomun. Tek. Elektron., vol. 9, no. 2, p. 263, 2021, doi: 10.26760/elkomika.v9i2.263.



[6]



E. K. Tan, Y. W. Chong, M. Niswar, B. Y. Ooi, and A. Basuki, “An IoT Platform for Urban Farming,” Proc. - 2020 Int. Semin. Intell. Technol. Its Appl. Humanification Reliab. Intell. Syst. ISITIA 2020, pp. 51–55, 2020, doi: 10.1109/ISITIA49792.2020.9163781.



[7]



K. Kularbphettong, U. Ampant, and N. Kongrodj, “An Automated Hydroponics System Based on Mobile Application,” Int. J. Inf. Educ. Technol., vol. 9, no. 8, pp. 548–552, 2019, doi: 10.18178/ijiet.2019.9.8.1264.



[8]



F. F. Dzikriansyah, R. Hudaya, and C. W. Nurhaeti, “Sistem Kendali Berbasis PID untuk Nutrisi Tanaman Hidroponik,” Ind. Res. Work. Natl. Semin., pp. 621–626, 2017, [Online]. Available: http://irwns.polban.ac.id/.



[9]



R. Novianto Prabowo and A. Qurthobi, “Perancangan Kontrol Kadar 109



Keasaman Menggunakan Hybrid Fuzzy PID Pada Sistem Hidroponik Untuk Pertumbuhan Tomat” [10]



A. N. Sholihah, A. R. Al Tahtawi, and S. W. Jadmiko, “Sistem Kendali TDS untuk Nutrisi Hidroponik Deep Flow Technique (Annisa Nurul Sholihah, Adnan Rafi Al Tahtawi, Sarjono Wahyu Jadmiko : 1-5) Sistem Kendali TDS untuk Nutrisi Hidroponik Deep Flow Technique Menggunakan Fuzzy Logic (TDS Control System for Hyd,” J. Electr. Eng. Inf. Technol., vol. 19, pp. 1– 5, 2021.



[11]



D. Pancawati and A. Yulianto, “Implementasi Fuzzy Logic Controller untuk Mengatur Ph Nutrisi pada Sistem Hidroponik Nutrient Film Technique (NFT),” J. Nas. Tek. ELEKTRO, vol. 5, no. 2, Jul. 2016, doi: 10.20449/jnte.v5i2.284.



[12]



D. R. Susilawati and M. Si, Dasar-Dasar Bertatanam Secara Hidroponik.



[13]



R. Zamora, H. Harmadi, and W. Wildian, “Perancangan Alat Ukur Tds (Total Dissolved Solid) Air Dengan Sensor Konduktivitas Secara Real Time,” Sainstek J. Sains dan Teknol., vol. 7, no. 1, p. 11, 2016, doi: 10.31958/js.v7i1.120.



[14]



A. Harvyandha et al., “Telemetri Pengukuran Derajat Keasaman Secara Realtime Menggunakan Raspberry pi 1 ,2,3,” J. Jartel, vol. 9, no. 4, pp. 519– 524, 2019.



[15]



B.



WN,



“Tabel



PPM



dan



pH



Nutrisi



Hidroponik,”



2016.



http://hidroponikpedia.com/tabel-ppm-dan-ph-nutrisi-hidroponik/ (accessed Jun. 29, 2022). [16]



V. Ayudyana and Asrizal, “Rancang Bangun Sistem Pengontrolan pH Larutan Untuk Mahasiswa Fisika , FMIPA Universitas Negeri Padang Staf Pengajar Jurusan Fisika , FMIPA Universitas Negeri Padang,” Pillar of PhysicsPhysics, vol. 12, pp. 53–60, 2019.



[17]



S. A. Pohan and O. Oktoyournal, “Pengaruh Konsentrasi Nutrisi A-B Mix Terhadap Pertumbuhan Caisim Secara Hidroponik (Drip system),” Lumbung,



vol.



18,



no.



10.32530/lumbung.v18i1.179.



110



1,



pp.



20–32,



2019,



doi:



[18]



A. Munandar, “Sistem Pengereman Otomatis Menggunakan Logika Fuzzy Berbasis Mikrokontroler,” Univ. Komput. Indones., vol. 4, no. 1, p. 17, 2016.



[19]



D. L. Rahakbauw, “Penerapan Logika Fuzzy Metode Sugeno Untuk Menentukan Jumlah Produksi Roti Berdasarkan Data Persediaan Dan Jumlah Permintaan,” BAREKENG J. Ilmu Mat. dan Terap., vol. 9, no. 2, pp. 121–134, 2015, doi: 10.30598/barekengvol9iss2pp121-134.



[20]



Achmad Fiqhi Ibadillah and R. Alfita, Mikrokontroler dan Aplikasinya, Cetakan 1. Malang: Media Nusa Creative, 2017.



[21]



E.



A.



Prastyo,



“Arsitektur



dan



Fitur



ESP32,”



2019.



https://www.edukasielektronika.com/2019/07/arsitektur-dan-fitur-esp32module-esp32.html (accessed Jun. 28, 2022). [22]



Last



Minute



Engineers,



“ESP32



Pinout



Reference,”



Https://Lastminuteengineers.Com/Esp32-Pinout-Reference/, 2022. ESP32 Pinout Reference (accessed Jun. 30, 2022). [23]



Anonim,



“SEN0161



PH



meter.”



https://wiki.dfrobot.com/PH_meter_SKU__SEN0161_]. (accessed Jun. 30, 2022). [24]



Anonim, “SEN0244 Gravity Analog TDS Sensor Meter For Arduino.” https://wiki.dfrobot.com/Gravity__Analog_TDS_Sensor___Meter_For_Ar duino_SKU__SEN0244 (accessed Jun. 30, 2022).



[25]



I. R. Muttaqin and D. B. Santoso, “Prototype Pagar Otomatis Berbasis Arduino Uno Dengan Sensor Ultrasonic Hc-SR04,” JE-Unisla, vol. 6, no. 2, p. 41, 2021, doi: 10.30736/je-unisla.v6i2.695.



[26]



D.



Kho,



“Pengertian



dan



Fungsi



Relay.”



https://teknikelektronika.com/pengertian-relay-fungsi-relay/ (accessed Jun. 30, 2022). [27]



A. I. Salim, Y. Saragih, and R. Hidayat, “Implementasi Motor Servo SG 90 Sebagai Penggerak Mekanik Pada E. I. Helper (ELECTRONICS INTEGRATION HELMET WIPER),” Electro Luceat, vol. 6, no. 2, pp. 236– 244, 2020, doi: 10.32531/jelekn.v6i2.256.



[28]



A.



Daniarsyah,



“Mengenal



111



Diaphragm



Pump,”



2021.



https://wira.co.id/diaphragm-pump-adalah/ (accessed Jun. 30, 2022). [29]



M. Riza, Rancang Bangun Pompa Peristaltik Dengan Mekanisme Penggerak Manual. 2017.



[30]



Y. Efendi, “Internet Of Things (Iot) Sistem Pengendalian Lampu Menggunakan Raspberry Pi Berbasis Mobile,” J. Ilm. Ilmu Komput., vol. 4, no. 2, pp. 21–27, 2018, doi: 10.35329/jiik.v4i2.41.



[31]



D. I. Saputra, G. M. Karmel, and Y. B. Zainal, “Perancangan Dan Implementasi Rapid Temperature Screening Contactless Dan Jumlah Orang Berbasis Iot Dengan Protokol Mqtt,” J. Energy Electr. Eng., vol. 2, no. 1, pp. 20–30, 2020, doi: 10.37058/jeee.v2i1.2147.



[32]



S. Mulyono, M. Qomaruddin, and M. Anwar, “Penggunaan Node-RED pada Sistem Monitoring dan Kontrol Green House berbasis Protokol MQTT,” J. Transistor Elektro dan Inform. (TRANSISTOR EI, vol. 3, no. 1, pp. 31–44, 2018.



[33]



Y. Herdiana, “Aplikasi Rumus Matematika Sma Berbasis Mobile,” J. Ilm. Komput. dan Inform. ( KOMPUTA ), p. 8, 2014.



[34]



S. T. Bhosale, T. Patil, and P. Patil, “SQLite: Light Database System,” Int. J. Comput. Sci. Mob. Comput., vol. 44, no. 4, pp. 882–885, 2015.



112



LAMPIRAN A PERTUMBUHAN TANAMAN



Gambar A. 1 Pertumbuhan tanaman hari ke-1.



Gambar A. 2 Pertumbuhan tanaman hari ke-20.



A-1



LAMPIRAN B KALIBRASI SENSOR



Gambar B. 1 Kalibrasi sensor TDS.



Gambar B. 2 Hasil pengukuran TDS meter.



Gambar B. 3 Hasil pengukuran pH meter.



B-1



LAMPIRAN C CODING ESP32



#include #include #include



#include #include #include #include



#include #include #include



#include



#include #include #include



#include "MegunoLink.h" #include "Filter.h"



#define PROG_NAME "OTA Test" #define PROG_VERSION "1.0" #define BAUD 115200



void serial_setup() { Serial.begin(BAUD); C-1



Serial.print("Prog Name :"); Serial.print(PROG_NAME); Serial.println(); Serial.print("Prog Ver :"); Serial.print(PROG_VERSION); Serial.println(); }



void eeprom_setup() { EEPROM.begin(512); }



void EEPROM_put(int Address, String Data) { int size_data = Data.length(); int i; for (i = 0; i < size_data; i++) { EEPROM.write(Address + i, Data[i]); } EEPROM.write(Address + size_data, '\0'); EEPROM.commit(); }



String EEPROM_get(int Address) { char Data[100]; int len = 0; unsigned char k; k = EEPROM.read(Address); while (k != '\0' && len < 100) { k = EEPROM.read(Address + len); Data[len] = k; len++;



C-2



} Data[len] = '\0'; return String(Data); }



void EEPROM_put_float(int address, float Data) { EEPROM.writeFloat(address, Data); EEPROM.commit(); }



float EEPROM_get_float(int address) { float float_data; float_data = EEPROM.readFloat(address);



return float_data; }



#define tds_servo_pin 19



Servo ArmServo;



void servo_setup(int pin_servo_tds) { ArmServo.attach(pin_servo_tds); ArmServo.write(90);



delay(500); }



void servo_control(int pin_servo, int degree) { ArmServo.attach(pin_servo); ArmServo.write(degree);



C-3



}



void set_motor(int Switch, int pwmVal, int pwm, int in) { analogWrite(pwm, pwmVal); if (Switch == 1) { digitalWrite(in, HIGH); } else { digitalWrite(in, LOW); } }



#define tds_sensor_pin 35



int adc_value_tds; float voltage_tds; int tds_value;



float tds_value_func() { adc_value_tds = analogRead(tds_sensor_pin); voltage_tds = (adc_value_tds * 3.3) / 4096.0; int val_tds = (913.98 * pow(voltage_tds, 4)) - (2556.2 * pow(voltage_tds, 3)) + (2437 * pow(voltage_tds, 2)) - (416.26 * voltage_tds) + (70.0);



return val_tds; }



void tds_sensor_setup() { pinMode(tds_sensor_pin, INPUT); }



void tds_read() {



C-4



tds_value = tds_value_func(); }



#define ph_sensor_pin 34



// variable for sampling ph int adc_value_ph; int adc_value_ph_temp = 0; int buffer_index_adc = 0; int avg_adc_ph; float ph_value_sampler;



// variable for average ph value float ph_value; float avg_ph_temp = 0; int buffer_index_ph = 0;



// variable for millis delay unsigned long time_adc_ph_sampling = 0; unsigned long time_ph_sampling = 0;



void ph_sensor_setup() { pinMode(ph_sensor_pin, INPUT); }



void ph_filter() { if ((millis() - time_adc_ph_sampling) >= 50U) { time_adc_ph_sampling = millis(); adc_value_ph = analogRead(ph_sensor_pin); adc_value_ph_temp = adc_value_ph + adc_value_ph_temp;



C-5



buffer_index_adc++; }



if ((millis() - time_ph_sampling) >= 1000U) { time_ph_sampling = millis(); avg_adc_ph = (adc_value_ph_temp / buffer_index_adc); ph_value_sampler = 0.0032 * avg_adc_ph + 4.0127;



buffer_index_adc = 0; adc_value_ph_temp = 0;



avg_ph_temp = ph_value_sampler + avg_ph_temp; buffer_index_ph++; } }



void ph_read() { ph_value = avg_ph_temp / buffer_index_ph;



avg_ph_temp = 0; buffer_index_ph = 0; }



#define pwm_M3 27 #define in_M3 14 #define water_pump 13



int state_tds = 0; // variable for control actuator after reading function done int runonce_tds = 0; // variable for active timer once, prevent function timer always execute



C-6



int pwm_tds_control; // pwm value for control speed pump, this value can be generate from fuzzy or can be set to constant value int time_tds_control; // time value for control timer pump, this value can be generate from fuzzy or can be set to constant value



int state_M3 = 0; // for indicator tds up int state_pump = 0; // for indicator tds down



millisDelay timer_tds_control; // timer for tds control



void tds_control_setup() { pinMode(in_M3, OUTPUT); pinMode(water_pump, OUTPUT);



digitalWrite(water_pump, HIGH); }



void tds_control_loop(int pwm_tds_value, int time_tds_value, float error_tds_con) { pwm_tds_control = pwm_tds_value; time_tds_control = time_tds_value;



if (state_tds == 1) { if (runonce_tds == 0) { timer_tds_control.start(time_tds_control); runonce_tds = 1; }



if (error_tds_con >= 0) { set_motor(1, pwm_tds_control, pwm_M3, in_M3); digitalWrite(water_pump, HIGH);



C-7



state_M3 = 1; state_pump = 0; } else { set_motor(0, 0, pwm_M3, in_M3); digitalWrite(water_pump, LOW);



state_M3 = 0; state_pump = 1; } }



if (timer_tds_control.justFinished()) { set_motor(0, 0, pwm_M3, in_M3); digitalWrite(water_pump, HIGH);



state_M3 = 0; state_pump = 0;



runonce_tds = 0; state_tds = 0; } }



// *** set pwm value and time value to constant for close loop ***//



#define pwm_M1 32 #define in_M1 33 #define pwm_M2 25 #define in_M2 26



C-8



int state_ph = 0; // variable for control actuator after reading function done int runonce_ph = 0; // variable for active timer once, prevent function timer always execute



int pwm_ph_control; // pwm value for control speed pump, this value can be generate from fuzzy or can be set to constant value int time_ph_control; // time value for control timer pump, this value can be generate from fuzzy or can be set to constant value



int state_M1 = 0; // for indicator pH up int state_M2 = 0; // for indicator pH down



millisDelay timer_ph_control; // timer for ph control



void ph_control_setup() { pinMode(in_M1, OUTPUT); pinMode(in_M2, OUTPUT); }



void ph_control_loop(int pwm_ph_value, int time_ph_value, float error_ph_con) { pwm_ph_control = pwm_ph_value; time_ph_control = time_ph_value;



if (state_ph == 1) { if (runonce_ph == 0) { timer_ph_control.start(time_ph_control); runonce_ph = 1; }



if (error_ph_con >= 0) {



C-9



set_motor(1, pwm_ph_control, pwm_M1,in_M1); set_motor(0, pwm_ph_control, pwm_M2, in_M2);



state_M1 = 1; state_M2 = 0; } else { set_motor(0, pwm_ph_control, pwm_M1, in_M1); set_motor(1, pwm_ph_control, pwm_M2, in_M2);



state_M1 = 0; state_M2 = 1; } }



if (timer_ph_control.justFinished()) { set_motor(0, 0, pwm_M1, in_M1); set_motor(0, 0 , pwm_M2, in_M2);



state_M1 = 0; state_M2 = 0;



runonce_ph = 0; state_ph = 0; } }



// *** set pwm value and time value to constant for close loop ***//



LiquidCrystal_I2C lcd(0x27, 16, 2);



unsigned long time_change_lcd = 0;



C-10



unsigned long time_display_lcd = 0;



int change_disp = 0;



void lcd_setup() { lcd.begin(); lcd.setCursor(0, 0); lcd.print("Nutrient Control"); delay(1000); }



void lcd_loop(int tds_disp_value, float ph_disp_value, String time_now, String time_1_set, String time_2_set, String time_3_set, float sp_tds, float sp_ph) { if ((millis() - time_change_lcd) >= 2000) { lcd.begin(); time_change_lcd = millis(); change_disp++; } if ((millis() - time_display_lcd) >= 500) { time_display_lcd = millis(); if (change_disp == 0) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("tds :"); lcd.setCursor(6, 0); lcd.print(tds_disp_value);



lcd.setCursor(0, 1); lcd.print("pH :"); lcd.setCursor(6, 1); lcd.print(ph_disp_value);



C-11



}



if (change_disp == 1) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Time Now :"); lcd.setCursor(11, 0); lcd.print(time_now);



lcd.setCursor(0, 1); lcd.print("T1 :"); lcd.setCursor(5, 1); lcd.print(time_1_set); }



if (change_disp == 2) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("T2 :"); lcd.setCursor(5, 0); lcd.print(time_2_set); lcd.setCursor(0, 1); lcd.print("T3 :"); lcd.setCursor(5, 1); lcd.print(time_3_set); }



if (change_disp == 3) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Sp tds :");



C-12



lcd.setCursor(9, 0); lcd.print(sp_tds); lcd.setCursor(0, 1); lcd.print("sp ph :"); lcd.setCursor(9, 1); lcd.print(sp_ph); }



if (change_disp == 4) { change_disp = 0; } } }



#define wifi_ssid "Blok G-11" #define wifi_password "urpass"



#define wifi_attemp 40



void wifi_setup() { int attemp = 0; WiFi.begin(wifi_ssid, wifi_password); Serial.print("Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { Serial.print(".");



lcd.clear(); lcd.setCursor(0, 0); lcd.print("Connecting Wi-Fi");



delay(100);



C-13



attemp++;



if (attemp >= wifi_attemp) { Serial.println("Connecting failed");



lcd.clear(); lcd.setCursor(0, 0); lcd.print("Connecting Fail");



delay(500);



ESP.restart(); } } }



void wifi_loop() { if (WiFi.status() != WL_CONNECTED) { wifi_setup(); } }



const char* mqtt_server = "broker.emqx.io"; const int mqtt_port = 1883; const char* client_id = "mqttx_6cf1e567";



const char* ch_publish_1 = "/ReadValue"; const char* ch_publish_2 = "/ReadState"; const char* ch_subscribe = "/SendValue";



WiFiClient MQTTclient;



C-14



PubSubClient client(MQTTclient);



#define MQTT_STR_MAX 256



char sPayload[MQTT_STR_MAX]; char sTopic[32]; char publishLog[MQTT_STR_MAX + 100];



void mqtt_setup() { client.setServer(mqtt_server, mqtt_port); client.setCallback(callback);



Serial.print("MQTT connecting to "); Serial.print(mqtt_server); Serial.print(":"); Serial.println(mqtt_port);



while (!client.connected()) { String client_ID = "esp32-client";



if (client.connect(client_ID.c_str(), client_id, "")) { Serial.println("Public emqx mqtt broker connected"); } else { Serial.print("failed with state "); Serial.print(client.state()); delay(1000); } } client.subscribe(ch_subscribe); }



C-15



void mqtt_loop() { if (!client.connected()) { mqtt_setup(); }



client.loop(); }



WiFiUDP ntpUDP; NTPClient time_client(ntpUDP, "pool.ntp.org", 25200);



String TimeH = ""; String TimeM = ""; time_t epochTime;



void time_setup() { time_client.begin(); }



void time_loop() { time_client.update(); epochTime = time_client.getEpochTime(); }



// function to get hour String GetH() { TimeH = time_client.getHours(); if (TimeH.length() < 2) { TimeH = "0" + TimeH; } return TimeH;



C-16



}



// function to get minutes String GetM() { TimeM = time_client.getMinutes(); if (TimeM.length() < 2) { TimeM = "0" + TimeM; } return TimeM; }



// Variable timer for received data from MQTT const char* timer_1; const char* timer_2; const char* timer_3;



// Variable timer for store data timer String timer_1_store = "no time"; String timer_2_store = "no time"; String timer_3_store = "no time"; String timer_1_eeprom = "no time"; String timer_2_eeprom = "no time"; String timer_3_eeprom = "no time";



float setpoint_tds_store; float setpoint_ph_store; float setpoint_tds; float setpoint_ph;



int runonce_time = 0;



C-17



bool force_stop = false; bool force_on = false;



int state_control = 0;



int runonce_threshold = 0;



String HOURS; String MINS; String TIME_NOW;



void callback(char* topic, byte* message, unsigned int length) { char str[length + 1]; Serial.print("Message arrived ["); Serial.print(topic); Serial.print("]");



for (int i = 0; i < length; i++) { Serial.print((char)message[i]); str[i] = (char)message[i]; } Serial.println(); DynamicJsonDocument doc(5000); deserializeJson(doc, str);



if (doc[0]["Timer1"]) { timer_1 = doc[0]["Timer1"]; timer_1_store = String(timer_1); EEPROM_put(10, timer_1_store); }



C-18



if (doc[1]["Timer2"]) { timer_2 = doc[1]["Timer2"]; timer_2_store = String(timer_2); EEPROM_put(30, timer_2_store); }



if (doc[2]["Timer3"]) { timer_3 = doc[2]["Timer3"]; timer_3_store = String(timer_3); EEPROM_put(50, timer_3_store); }



if (doc[0]["TDS_SET"]) { setpoint_tds_store = doc[0]["TDS_SET"]; EEPROM_put_float(70, setpoint_tds_store); }



if (doc[1]["PH_SET"]) { setpoint_ph_store = doc[1]["PH_SET"]; EEPROM_put_float(90, setpoint_ph_store); }



if (doc[0]["Force_Stop"]) { force_stop = doc[0]["Force_Stop"]; }



if (doc[0]["Force_on"]) { force_on = doc[0]["Force_on"]; }



if (doc[0]["close_loop"]) {



C-19



state_control = doc[0]["close_loop"]; } }



void check_state() { HOURS = GetH(); MINS = GetM(); TIME_NOW = HOURS + ":" + MINS;



timer_1_eeprom = EEPROM_get(10); timer_2_eeprom = EEPROM_get(30); timer_3_eeprom = EEPROM_get(50);



setpoint_tds = EEPROM_get_float(70); setpoint_ph = EEPROM_get_float(90);



if (TIME_NOW == timer_1_eeprom) { if (runonce_time == 0) { state_control = 1; runonce_time = 1; } }



if (TIME_NOW == timer_2_eeprom) { if (runonce_time == 0) { state_control = 1; runonce_time = 1; } }



if (TIME_NOW == timer_3_eeprom) {



C-20



if (runonce_time == 0) { state_control = 1; runonce_time = 1; } }



if (TIME_NOW != timer_1_eeprom && TIME_NOW != timer_2_eeprom && TIME_NOW != timer_3_eeprom) { runonce_time = 0; }



if (force_stop == true) { state_control = 0; runonce_time = 0;



buffer_index_adc = 0; adc_value_ph_temp = 0;



buffer_index_ph = 0; avg_ph_temp = 0;



state_tds = 0; state_ph = 0;



runonce_tds = 0; runonce_ph = 0;



set_motor(0, 0, pwm_M3, in_M3); digitalWrite(water_pump, HIGH); state_M3 = 0; state_pump = 0;



C-21



set_motor(0, 0, pwm_M1, in_M3); set_motor(0, 0, pwm_M2, in_M3); state_M1 = 0; state_M2 = 0;



runonce_threshold = 0;



send_packet(ch_publish_1, ch_publish_2);



force_stop = false; }



if (force_on == true) { state_control = 1; force_on = false; } }



char data_value[100]; char data_state[100];



float error_tds_value; float error_ph_value;



unsigned long time_send_packet = 0;



char* data_sensor_packet(int tds_send_val, float ph_send_val, float error_tds, float error_ph) { sprintf(data_value, "%d, %f, %f, %f", tds_send_val, ph_send_val, error_tds, error_ph);



C-22



return data_value; }



char* data_state_packet(int M1, int M2, int M3, int w_pump) { sprintf(data_state, "%d, %d, %d, %d", M1, M2, M3, w_pump);



return data_state; }



void send_packet(const char* ch_publish1, const char* ch_publish2) { if ((millis() - time_send_packet) >= 100) { time_send_packet = millis(); client.publish(ch_publish1, data_sensor_packet(tds_value, ph_value, voltage_tds, avg_adc_ph)); client.publish(ch_publish2, data_state_packet(state_M1, state_M2, state_M3, state_pump)); } }



float derror_tds_value; float derror_ph_value;



float last_tds_error = 0.0; float last_ph_error = 0.0;



void get_error_derror_tds() { error_tds_value = setpoint_tds - tds_value; derror_tds_value = error_tds_value - last_tds_error; delay(1); last_tds_error = error_tds_value;



C-23



}



void get_error_derror_ph() { error_ph_value = setpoint_ph - ph_value; derror_ph_value = error_ph_value - last_ph_error; delay(1); last_ph_error = error_ph_value; }



int runonce_read = 0; // for read at first time



void timercontrol_tds() { tds_threshold_n = setpoint_tds - (setpoint_tds * 0.05); tds_threshold_p = setpoint_tds + (setpoint_tds * 0.05);



if (tds_value >= tds_threshold_n && tds_value = ph_threshold_n && ph_value = tds_threshold_n && tds_value = ph_threshold_n && ph_value 0 && ppm_dError.NB_dEr_ppm > 0) { bobot1_ppm = minimum(ppm_Error.NB_Er_ppm, ppm_dError.NB_dEr_ppm); } if (ppm_Error.NB_Er_ppm > 0 && ppm_dError.NK_dEr_ppm > 0) { bobot2_ppm = minimum(ppm_Error.NB_Er_ppm, ppm_dError.NK_dEr_ppm); } if (ppm_Error.NB_Er_ppm > 0 && ppm_dError.Z_dEr_ppm > 0) { bobot3_ppm = minimum(ppm_Error.NB_Er_ppm, ppm_dError.Z_dEr_ppm); } if (ppm_Error.NB_Er_ppm > 0 && ppm_dError.PK_dEr_ppm > 0) { bobot4_ppm = minimum(ppm_Error.NB_Er_ppm, ppm_dError.PK_dEr_ppm); } if (ppm_Error.NB_Er_ppm > 0 && ppm_dError.PB_dEr_ppm > 0) { bobot5_ppm = minimum(ppm_Error.NB_Er_ppm, ppm_dError.PB_dEr_ppm); }



if (ppm_Error.NK_Er_ppm > 0 && ppm_dError.NB_dEr_ppm > 0) { bobot6_ppm = minimum(ppm_Error.NK_Er_ppm, ppm_dError.NB_dEr_ppm); } if (ppm_Error.NK_Er_ppm > 0 && ppm_dError.NK_dEr_ppm > 0) { bobot7_ppm = minimum(ppm_Error.NK_Er_ppm, ppm_dError.NK_dEr_ppm); } if (ppm_Error.NK_Er_ppm > 0 && ppm_dError.Z_dEr_ppm > 0) { bobot8_ppm = minimum(ppm_Error.NK_Er_ppm, ppm_dError.Z_dEr_ppm); } if (ppm_Error.NK_Er_ppm > 0 && ppm_dError.PK_dEr_ppm > 0) {



C-33



bobot9_ppm = minimum(ppm_Error.NK_Er_ppm, ppm_dError.PK_dEr_ppm); } if (ppm_Error.NK_Er_ppm > 0 && ppm_dError.PB_dEr_ppm > 0) { bobot10_ppm = minimum(ppm_Error.NK_Er_ppm, ppm_dError.PB_dEr_ppm); }



if (ppm_Error.Z_Er_ppm > 0 && ppm_dError.NB_dEr_ppm > 0) { bobot11_ppm = minimum(ppm_Error.Z_Er_ppm, ppm_dError.NB_dEr_ppm); } if (ppm_Error.Z_Er_ppm > 0 && ppm_dError.NK_dEr_ppm > 0) { bobot12_ppm = minimum(ppm_Error.Z_Er_ppm, ppm_dError.NK_dEr_ppm); } if (ppm_Error.Z_Er_ppm > 0 && ppm_dError.Z_dEr_ppm > 0) { bobot13_ppm = minimum(ppm_Error.Z_Er_ppm, ppm_dError.Z_dEr_ppm); } if (ppm_Error.Z_Er_ppm > 0 && ppm_dError.PK_dEr_ppm > 0) { bobot14_ppm = minimum(ppm_Error.Z_Er_ppm, ppm_dError.PK_dEr_ppm); } if (ppm_Error.Z_Er_ppm > 0 && ppm_dError.PB_dEr_ppm > 0) { bobot15_ppm = minimum(ppm_Error.Z_Er_ppm, ppm_dError.PB_dEr_ppm); }



if (ppm_Error.PK_Er_ppm > 0 && ppm_dError.NB_dEr_ppm > 0) { bobot16_ppm = minimum(ppm_Error.PK_Er_ppm, ppm_dError.NB_dEr_ppm); } if (ppm_Error.PK_Er_ppm > 0 && ppm_dError.NK_dEr_ppm > 0) { bobot17_ppm = minimum(ppm_Error.PK_Er_ppm, ppm_dError.NK_dEr_ppm);



C-34



} if (ppm_Error.PK_Er_ppm > 0 && ppm_dError.Z_dEr_ppm > 0) { bobot18_ppm = minimum(ppm_Error.PK_Er_ppm, ppm_dError.Z_dEr_ppm); } if (ppm_Error.PK_Er_ppm > 0 && ppm_dError.PK_dEr_ppm > 0) { bobot19_ppm = minimum(ppm_Error.PK_Er_ppm, ppm_dError.PK_dEr_ppm); } if (ppm_Error.PK_Er_ppm > 0 && ppm_dError.PB_dEr_ppm > 0) { bobot20_ppm = minimum(ppm_Error.PK_Er_ppm, ppm_dError.PB_dEr_ppm); }



if (ppm_Error.PB_Er_ppm > 0 && ppm_dError.NB_dEr_ppm > 0) { bobot21_ppm = minimum(ppm_Error.PB_Er_ppm, ppm_dError.NB_dEr_ppm); } if (ppm_Error.PB_Er_ppm > 0 && ppm_dError.NK_dEr_ppm > 0) { bobot22_ppm = minimum(ppm_Error.PB_Er_ppm, ppm_dError.NK_dEr_ppm); } if (ppm_Error.PB_Er_ppm > 0 && ppm_dError.Z_dEr_ppm > 0) { bobot23_ppm = minimum(ppm_Error.PB_Er_ppm, ppm_dError.Z_dEr_ppm); } if (ppm_Error.PB_Er_ppm > 0 && ppm_dError.PK_dEr_ppm > 0) { bobot24_ppm = minimum(ppm_Error.PB_Er_ppm, ppm_dError.PK_dEr_ppm); } if (ppm_Error.PB_Er_ppm > 0 && ppm_dError.PB_dEr_ppm > 0) { bobot25_ppm = minimum(ppm_Error.PB_Er_ppm, ppm_dError.PB_dEr_ppm);



C-35



} }



void fuzzy_inference_ph() { bobot1_ph = 0; bobot2_ph = 0; bobot3_ph = 0; bobot4_ph = 0; bobot5_ph = 0; bobot6_ph = 0; bobot7_ph = 0; bobot8_ph = 0; bobot9_ph = 0; bobot10_ph = 0; bobot11_ph = 0; bobot12_ph = 0; bobot13_ph = 0; bobot14_ph = 0; bobot15_ph = 0; bobot16_ph = 0; bobot17_ph = 0; bobot18_ph = 0; bobot19_ph = 0; bobot20_ph = 0; bobot21_ph = 0; bobot22_ph = 0; bobot23_ph = 0; bobot24_ph = 0; bobot25_ph = 0;



if (pH_Error.NB_Er_pH > 0 && pH_dError.NB_dEr_pH > 0) {



C-36



bobot1_ph = minimum(pH_Error.NB_Er_pH, pH_dError.NB_dEr_pH); } if (pH_Error.NB_Er_pH > 0 && pH_dError.NK_dEr_pH > 0) { bobot2_ph = minimum(pH_Error.NB_Er_pH, pH_dError.NK_dEr_pH); } if (pH_Error.NB_Er_pH > 0 && pH_dError.Z_dEr_pH > 0) { bobot3_ph = minimum(pH_Error.NB_Er_pH, pH_dError.Z_dEr_pH); } if (pH_Error.NB_Er_pH > 0 && pH_dError.PK_dEr_pH > 0) { bobot4_ph = minimum(pH_Error.NB_Er_pH, pH_dError.PK_dEr_pH); } if (pH_Error.NB_Er_pH > 0 && pH_dError.PB_dEr_pH > 0) { bobot5_ph = minimum(pH_Error.NB_Er_pH, pH_dError.PB_dEr_pH); }



if (pH_Error.NK_Er_pH > 0 && pH_dError.NB_dEr_pH > 0) { bobot6_ph = minimum(pH_Error.NK_Er_pH, pH_dError.NB_dEr_pH); } if (pH_Error.NK_Er_pH > 0 && pH_dError.NK_dEr_pH > 0) { bobot7_ph = minimum(pH_Error.NK_Er_pH, pH_dError.NK_dEr_pH); } if (pH_Error.NK_Er_pH > 0 && pH_dError.Z_dEr_pH > 0) { bobot8_ph = minimum(pH_Error.NK_Er_pH, pH_dError.Z_dEr_pH); } if (pH_Error.NK_Er_pH > 0 && pH_dError.PK_dEr_pH > 0) { bobot9_ph = minimum(pH_Error.NK_Er_pH, pH_dError.PK_dEr_pH); } if (pH_Error.NK_Er_pH > 0 && pH_dError.PB_dEr_pH > 0) { bobot10_ph = minimum(pH_Error.NK_Er_pH, pH_dError.PB_dEr_pH); }



C-37



if (pH_Error.Z_Er_pH > 0 && pH_dError.NB_dEr_pH > 0) { bobot11_ph = minimum(pH_Error.Z_Er_pH, pH_dError.NB_dEr_pH); } if (pH_Error.Z_Er_pH > 0 && pH_dError.NK_dEr_pH > 0) { bobot12_ph = minimum(pH_Error.Z_Er_pH, pH_dError.NK_dEr_pH); } if (pH_Error.Z_Er_pH > 0 && pH_dError.Z_dEr_pH > 0) { bobot13_ph = minimum(pH_Error.Z_Er_pH, pH_dError.Z_dEr_pH); } if (pH_Error.Z_Er_pH > 0 && pH_dError.PK_dEr_pH > 0) { bobot14_ph = minimum(pH_Error.Z_Er_pH, pH_dError.PK_dEr_pH); } if (pH_Error.Z_Er_pH > 0 && pH_dError.PB_dEr_pH > 0) { bobot15_ph = minimum(pH_Error.Z_Er_pH, pH_dError.PB_dEr_pH); }



if (pH_Error.PK_Er_pH > 0 && pH_dError.NB_dEr_pH > 0) { bobot16_ph = minimum(pH_Error.PK_Er_pH, pH_dError.NB_dEr_pH); } if (pH_Error.PK_Er_pH > 0 && pH_dError.NK_dEr_pH > 0) { bobot17_ph = minimum(pH_Error.PK_Er_pH, pH_dError.NK_dEr_pH); } if (pH_Error.PK_Er_pH > 0 && pH_dError.Z_dEr_pH > 0) { bobot18_ph = minimum(pH_Error.PK_Er_pH, pH_dError.Z_dEr_pH); } if (pH_Error.PK_Er_pH > 0 && pH_dError.PK_dEr_pH > 0) { bobot19_ph = minimum(pH_Error.PK_Er_pH, pH_dError.PK_dEr_pH); } if (pH_Error.PK_Er_pH > 0 && pH_dError.PB_dEr_pH > 0) { bobot20_ph = minimum(pH_Error.PK_Er_pH, pH_dError.PB_dEr_pH); }



C-38



if (pH_Error.PB_Er_pH > 0 && pH_dError.NB_dEr_pH > 0) { bobot21_ph = minimum(pH_Error.PB_Er_pH, pH_dError.NB_dEr_pH); } if (pH_Error.PB_Er_pH > 0 && pH_dError.NK_dEr_pH > 0) { bobot22_ph = minimum(pH_Error.PB_Er_pH, pH_dError.NK_dEr_pH); } if (pH_Error.PB_Er_pH > 0 && pH_dError.Z_dEr_pH > 0) { bobot23_ph = minimum(pH_Error.PB_Er_pH, pH_dError.Z_dEr_pH); } if (pH_Error.PB_Er_pH > 0 && pH_dError.PK_dEr_pH > 0) { bobot24_ph = minimum(pH_Error.PB_Er_pH, pH_dError.PK_dEr_pH); } if (pH_Error.PB_Er_pH > 0 && pH_dError.PB_dEr_pH > 0) { bobot25_ph = minimum(pH_Error.PB_Er_pH, pH_dError.PB_dEr_pH); } } void defuzzifikasi_tds() { rata2bobot_pwm_ppm = (bobot1_ppm * pwm_ppm.cepat) + (bobot2_ppm * pwm_ppm.cepat) + (bobot3_ppm * pwm_ppm.cepat) + (bobot4_ppm * pwm_ppm.cepat) + (bobot5_ppm * pwm_ppm.sedang) + (bobot6_ppm * pwm_ppm.sedang) + (bobot7_ppm * pwm_ppm.sedang) + (bobot8_ppm * pwm_ppm.sedang) + (bobot9_ppm * pwm_ppm.sedang) + (bobot10_ppm * pwm_ppm.sedang) + (bobot11_ppm * pwm_ppm.lambat) + (bobot12_ppm * pwm_ppm.lambat) + (bobot13_ppm * pwm_ppm.lambat) + (bobot14_ppm * pwm_ppm.lambat) + (bobot15_ppm * pwm_ppm.lambat) + (bobot16_ppm * pwm_ppm.sedang) + (bobot17_ppm * pwm_ppm.sedang) + (bobot18_ppm * pwm_ppm.sedang) + (bobot19_ppm * pwm_ppm.sedang) + (bobot20_ppm * pwm_ppm.sedang) +



C-39



(bobot21_ppm * pwm_ppm.sedang) + (bobot22_ppm * pwm_ppm.cepat) + (bobot23_ppm * pwm_ppm.cepat) + (bobot24_ppm * pwm_ppm.cepat) + (bobot25_ppm * pwm_ppm.cepat);



rata2bobot_time_ppm = (bobot1_ppm * time_ppm.lama) + (bobot2_ppm * time_ppm.lama) + (bobot3_ppm * time_ppm.lama) + (bobot4_ppm * time_ppm.sedang) + (bobot5_ppm * time_ppm.sedang) + (bobot6_ppm * time_ppm.sedang) + (bobot7_ppm * time_ppm.sedang) + (bobot8_ppm * time_ppm.sedang) + (bobot9_ppm * time_ppm.sedang) + (bobot10_ppm * time_ppm.sedang) + (bobot11_ppm * time_ppm.sedang) + (bobot12_ppm * time_ppm.bentar) + (bobot13_ppm * time_ppm.bentar) + (bobot14_ppm * time_ppm.bentar) + (bobot15_ppm * time_ppm.sedang) + (bobot16_ppm * time_ppm.sedang) + (bobot17_ppm * time_ppm.sedang) + (bobot18_ppm * time_ppm.sedang) + (bobot19_ppm * time_ppm.sedang) + (bobot20_ppm * time_ppm.sedang) + (bobot21_ppm * time_ppm.lama) + (bobot22_ppm * time_ppm.lama) + (bobot23_ppm * time_ppm.lama) + (bobot24_ppm * time_ppm.lama) + (bobot25_ppm * time_ppm.lama);



sumrata2bobot_ppm = (bobot1_ppm + bobot2_ppm + bobot3_ppm + bobot4_ppm + bobot5_ppm + bobot6_ppm + bobot7_ppm + bobot8_ppm + bobot9_ppm + bobot10_ppm) + (bobot11_ppm + bobot12_ppm + bobot13_ppm + bobot14_ppm + bobot15_ppm + bobot16_ppm + bobot17_ppm + bobot18_ppm + bobot19_ppm + bobot20_ppm) + (bobot21_ppm + bobot22_ppm + bobot23_ppm + bobot24_ppm + bobot25_ppm); }



float pwm_ppm_func() {



C-40



pwm_out_ppm = rata2bobot_pwm_ppm / sumrata2bobot_ppm; if (isnan(pwm_out_ppm)) { pwm_out_ppm = 255.0; } return pwm_out_ppm; }



float time_ppm_func() { time_out_ppm = rata2bobot_time_ppm / sumrata2bobot_ppm; if (isnan(time_out_ppm)) { time_out_ppm = 2000.0; } return time_out_ppm; }



void defuzzifikasi_ph() { rata2bobot_pwm_ph = (bobot1_ph * pwm_pH.cepat) + (bobot2_ph * pwm_pH.cepat) + (bobot3_ph * pwm_pH.cepat) + (bobot4_ph * pwm_pH.cepat) + (bobot5_ph * pwm_pH.sedang) + (bobot6_ph * pwm_pH.sedang) + (bobot7_ph * pwm_pH.sedang) + (bobot8_ph * pwm_pH.sedang) + (bobot9_ph * pwm_pH.sedang) + (bobot10_ph * pwm_pH.sedang) + (bobot11_ph * pwm_pH.lambat) + (bobot12_ph * pwm_pH.lambat) + (bobot13_ph * pwm_pH.lambat) + (bobot14_ph * pwm_pH.lambat) + (bobot15_ph * pwm_pH.lambat) + (bobot16_ph * pwm_pH.sedang) + (bobot17_ph * pwm_pH.sedang) + (bobot18_ph * pwm_pH.sedang) + (bobot19_ph * pwm_pH.sedang) + (bobot20_ph * pwm_pH.sedang) + (bobot21_ph * pwm_pH.sedang) + (bobot22_ph * pwm_pH.cepat) + (bobot23_ph * pwm_pH.cepat) + (bobot24_ph * pwm_pH.cepat) + (bobot25_ph * pwm_pH.cepat);



C-41



rata2bobot_time_ph = (bobot1_ph * time_pH.lama) + (bobot2_ph * time_pH.lama) + (bobot3_ph * time_pH.lama) + (bobot4_ph * time_pH.sedang) + (bobot5_ph * time_pH.bentar) + (bobot6_ph * time_pH.lama) + (bobot7_ph * time_pH.lama) + (bobot8_ph * time_pH.sedang) + (bobot9_ph * time_pH.bentar) + (bobot10_ph * time_pH.bentar) + (bobot11_ph * time_pH.sedang) + (bobot12_ph * time_pH.bentar) + (bobot13_ph * time_pH.bentar) + (bobot14_ph * time_pH.bentar) + (bobot15_ph * time_pH.sedang) + (bobot16_ph * time_pH.bentar) + (bobot17_ph * time_pH.bentar) + (bobot18_ph * time_pH.sedang) + (bobot19_ph * time_pH.lama) + (bobot20_ph * time_pH.lama) + (bobot21_ph * time_pH.bentar) + (bobot22_ph * time_pH.sedang) + (bobot23_ph * time_pH.lama) + (bobot24_ph * time_pH.lama) + (bobot25_ph * time_pH.lama);



sumrata2bobot_ph = (bobot1_ph + bobot2_ph + bobot3_ph + bobot4_ph + bobot5_ph + bobot6_ph + bobot7_ph + bobot8_ph + bobot9_ph + bobot10_ph) + (bobot11_ph + bobot12_ph + bobot13_ph + bobot14_ph + bobot15_ph + bobot16_ph + bobot17_ph + bobot18_ph + bobot19_ph + bobot20_ph) + (bobot21_ph + bobot22_ph + bobot23_ph + bobot24_ph + bobot25_ph); }



float pwm_ph_func() { pwm_out_ph = rata2bobot_pwm_ph / sumrata2bobot_ph; if (isnan(pwm_out_ph)) { pwm_out_ph = 255.0; } return pwm_out_ph; }



C-42



float time_ph_func() { time_out_ph = rata2bobot_time_ph / sumrata2bobot_ph; if (isnan(time_out_ph)) { time_out_ph = 5000.0; } return time_out_ph; }



void fuzzy_tds() { fuzzyfikasi_tds(); fuzzy_inference_tds(); defuzzifikasi_tds(); }



void fuzzy_ph() { fuzzyfikasi_ph(); fuzzy_inference_ph(); defuzzifikasi_ph(); } unsigned long currt; unsigned long prevt = 0;



float pwm_tds = 0; float pwm_ph = 0; float time_tds = 0; float time_ph = 0;



millisDelay Timer_measure;



unsigned long prevt_measure = 0; int measure_state = 1;



C-43



int runonce_measure = 0;



void measurement_loop() { if (state_control == 0) { if ((millis() - prevt_measure) >= 300000) { prevt_measure = millis(); measure_state = 1; }



if (measure_state == 1) { ph_filter();



if (runonce_measure == 0) { Timer_measure.start(30000); servo_control(tds_servo_pin, 0); runonce_measure = 1; } }



if (Timer_measure.justFinished()) { ph_read(); tds_read(); send_packet(ch_publish_1, ch_publish_2); servo_control(tds_servo_pin, 90); measure_state = 0; runonce_measure = 0; } } else { Timer_measure.stop(); measure_state = 0; runonce_measure = 0;



C-44



} }



void setup() { serial_setup(); servo_setup(tds_servo_pin); tds_sensor_setup(); ph_sensor_setup(); lcd_setup();



tds_control_setup(); ph_control_setup();



wifi_setup(); mqtt_setup(); time_setup(); }



void loop() { currt = millis();



wifi_loop(); mqtt_loop(); time_loop();



check_state();



servo_control_loop();



main_control_fuzzy(); main_control_nsequence_loop();



C-45



measurement_loop();



lcd_loop(tds_value, ph_value, TIME_NOW, timer_1_eeprom, timer_2_eeprom, timer_3_eeprom, setpoint_tds, setpoint_ph); }



C-46