Dokumentasi Proyek Skripsi - Informatika UPN Veteran Jatim
Sistem akuaponik adalah sistem pertanian gabungan antara ikan dengan sayuran yang saling menguntungkan. Di sisi lain, gagal panen juga dapat menjadi kekhawatiran bagi para petani akuaponik karena hal ini dapat terjadi kapan saja. Kegagalan panen dapat dipengaruhi oleh banyak faktor, namun biasanya disebabkan oleh ketidakjelasan pH air yang tinggi di sekitar ruang lingkup budidaya. Para petani akuaponik khawatir jika gagal panen terus berlanjut akan membahayakan ketahanan pangan mereka. Proyek ini dibuat dengan harapan dapat mengatasi masalah pH tersebut. Proyek ini telah dilaksanakan dan memakan waktu kurang lebih 1 tahun. Sistem yang dibuat dapat mengontrol dan memonitoring perubahan pH air setiap saat. Sistem ini berbasis Internet of Things (IoT), dengan menggunakan MQTT sebagai protokol komunikasinya. Sistem ini juga dilengkapi dengan kecerdasan buatan, yang menggunakan IT2FL (Interval Type-2 Fuzzy Logic) sebagai pendukung keputusannya. Selain itu, antarmuka sistem menggunakan Bot Telegram, sehingga memudahkan pengguna untuk berinteraksi.
| Bagian | Deskripsi |
|---|---|
| Papan Pengembangan | DOIT ESP32 DEVKIT V1 |
| Papan Pendukung | Arduino Uno R3 |
| Editor Kode | Arduino IDE 1.8.19 (Versi Lama yang Stabil) |
| Dukungan Aplikasi | • Bot Telegram • Matlab R2020 |
| Driver | CP210X USB Driver |
| Platform IoT | io-t.net |
| Protokol Komunikasi | • Inter Integrated Circuit (I2C) • Message Queuing Telemetry Transport (MQTT) • MTProto |
| Arsitektur IoT | 3 Lapisan |
| Matlab | Fuzzy Interface System |
| Bahasa Pemrograman | C/C++ |
| Pustaka Arduino | • WiFi (bawaan) • PubSubClient oleh Nick O'Leary (Versi: 2.8) • LiquidCrystal_I2C oleh Frank de Brabander (Versi: 1.1.2) • CTBot oleh Stefano Ledda (Versi: 2.1.11) • ArduinoJson oleh Benoit Blanchon (Versi: 6.19.4) • RTClib oleh Adafruit (Versi: 2.0.2) |
| Aktuator | • Submersible pump aquarium (x1) • Pneumatic solenoid valve (x2) • Piezoelectric (x1) |
| Sensor | • pH Sensor (x1) • RTC (x1) |
| Layar | LCD I2C (x1) |
| Objek Percobaan | • Benih sawi pakcoy • Benih lele dumbo |
| Komponen Lainnya | • Kabel USB Mikro - USB tipe A (x1) • Kabel jumper (1 set) • Switching power supply 12V 1A (x1) • Relay elektromekanis 2-channel (x1) • Saklar bulat (x1) • Papan ekspansi ESP32 (x1) • PCB Dot Matrix (x1) • Terminal PCB block screw (x10) • Socket female jack DC (x1) • Connector male jack DC (x3) • Probe Elektroda pH (x1) • Pipa (1 set) • Netpot (1 set) • Rockwool (1 set) • Kain flanel (1 set) • Saringan air (x1) • Dop kaca (1 set) • Botol (x2) • Tatakan beroda akuarium (x1) • Akuarium (x1) • Kotak akrilik (x1) • Skun (1 set) • Plat galvanis (x1) • Baut plus (1 set) • Mur (1 set) |
-
Arduino IDE
https://www.arduino.cc/en/software
-
CP210X USB Driver
https://bit.ly/CP210X_USBdriver
-
Matlab R2020
https://bit.ly/MATLAB_R2020a_Installer
| Infrastruktur |
|---|
![]() |
| Diagram Ilustrasi | Desain Prototipe | Desain Wadah Utama |
|---|---|---|
![]() |
![]() |
![]() |
| Sistem Antarmuka Fuzzy IT2FL | Variabel Masukan IT2FL | Variabel Keluaran IT2FL |
|---|---|---|
![]() |
![]() |
![]() |
/*
=====================================================
I2C Scanner untuk Arduino / ESP32 / ESP8266
by: Devan Cakra Mudra Wijaya, S.Kom.
=====================================================
Fungsi:
- Mendeteksi seluruh perangkat I2C yang terhubung
- Menampilkan alamat perangkat dalam format HEX
- Menampilkan jumlah perangkat yang ditemukan
=====================================================
Pin SDA dan SCL untuk Arduino / ESP32 / ESP8266
=====================================================
Koneksi I2C Arduino (default):
- Arduino Uno / Nano (ATmega328P)
SDA -> A4
SCL -> A5
- Arduino Mega 2560
SDA -> D20
SCL -> D21
- Board Arduino lainnya
SDA -> Pin SDA
SCL -> Pin SCL
(Lihat datasheet atau pinout board)
Koneksi I2C ESP32 (default):
SDA -> GPIO 21
SCL -> GPIO 22
Koneksi I2C ESP8266 (default):
SDA -> GPIO 4 (D2)
SCL -> GPIO 5 (D1)
*/
// Memanggil library Wire untuk komunikasi I2C
#include <Wire.h>
// Konstanta untuk menentukan jeda antar scan (5000 ms = 5 detik)
const uint32_t SCAN_INTERVAL = 5000;
// Fungsi untuk menginisialisasi komunikasi I2C
// Konfigurasi pin SDA dan SCL akan disesuaikan secara otomatis berdasarkan jenis board yang digunakan
void initI2C() {
// Jika board yang digunakan adalah ESP32, maka:
#if defined(ESP32)
// Mengaktifkan komunikasi I2C
// SDA = GPIO21
// SCL = GPIO22
Wire.begin(21, 22);
// Jika board yang digunakan adalah ESP8266, maka:
#elif defined(ESP8266)
// Mengaktifkan komunikasi I2C
// SDA = D2 (GPIO4)
// SCL = D1 (GPIO5)
Wire.begin(D2, D1);
// Jika board yang digunakan bukan ESP32 maupun ESP8266
// Contoh: Arduino Uno, Nano, Mega, Leonardo, dll, maka:
#else
// Mengaktifkan komunikasi I2C menggunakan pin hardware bawaan board
Wire.begin();
#endif
}
// Fungsi setup() dijalankan satu kali saat board pertama kali menyala atau reset
// Digunakan untuk inisialisasi perangkat keras, komunikasi serial, sensor, modul, dan konfigurasi awal program
void setup() {
// Memulai komunikasi Serial dengan baud rate 115200
Serial.begin(115200);
// Mengecek apakah board menggunakan USB native
// Contoh: Arduino Leonardo, Arduino Micro, beberapa ESP32-S2/S3
#if defined(USBCON) || defined(ARDUINO_USB_CDC_ON_BOOT)
// Jika iya, maka:
// Program akan menunggu sampai Serial Monitor terhubung sebelum melanjutkan eksekusi program
while (!Serial);
#endif
// Menunggu selama 2 detik sebelum program dimulai
delay(2000);
// Menampilkan header program
Serial.println("====================================");
Serial.println(" I2C DEVICE SCANNER ");
Serial.println("by: Devan Cakra Mudra Wijaya, S.Kom.");
Serial.println("====================================");
// Mencetak baris kosong
Serial.println();
// Menginisialisasi komunikasi I2C
initI2C();
}
// Fungsi loop() dijalankan terus-menerus setelah Fungsi setup() selesai
// Seluruh logika utama program biasanya ditempatkan di dalam fungsi ini
void loop() {
// Variabel untuk menyimpan kode error hasil komunikasi I2C
uint8_t error;
// Variabel untuk menyimpan alamat I2C yang sedang diperiksa
uint8_t address;
// Variabel penghitung jumlah device yang ditemukan
uint8_t deviceCount = 0;
// Menampilkan informasi bahwa proses scan dimulai
Serial.println("------------------------------------");
Serial.println("Scanning I2C bus...");
Serial.println("------------------------------------");
// Melakukan perulangan dari alamat 1 sampai 126
// Alamat I2C valid adalah 0x01 sampai 0x7E
for (address = 1; address < 127; address++) {
// Memulai komunikasi ke alamat yang sedang diuji
Wire.beginTransmission(address);
// Mengakhiri transmisi dan menyimpan hasilnya
// 0 = sukses
// 1 = data terlalu panjang
// 2 = NACK saat alamat dikirim
// 3 = NACK saat data dikirim
// 4 = error lain
error = Wire.endTransmission();
// Jika tidak ada error, maka:
if (error == 0) {
// Menampilkan informasi device ditemukan
Serial.print("[FOUND] Device at address 0x");
// Jika alamat kurang dari 16, maka:
// Tambahkan angka 0 di depan agar format HEX rapi
if (address < 16) {
Serial.print("0");
}
// Menampilkan alamat dalam format HEX
Serial.println(address, HEX);
// Menambah jumlah device yang ditemukan
deviceCount++;
}
// Jika terjadi error tidak dikenal, maka:
else if (error == 4) {
// Menampilkan pesan error
Serial.print("[ERROR] Unknown error at address 0x");
// Jika alamat kurang dari 16, maka:
// Tambahkan angka 0 di depan agar format HEX rapi
if (address < 16) {
Serial.print("0");
}
// Menampilkan alamat yang bermasalah dalam format HEX
Serial.println(address, HEX);
}
// Jika error selain 0 atau 4, maka:
// Diabaikan, biasanya ini terjadi karena tidak ada perangkat pada alamat tersebut
}
// Mencetak baris kosong
Serial.println();
// Jika tidak ada device ditemukan, maka:
if (deviceCount == 0) {
// Tampilkan pesan tidak ada device
Serial.println("No I2C devices found.");
}
else { // Jika setidaknya satu perangkat ditemukan, maka:
// Menampilkan jumlah device yang ditemukan
Serial.print("Total devices found: ");
// Menampilkan nilai deviceCount
Serial.println(deviceCount);
}
// Menampilkan informasi waktu scan berikutnya
Serial.print("Next scan in ");
// Mengubah milidetik menjadi detik
Serial.print(SCAN_INTERVAL / 1000);
// Menampilkan satuan detik
Serial.println(" seconds.");
// Baris kosong
Serial.println("\n");
// Menunggu selama 5 detik sebelum scan ulang
delay(SCAN_INTERVAL);
} |
Sensor pH dapat di kalibrasi dengan menggunakan hasil perhitungan regresi linear. Persamaan regresi linear dapat anda lihat sebagai berikut.
| I |
|
Penjelasan dari simbol-simbol yang ada di persamaan I, dapat anda lihat selengkapnya pada tabel berikut.
| Simbol | Keterangan |
|---|---|
| 𝑌 | nilai buffer pH |
| 𝑋 | nilai tegangan yang diperoleh berdasarkan Y |
| 𝑎 dan 𝑏 | nilai ketetapan regresi linear |
Nilai ketetapan regresi linear (a dan b) dapat diperoleh melalui persamaan II dan III.
| II |
|
| III |
|
Contoh kalibrasi sensor pH: Klik Disini
Sensor RTC ini dapat di kalibrasi dengan menggunakan kode program berikut :
#include <RTClib.h> // Memanggil pustaka RTC
RTC_DS3231 rtc; // Konstruktor
void setup() {
RTCinit(); // Memanggil metode RTCinit
}
void loop() {}
void RTCinit() {
// Memulai RTC
rtc.begin();
// Atur Waktu Sekarang
// Jika sudah di kalibrasi, silakan tutup dengan komentar
rtc.adjust(DateTime(YYYY, MM, DD, HH, MM, SS));
} |
-
Buka
Arduino IDEterlebih dahulu, kemudian buka proyek dengan cara klikFile->Open:PH_IT2FL.ino
-
Isi
Url Pengelola Papan Tambahandi Arduino IDEKlik
File->Preferences-> masukkanBoards Manager Urldengan menyalin tautan berikut :https://dl.espressif.com/dl/package_esp32_index.json
-
Pengaturan Boarddi Arduino IDECara mengatur board
DOIT ESP32 DEVKIT V1• Klik
Tools->Board->Boards Manager-> Instalesp32.• Kemudian pilih papan dengan mengklik:
Tools->Board->ESP32 Arduino->DOIT ESP32 DEVKIT V1.• Board
Arduino Unoyang ada di proyek ini hanya digunakan sebagai filter atau pembagi tegangan.• Anda tidak perlu melakukan konfigurasi pada board
Arduino Uno, cukup hanya berfokus padaESP32saja.
-
Ubah Kecepatan Papandi Arduino IDEKlik
Tools->Upload Speed->9600
-
Instal Pustakadi Arduino IDEUnduh semua file zip pustaka. Kemudian tempelkan di:
C:\Users\Computer_Username\Documents\Arduino\libraries
-
Pengaturan Portdi Arduino IDEKlik
Port-> Pilih sesuai dengan port perangkat anda(anda dapat melihatnya di Device Manager)
-
Ubah
Nama WiFi,Kata Sandi WiFi, dan sebagainya sesuai dengan apa yang anda gunakan saat ini. -
Sebelum mengunggah program, silakan klik:
Verify. -
Jika tidak ada kesalahan dalam kode program, silakan klik:
Upload. -
Beberapa hal yang perlu anda lakukan saat menggunakan
board ESP32:• Jika
board ESP32tidak dapat memprosesSource Codesecara total -> Tekan tombolEN (RST)->Restart.• Jika
board ESP32tidak dapat memprosesSource Codesecara otomatis maka :-
Ketika informasi:
Uploading...telah muncul -> segera tekan dan tahan tombolBOOT. -
Ketika informasi:
Writing at .... (%)telah muncul -> lepaskan tombolBOOT.
• Jika pesan:
Done Uploadingtelah muncul ->Program yang diisikan tadi sudah bisa dioperasikan.• Jangan tekan tombol
BOOTdanENsecara bersamaan karena hal ini bisa beralih ke modeUnggah Firmware.
-
-
Jika masih ada masalah saat unggah program, maka coba periksa pada bagian
driver/port/yang lainnya.
-
Memulai io-t.net :
• Buka situs resminya di tautan berikut : io-t.net.
• Jika anda belum memiliki akun, silakan Daftar terlebih dahulu -> aktivasi akun melalui email.
• Jika anda sudah memiliki akun, silakan Masuk untuk dapat mengakses layanan io-t.net.
-
Buat node :
• Masuk ke menu
Instance->Atur Node.• Lalu berikan nama yang unik pada node yang anda gunakan.
-
Buat device :
• Masuk ke menu
Devices.• Pilih
Tambah Devices-> isi bagianClient ID,Access,Topicsesuai dengan kebutuhan. Contohnya :-
Client ID->Phiotnet_v1. -
Access->Publish & Subscribe. -
Topic->detect.
-
-
Buka @BotFather.
-
Ketik
/newbot. -
Ketik nama bot yang diinginkan, contoh:
phiotnet_bot. -
Ketik nama pengguna bot yang diinginkan, contoh:
phiotnet_bot. -
Lakukan juga untuk pengaturan gambar bot, deskripsi bot, dan lain sebagainya menyesuaikan dengan kebutuhan anda.
-
Salin
API token bot telegram anda-> lalu tempelkan pada bagian#define BOTtoken "YOUR_API_BOT_TOKEN".Contohnya yaitu :
#define BOTtoken "2006772150:AAE6Fdjk3KbiySkzV6CLbd6ClJDzgTfJ5y0"
-
Buka
Matlab. -
Buka kotak dialog
Set Pathmenggunakan perintah :pathtool -
Pilih
Add Folder...-> cari folderFIS-IT2FLS-Toolbox-MATLAB->Select Folder. -
Klik
Savedan kemudian klikClose. -
Buka
IT2FL Toolboxmenggunakan perintah :fuzzyt2 -
Selebihnya tinggal anda atur sesuai dengan kebutuhan anda.
-
Unduh dan ekstrak repositori ini.
-
Pastikan anda memiliki komponen elektronik yang diperlukan.
-
Pastikan komponen anda telah dirancang sesuai dengan diagram.
-
Konfigurasikan perangkat anda menurut pengaturan di atas.
-
Selamat menikmati [Selesai].
Via Telegram: @phiotnet_bot
| Produk | Sistem Pendukung Keputusan (SPK) IT2FL | Bot Telegram |
|---|---|---|
![]() |
![]() |
![]() |
Informasi lebih lanjut:
|
• Skripsi : Akses 1 atau Akses 2 • Jurnal : Artikel 1 atau Artikel 2 |
-
Saran Perbaikan Hardware :
1. Catu daya pada rangkaian mikrokontroler dan aktuator itu perlu diatur ulang secara terpisah agar sistem dapat berfungsi dengan baik dan aman. 2. Gunakan PSU standar dengan kapasitas 3A untuk menyuplai beberapa perangkat yang terpasang, misalnya aktuator. 3. Tambahkan Step Down Converter untuk mendapatkan tegangan yang lebih stabil dan sesuai dengan kebutuhan perangkat. Dengan adanya komponen ini, maka tidak membutuhkan Arduino Uno. 4. Ubah pengaturan Relay Elektromekanis 2-Channel dari NO (Normally Open) menjadi NC (Normally Close) untuk mengurangi panas berlebih. 5. Tambahkan isolator pada komponen listrik untuk mencegah arus bocor. 6. Tambahkan kipas atau ventilasi untuk meningkatkan aliran udara dan mencegah panas berlebih. 7. Tambahkan Heat Sink pada komponen yang rentan panas. 8. Tambahkan MCB (Miniature Circuit Breaker) untuk mencegah arus berlebih, sehingga perangkat tetap aman dan terlindungi. 9. Tambahkan casing khusus untuk melindungi Probe Sensor pH dari kerusakan, terutama akibat benturan. 10. Pertimbangkan untuk memilih lebih dari 1 Development Board untuk meningkatkan optimalisasi sistem. 11. Pertimbangkan untuk mengganti Relay Elektromekanis 2-Channel dengan Relay SSR DD untuk memperoleh kendali yang lebih halus (tanpa noise), respon lebih cepat, konsumsi daya lebih rendah, efisiensi lebih tinggi, serta daya tahan lebih baik untuk penggunaan jangka panjang. 12. Pertimbangkan untuk mengganti kotak akrilik dengan box panel standar agar perangkat yang ada jauh lebih aman dan rapi. 13. Pertimbangkan untuk mengganti kabel sesuai dengan standar penggunaan. Untuk listrik DC, gunakan kabel AVS 1 x 0,5mm², yang lebih tahan lama dibandingkan kabel pita. Sementara itu, untuk listrik AC, gunakan kabel NYY-HY 2 x 1,5mm², karena lebih tahan terhadap air, cuaca, serta gangguan fisik seperti gigitan tikus. -
Saran Perbaikan Firmware :
1. Optimalkan algoritma untuk mengurangi latensi pada proses pengambilan keputusan. Disarankan menggunakan RTOS (Real-Time Operating System) agar dapat mengatur lebih baik prioritas fungsi yang ada. 2. Tambahkan metode OTA (Over The Air) untuk meningkatkan keamanan jaringan, termasuk Bot Telegram. 3. Tambahkan EEPROM untuk menyimpan hasil kalibrasi sensor pH secara permanen, sehingga kalibrasi tidak perlu dituliskan di method loop() lagi. Hal ini dapat menghemat waktu dan meningkatkan efisiensi perangkat. 4. Tambahkan pustaka ArduLite dan gunakan sintaksnya untuk meringankan beban ESP32, karena dapat mengurangi penggunaan memori ESP32. ArduLite ini sangat ideal untuk proyek-proyek dengan sumber daya terbatas yang mengutamakan efisiensi dan kesederhanaan. Tautan: https://github.com/ArduLite/ArduLite. -
Saran Peningkatan Fitur Otomatisasi :
1. Pompa otomatis yang diintegrasikan dengan sensor level untuk mengontrol pengisian cairan berupa pH dan AB Mix. 2. Pemberian pakan otomatis berbasis waktu untuk memberikan pakan secara terjadwal. 3. Pompa otomatis yang dikendalikan melalui bot telegram untuk mempermudah proses pengurasan dan pengisian air. 4. Pemantauan kualitas air pada kolam atau akuarium menggunakan perpaduan antara sensor pH, suhu air, dan amonia. 5. Penyinaran tanaman dengan lampu pertumbuhan untuk menumbuhkan tanaman secara optimal meski dalam kondisi yang minim cahaya (sebagai pengganti sinar matahari). -
Saran Optimalisasi Media Tanam :
1. Tingkatkan jumlah modul hidroponik agar mampu menampung lebih banyak tanaman. 2. Eksplorasi media tanam alternatif seperti arang sekam atau cocopeat untuk meningkatkan efisiensi pertumbuhan tanaman.
Jika karya ini bermanfaat bagi anda, maka dukunglah karya ini sebagai bentuk apresiasi kepada penulis dengan mengklik tombol ⭐Bintang di bagian atas repositori.
Aplikasi ini merupakan hasil karya saya sendiri dan bukan merupakan hasil plagiat dari penelitian atau karya orang lain, kecuali yang berkaitan dengan layanan pihak ketiga yang meliputi: pustaka, kerangka kerja, dan lain sebagainya.
LISENSI MIT - Hak Cipta © 2022 - Devan C. M. Wijaya, S.Kom
Dengan ini diberikan izin tanpa biaya kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait perangkat lunak untuk menggunakannya tanpa batasan, termasuk namun tidak terbatas pada hak untuk menggunakan, menyalin, memodifikasi, menggabungkan, mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak ini, dan mengizinkan orang yang menerima Perangkat Lunak ini untuk dilengkapi dengan persyaratan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus menyertai semua salinan atau bagian penting dari Perangkat Lunak.
DALAM HAL APAPUN, PENULIS ATAU PEMEGANG HAK CIPTA DI SINI TETAP MEMILIKI HAK KEPEMILIKAN PENUH. PERANGKAT LUNAK INI DISEDIAKAN SEBAGAIMANA ADANYA, TANPA JAMINAN APAPUN, BAIK TERSURAT MAUPUN TERSIRAT, OLEH KARENA ITU JIKA TERJADI KERUSAKAN, KEHILANGAN, ATAU LAINNYA YANG TIMBUL DARI PENGGUNAAN ATAU URUSAN LAIN DALAM PERANGKAT LUNAK INI, PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB, KARENA PENGGUNAAN PERANGKAT LUNAK INI TIDAK DIPAKSAKAN SAMA SEKALI, SEHINGGA RISIKO ADALAH MILIK ANDA SENDIRI.











