Jump to content

Sensor Tambak: Difference between revisions

From IoT Colabs Wiki
No edit summary
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
Deskripsi Singkat
[[File:Gambar2 - Sentinel tim.jpg|760x760px]]
 
Bagian ini menjelaskan spesifikasi dan fungsi dari komponen sensor yang digunakan dalam sistem pemantauan kualitas air tambak berbasis IoT. Integrasi sensor-sensor ini bertujuan untuk melakukan monitoring data parameter lingkungan secara ''real-time'', guna memastikan kondisi ekosistem tetap optimal.
 
Penjelasan dalam bab ini akan mencakup detail fungsional dari setiap modul sensor, yang kemudian akan dilanjutkan pada bab berikutnya mengenai perakitan, konfigurasi pengabelan (''wiring''), hingga manajemen power dan pemasangan komponen pada rangka (casing) secara menyeluruh.


== Daftar Komponen ==
== Daftar Komponen ==
Line 36: Line 40:
== Perakitan ==
== Perakitan ==


Bab ini merupakan panduan mengenai tata cara perakitan perangkat sensor di lingkungan tambak. Pembahasan mencakup rincian pengabelan (wiring), konfigurasi distribusi power (power management), hingga finalisasi penempatan komponen ke dalam rangka (casing).
=== Wiring Sensor ===
[[File:Wiring sensor.png]]
Diagram ini menunjukkan rangkaian sistem monitoring berbasis '''NodeMCU-32S (ESP32 development board)''' yang digunakan untuk membaca berbagai sensor dalam satu sistem terintegrasi.
Beberapa sensor yang digunakan antara lain BME280 untuk suhu dan kelembaban udara, DS18B20 untuk suhu air, Ultrasonic untuk ketinggian muka air, serta sensor pH, EC, dan DO untuk memantau kualitas air. Selain itu, ada juga INA219 untuk monitoring arus tegangan, dan modul LoRa 868MHz module untuk mengirim data.
Semua sensor terhubung ke ESP32 menggunakan berbagai metode komunikasi seperti I2C, SPI, UART, dan One-Wire. Data yang didapat nantinya bisa diproses, ditampilkan, atau dikirim ke sistem. Selain itu, terdapat Relay yang bisa digunakan untuk mengontrol perangkat eksternal secara otomatis.
Berikut ini adalah rincian konfigurasi wiring (pengabelan) untuk setiap komponen yang teintegrasi dalam sistem.
{| class="wikitable"
|'''Komponen'''
|'''Pin Sensor'''
|'''Pin NodeMCU (ESP32)'''
|'''Protokol'''
|-
|BME280 / INA219
|SDA / SCL
|P21 / P22
|I2C
|-
|DS18B20
|DAT
|P4
|One-Wire
|-
|pH Meter
|PH
|P35
|Analog
|-
|EC Meter
|TDS
|P32
|Analog
|-
|DO Sensor
|DO
|P34
|Analog
|-
|Ultrasonik
|TX / RX
|P16 / P17
|UART
|-
|LoRa
|NSS / SCK / MOSI / MISO
|P5 / P18 / P23 / P19
|SPI
|-
|Relay
|IN
|P13
|Digital
|}
=== Wiring Power ===
[[File:Wiring Power.png|643x643px]]
Sistem ini menggunakan konfigurasi ''Solar-Battery Integrated Circuit'' yang dirancang untuk menjaga kelangsungan operasional perangkat sensor selama 24 jam. Energi dikumpulkan melalui solar panel, distabilkan, dan disimpan ke dalam baterai sebelum didistribusikan ke beban.
==== Komponen dan Mekanisme Distribusi Daya ====
===== Input Energi (Solar Panel ke Buck-Boost) =====
* '''Fungsi:''' Solar panel menangkap energi matahari dan mengubahya menjadi tegangan DC
* '''Proses:''' Output dari panel surya masuk ke modul '''Buck-Boost Converter'''. Modul ini sangat krusial karena berfungsi menstabilkan tegangan keluaran agar tetap konstan (misalnya di 5V atau 12V) meskipun tegangan dari panel surya naik-turun akibat perubahan intensitas cahaya matahari.
===== Pengisian dan Proteksi Baterai (BMS & Baterai 18650) =====
* '''Fungsi:''' Menyimpan energi cadangan dan melindungi sel baterai.
* '''Proses:''' Tegangan yang sudah stabil dari Buck-Boost diteruskan ke modul '''BMS (Battery Management System)''' melalui terminal '''P+ dan P-'''. BMS bertugas mengatur pengisian ke '''Dudukan Baterai 18650''' (melalui terminal '''B+ dan B-''') serta mencegah terjadinya ''overcharge'' atau ''over-discharge'' yang dapat merusak baterai.
===== Monitoring Konsumsi Daya (INA219) =====
* '''Fungsi:''' Pengukuran arus dan tegangan secara ''real-time''.
* '''Proses:''' Sensor '''INA219''' dipasang secara seri pada jalur utama baterai. Jalur positif baterai masuk ke terminal '''Vin+''' dan keluar melalui '''Vin-'''. Hal ini memungkinkan mikrokontroler memantau berapa besar energi yang tersisa di baterai serta berapa arus yang sedang dikonsumsi oleh sistem.
===== Regulasi Beban Tegangan (Step Down USB) =====
* '''Fungsi:''' Menyesuaikan tegangan untuk mikrokontroler.
* '''Proses:''' Keluaran akhir dari sistem distribusi ini masuk ke modul '''Step Down (USB)'''. Modul ini menurunkan tegangan baterai ke level aman (5V DC) yang stabil untuk menyuplai daya ke NodeMCU/ESP32 melalui port USB atau pin power.
Berikut ini adalah penjelasan mengenai koneksi kabel.
{| class="wikitable"
|'''Dari Komponen'''
|'''Ke Komponen'''
|'''Jalur Kabel'''
|'''Deskripsi Fungsi'''
|-
|'''Solar Panel'''
|'''Buck-Boost'''
|Merah (+) / Hitam (-)
|Input sumber energi utama
|-
|'''Buck-Boost'''
|'''BMS (P+/P-)'''
|Merah (+) / Hitam (-)
|Supply daya ter-regulasi ke sistem pengisian.
|-
|'''BMS (B+/B-)'''
|'''Baterai 18650'''
|Merah (+) / Hitam (-)
|Jalur pengisian dan pengambilan daya baterai.
|-
|'''Baterai (+)'''
|'''INA219 (Vin+)'''
|Kuning / Merah
|Jalur monitoring arus keluar-masuk.
|-
|'''BMS (P+/P-)'''
|'''Step Down USB'''
|Merah (+) / Hitam (-)
|Jalur distribusi daya menuju beban akhir.
|}
=== Langkah Perakitan ===
[[File:Gambar 4 - Langkah perakitan.jpg|823x823px]]
=== Pemasangan Modul Sensor ke PCB ===
Gambar berikut menunjukkan langkah-langkah pemasangan modul sensor ke PCB custom:<gallery mode="nolines" widths="250" heights="250">
File:Pemasangan ESP32.png
File:Pemasangan LoRa.png
File:Pemasangan INA219.png
File:Pemasangan Kabel Sensor Temperatur Air.png
File:Pemasangan Modul Dissolve Oxygen.png
File:Pemasangan Probe Dissolved Oxygen.png
</gallery>
* Pasang ESP32 pada PCB
* Pasang modul INA219 (monitoring power)
* Pasang modul LoRa
* Pasang sensor:
# pH
# Dissolved Oxygen (DO)
# Salinitas
* Hubungkan probe ke masing-masing sensor
* Sambungkan kabel sensor temperatur dan ultrasonic
* Lakukan wiring power sesuai diagram
* Masukkan semua komponen ke dalam casing
* Pastikan semua koneksi kuat dan tidak longgar
=== Pemasangan Komponen ke Box ===
<gallery widths="300" heights="300">
File:Gambar 4 - Langkah perakitan.jpg|Kebutuhan komponen untuk sensor tambak
File:Gambar5 - Pemasangan komponen ke box.jpg|Pemasangan komponen sensor ke dalam box
File:Gambar5 - Pemasangan baterai.jpg|Pemasangan managemen power (baterai) ke dalam box
File:Gambar5 - Pemasangan probe sensor ke evafoam.jpg|Pemasangan probe sensor ke evafoam
File:Gambar5 - Pemasang sensor tamak di jembatan.jpg|Pemasangan sensor tambak (Sentinel) di tiang jembatan
</gallery>
=== Validasi Sistem dan Konfigurasi Perangkat ===
==== Prosedur Pengujian Fisik (Post-Assembly Check) ====
Setelah proses perakitan selesai, langkah berikutnya adalah melakukan validasi sistem. Hal ini bertujuan untuk memastikan keamanan komponen sebelum diberikan tegangan listrik. Pengecekan meliputi poin-poin berikut:
* '''Verifikasi Status Daya:''' Memastikan LED indikator pada seluruh modul aktif saat sistem dihidupkan.
* '''Verifikasi Jalur Kabel:''' Melakukan inspeksi visual dan teknis untuk memastikan tidak ada koneksi yang longgaratau hubungan arus pendek (''short circuit'').
* '''Stabilitas Tegangan:''' Mengukur dan memastikan output tegangan pada titik-titik kritis telah stabil dan sesuai dengan spesifikasi teknis komponen.
<blockquote>'''Catatan:''' Panduan mengenai prosedur pengecekan dan troubeshooting dapat diakses secara lengkap pada halaman '''[[Perawatan dan Troubleshooting|[Perawatan dan Troubleshooting]]]'''.</blockquote>


==== Persiapan Perangkat Lunak (Firmware Deployment) ====
Setelah validasi fisik dinyatakan berhasil, langkah selanjutnya adalah pengunggahan kode (''upload code''). Namun, sebelum melakukan pengunggahan, pastikan kebutuhan deployment telah siap dengan melakukan:


# '''Instalasi Arduino IDE:''' Sebagai platform utama pengembangan ''firmware''.
# '''Konfigurasi Library:''' Menambahkan seluruh library yang diperlukan oleh sensor.
<blockquote>'''Catatan:''' Panduan langkah-langkah mengenai prosedur instalasi perangkat lunak dan library dapat diakses secara lengkap pada halaman '''[Software - Instalasi Arduino]'''.</blockquote>


== Pemrograman (Source Code) ==
== Pemrograman (Source Code) ==
Line 99: Line 276:
// Ultrasonic RS485 A01ANY4B  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Ultrasonic RS485 A01ANY4B  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


<nowiki>#</nowiki>define MAX485_DE 26
#define MAX485_DE 26


<nowiki>#</nowiki>define MAX485_RE_NEG 25  
#define MAX485_RE_NEG 25  


<nowiki>#</nowiki>define RXD2 16
#define RXD2 16


<nowiki>#</nowiki>define TXD2 17  
#define TXD2 17  


ModbusMaster node485;  
ModbusMaster node485;  
Line 162: Line 339:
//BME280  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//BME280  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


<nowiki>#</nowiki>define SEALEVELPRESSURE_HPA (1013.25)
#define SEALEVELPRESSURE_HPA (1013.25)


Adafruit_BME280 bme;  //  I2C
Adafruit_BME280 bme;  //  I2C
Line 374: Line 551:
//DO Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//DO Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


<nowiki>#</nowiki>define DO_PIN 25
#define DO_PIN 25




<nowiki>#</nowiki>define VREF 3300     //VREF (mv)
#define VREF 3300     //VREF (mv)


<nowiki>#</nowiki>define ADC_RES 4095  //ADC Resolution
#define ADC_RES 4095  //ADC Resolution




Line 386: Line 563:
//Two-point calibration Mode=1
//Two-point calibration Mode=1


<nowiki>#</nowiki>define TWO_POINT_CALIBRATION 0
#define TWO_POINT_CALIBRATION 0




<nowiki>#</nowiki>define READ_TEMP (25)  //Current  water temperature ℃, Or temperature sensor function
#define READ_TEMP (25)  //Current  water temperature ℃, Or temperature sensor function




//Single point calibration needs to be filled CAL1_V and  CAL1_T
//Single point calibration needs to be filled CAL1_V and  CAL1_T


<nowiki>#</nowiki>define CAL1_V (269)  //mv
#define CAL1_V (269)  //mv


<nowiki>#</nowiki>define CAL1_T (25)    //℃
#define CAL1_T (25)    //℃


//Two-point calibration needs to be filled CAL2_V and CAL2_T
//Two-point calibration needs to be filled CAL2_V and CAL2_T
Line 402: Line 579:
//CAL1 High temperature point, CAL2 Low temperature point
//CAL1 High temperature point, CAL2 Low temperature point


<nowiki>#</nowiki>define CAL2_V (1300)  //mv
#define CAL2_V (1300)  //mv


<nowiki>#</nowiki>define CAL2_T (15)    //℃
#define CAL2_T (15)    //℃




Line 431: Line 608:
int16_t readDO(uint32_t voltage_mv, uint8_t temperature_c) {
int16_t readDO(uint32_t voltage_mv, uint8_t temperature_c) {


<nowiki>#</nowiki>if TWO_POINT_CALIBRATION == 00
#if TWO_POINT_CALIBRATION == 00


uint16_t V_saturation = (uint32_t)CAL1_V + (uint32_t)35 * temperature_c - (uint32_t)CAL1_T * 35;
uint16_t V_saturation = (uint32_t)CAL1_V + (uint32_t)35 * temperature_c - (uint32_t)CAL1_T * 35;
Line 437: Line 614:
return (voltage_mv * DO_Table[temperature_c] /  V_saturation);
return (voltage_mv * DO_Table[temperature_c] /  V_saturation);


<nowiki>#</nowiki>else
#else


uint16_t V_saturation = (int16_t)((int8_t)temperature_c - CAL2_T) * ((uint16_t)CAL1_V - CAL2_V) / ((uint8_t)CAL1_T - CAL2_T) + CAL2_V;
uint16_t V_saturation = (int16_t)((int8_t)temperature_c - CAL2_T) * ((uint16_t)CAL1_V - CAL2_V) / ((uint8_t)CAL1_T - CAL2_T) + CAL2_V;
Line 443: Line 620:
return (voltage_mv * DO_Table[temperature_c] /  V_saturation);
return (voltage_mv * DO_Table[temperature_c] /  V_saturation);


<nowiki>#</nowiki>endif
#endif


}
}
Line 765: Line 942:


}
}
Serial.println(millis() - startTime);


*/
</syntaxhighlight>
</syntaxhighlight>


Line 772: Line 951:


<syntaxhighlight lang="cpp" style="max-height:300px; overflow:auto;">
<syntaxhighlight lang="cpp" style="max-height:300px; overflow:auto;">
Serial.println(millis() - startTime);
<nowiki>*</nowiki>/
//DS18B20  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//DS18B20  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Line 904: Line 1,078:


}
}
}</syntaxhighlight>
Implementasi kode lengkap di atas menunjukkan integrasi sistem ''monitoring'' kualitas air laut. Sistem ini mampu beroperasi secara mandiri dengan ''cycle'' pembacaan sensor, transmisi data LoRa, dan power management yang optimal untuk deployment jangka panjang di lingkungan laut. ''Source code'' lengkap dan dokumentasi tambahan dapat diakses melalui ''repository'' GitHub di: https://github.com/insaninfonesia/Co_LABS.
== Konfigurasi dan Kalibrasi ==
Kalibrasi adalah langkah untuk memastikan data yang dihasilkan akurat dan dapat diandalkan. Tanpa kalibrasi rutin, penyimpangan nilai dapat menyebabkan kesalahan dalam pengambilan keputusan.
=== Jadwal Rekomendasi Kalibrasi ===
{| class="wikitable"
|'''Jenis Sensor'''
|'''Frekuensi Kalibrasi'''
|'''Tingkat Prioritas'''
|-
|'''pH & Dissolved Oxygen'''
|1 - 2 Minggu sekali
|Tinggi (Sangat Sensitif)
|-
|'''Salinitas (EC Meter)'''
|1 Bulan sekali
|Sedang
|-
|'''DS18B20 & DHT22'''
|6 Bulan sekali
|Rendah (Cukup Stabil)
|-
|'''BME280'''
|6 - 12 Bulan sekali
|Rendah (Pabrikan)
|}
=== Prosedur Kalibrasi Per Sensor ===
==== Sensor pH (DFRobot Analog V2) ====
Sensor ini bekerja berdasarkan prinsip beda potensial. Elektroda pH sangat sensitif terhadap perubahan suhu dan usia pemakaian.
# '''Peralatan:''' Larutan penyangga (''Buffer Solution'') pH 4.0, pH 7.0, dan pH 10.0, gelas kimia, air distilasi (aquades).
# '''Persiapan:''' Bersihkan ujung ''probe'' dengan aquades dan keringkan perlahan dengan tisu (jangan digosok).
# '''Langkah:''' Celupkan ke larutan pH 7.0 (netral) sebagai titik nol, kemudian lakukan kalibrasi dua titik dengan pH 4.0 atau 10.0 melalui ''code'' atau memutar potensiometer pada modul.
<blockquote>'''Catatan:''' Hasil dari keluaran sensor setelah dilakukan kalibrasi 2 titik, dicatat ke dalam excel dan hasil tersebut nanti dihitung dengan rumus regresi. Rumus tersebut nantinya akan dimasukkan ke dalam code bagian sensor pH.</blockquote>
[[File:Regresi pH pada saat kalibrasi.png|none|thumb|581x581px|Contoh: Regresi pH pada saat kalibrasi dua titik]]
===== Penyesuaian pada Program =====
Contoh penyesuaian code pada sensor pH setelah kalibrasi
<syntaxhighlight lang="cpp" style="max-height:300px; overflow:auto;">
#define pinProbe 33 ;
void setup()
{
   Serial.begin(115200);
}
void loop()
{
   int ADC = 0;
   float meanADC;
   for(int i=0; i<800; i++){
       ADC += analogRead(pinProbe);               
   }
   meanADC = ADC/800;
   Serial.println("meanADC:" + String(meanADC));
   delay(1000);


}
}
</syntaxhighlight>
==== Sensor Dissolved Oxygen (DO) ====
Kalibrasi diperlukan untuk memastikan pembacaan kadar oksigen terlarut (mg/L) akurat, terutama setelah perawatan probe, penggantian membran, atau penggantian larutan elektrolit.
Sensor DO DFRobot biasanya bertipe galvanik yang membutuhkan proses polarisasi.
* '''Peralatan:''' Larutan NaOH (0 mg/L atau ''Zero-oxygen solution'') dan air yang diaerasi penuh (100% saturasi).
* '''Persiapan:''' Rendam ''probe'' di air selama 5-10 menit sebelum mulai.
* '''Langkah:''' 1. Celupkan ke larutan ''zero-oxygen'' hingga nilai stabil di angka 0. 2. Angkat ke udara terbuka (atau air jenuh oksigen) untuk menetapkan titik saturasi 100%.
===== Penyesuaian pada Program =====
Gunakan nilai tegangan hasil kalibrasi untuk menggantikan parameter kalibrasi pada kode.
Contoh:
<syntaxhighlight lang="cpp" style="max-height:300px; overflow:auto;">
#include <Arduino.h>


</syntaxhighlight>
#define VREF    3300//VREF(mv)
#define ADC_RES 4096//ADC Resolution


uint32_t raw;


Implementasi kode lengkap di atas menunjukkan integrasi sistem ''monitoring'' kualitas air laut. Sistem ini mampu beroperasi secara mandiri dengan ''cycle'' pembacaan sensor, transmisi data LoRa, dan power management yang optimal untuk deployment jangka panjang di lingkungan laut. ''Source code'' lengkap dan dokumentasi tambahan dapat diakses melalui ''repository'' GitHub di: https://github.com/insaninfonesia/Co_LABS.
void setup()
{
    Serial.begin(115200);
}


== Konfigurasi dan Kalibrasi ==
void loop()
{
    raw=analogRead(A1);
    Serial.println("raw:\t"+String(raw)+"\tVoltage(mv)"+String(raw*VREF/ADC_RES));
    delay(1000);
}
</syntaxhighlight>


==== Sensor Salinitas (EC Meter K=10) ====
Kalibrasi dilakukan untuk memastikan pembacaan konduktivitas (EC dalam mS/cm) tetap akurat, terutama setelah penggunaan intensif, pembersihan elektroda, atau ketika hasil pembacaan tidak konsisten.


* '''Peralatan:''' Larutan standar konduktivitas (misal: 12.88ms/cm atau 50ms/cm sesuai salinitas air laut).
* '''Persiapan:''' Pastikan tidak ada gelembung udara yang menempel pada permukaan elektroda saat pencelupan.
* '''Langkah:''' Celupkan sensor ke larutan standar, bandingkan pembacaan di ''Serial Monitor'' dengan nilai pada botol larutan, lalu sesuaikan nilai ''K-Factor'' pada kode program
[[File:Regresi Sensor Salinitas.png|none|thumb|549x549px|Contoh: Regresi nilai salinitas hasil kalibrasi]]


===== Penyesuaian pada Program =====
Gunakan nilai hasil kalibrasi untuk menentukan faktor konversi dari ADC ke nilai salinitas.
<syntaxhighlight lang="cpp" style="max-height:300px; overflow:auto;">
#define pinProbe 32 ;
void setup()
{
    Serial.begin(115200);
}
void loop()
{
    int ADC = 0;
    float meanADC;
    for(int i=0; i<800; i++){
        ADC += analogRead(pinProbe);               
    }
    meanADC = ADC/800;
    Serial.println("meanADC:" + String(meanADC));
    delay(1000);
}
</syntaxhighlight>


==== Sensor Temperatur (DS18B20) ====
Sensor ini umumnya sudah dikalibrasi di pabrik (''factory calibrated'').


* '''Peralatan:''' Termometer referensi standar (termometer air raksa atau digital yang tersertifikasi).
* '''Persiapan:''' Siapkan wadah berisi air dengan suhu stabil (suhu ruang).
* '''Langkah:''' Celupkan DS18B20 dan termometer referensi secara bersamaan. Jika terdapat selisih (misal 0.5°C), tambahkan nilai ''offset'' tersebut pada variabel di kode program: <code>temp_fix = read_temp + offset</code>.




[[Table of Contents|< Kembali ke halaman awal]]> | [[Sensor Laut|<Kembali ke halaman sebelumnya>]] | [[Sensor Tambak|Ke halaman berikutnya >]]
'''[[Table of Contents|< Kembali ke halaman awal>]] | [[Sensor Laut|<Kembali ke halaman sebelumnya>]] | [[Software|<Ke halaman berikutnya >]]'''

Latest revision as of 02:35, 27 April 2026

Bagian ini menjelaskan spesifikasi dan fungsi dari komponen sensor yang digunakan dalam sistem pemantauan kualitas air tambak berbasis IoT. Integrasi sensor-sensor ini bertujuan untuk melakukan monitoring data parameter lingkungan secara real-time, guna memastikan kondisi ekosistem tetap optimal.

Penjelasan dalam bab ini akan mencakup detail fungsional dari setiap modul sensor, yang kemudian akan dilanjutkan pada bab berikutnya mengenai perakitan, konfigurasi pengabelan (wiring), hingga manajemen power dan pemasangan komponen pada rangka (casing) secara menyeluruh.

Daftar Komponen

Daftar Komponen yang digunakan pada sensor tambak ini adalah sebagai berikut:

Board dan Mikrokontroler

  • Board PCB Custom: Board yang berfungsi untuk memfasilitasi integrasi berbagai sensor.
  • ESP 32: Mikrokontroler yang mengelola pembacaan data dari sensor.

Part Sensor

  • Sensor pH (DFRobot Analog pH Sensor/Meter Kit V2): Sensor yang berfungsi untuk mengukur tingkat keasaman atau kebasaan (pH) air.
  • Sensor Disolve Oxygen (DFRobot Analog Dissolved Oxygen Sensor): Sensor yang berfungsi untuk mengukur kadar oksigen terlarut (DO – Dissolved Oxygen) dalam air.
  • Sensor Salinitas (DFRobot Analog Electrical Conductivity (EC) Sensor / Meter (K=10)): Sensor yang berfungsi untuk mengukur tingkat konduktivitas listrik dalam air.
  • Sensor Tinggi Muka Air (A01NYUB V2 Ultrasonic Waterproof Sensor): Sensor yang berfungsi untnuk mengukur tinggi muka air.
  • Sensor Temperatur Air (DS18B20): Sensor yang berfungsi untuk mengukur temperatur air.
  • Sensor Temperatur Udara dan Kelembaban (DHT 22): Sensor yang berfungsi untuk mengukur temperatur dan kelembaban udara.
  • Sensor Temperatur, kelembaban dan tekanan udara (BME 280): Sensor yang berfungsi untuk mengukur temperatur, kelembaban dan tekanan udara.

Power

  • Relay: Modul saklar elektronik.
  • Voltage Meter: Modul sensor yang berfungsi mengukur tegangan, arus, dan daya pada suatu rangkaian.
  • Step Down: Modul konversi tegangan yang mengubah input DC 6–24V menjadi output stabil 5V hingga 3A.
  • Buck Boost: XL6009 Auto Boost Buck Adjustable digunakan untuk menaikkan (step up) atau menurunkan (step down) tegangan secara otomatis, dengan input 5–32V DC dan output 1.2–35V DC yang stabil meski tegangan input berubah.
  • Baterai: Baterai 18650 digunakan pada power bank, senter, laptop, e-bike, dan proyek elektronik karena kepadatan energi tinggi, umur pakai panjang, serta kemampuan menyediakan arus besar.
  • Solar Panel: Solar panel 10Wp digunakan untuk mengisi baterai kecil, sistem penerangan, atau proyek IoT bertenaga surya. Memiliki ukuran compact, efisiensi tinggi, dan tahan terhadap cuaca luar ruangan.
  • BMS: BMS (Battery Management System) 2S 8A berfungsi untuk menjaga kinerja dan memperpanjang umur baterai hingga lebih dari 30.000 jam.

Perakitan

Bab ini merupakan panduan mengenai tata cara perakitan perangkat sensor di lingkungan tambak. Pembahasan mencakup rincian pengabelan (wiring), konfigurasi distribusi power (power management), hingga finalisasi penempatan komponen ke dalam rangka (casing).

Wiring Sensor


Diagram ini menunjukkan rangkaian sistem monitoring berbasis NodeMCU-32S (ESP32 development board) yang digunakan untuk membaca berbagai sensor dalam satu sistem terintegrasi.

Beberapa sensor yang digunakan antara lain BME280 untuk suhu dan kelembaban udara, DS18B20 untuk suhu air, Ultrasonic untuk ketinggian muka air, serta sensor pH, EC, dan DO untuk memantau kualitas air. Selain itu, ada juga INA219 untuk monitoring arus tegangan, dan modul LoRa 868MHz module untuk mengirim data.

Semua sensor terhubung ke ESP32 menggunakan berbagai metode komunikasi seperti I2C, SPI, UART, dan One-Wire. Data yang didapat nantinya bisa diproses, ditampilkan, atau dikirim ke sistem. Selain itu, terdapat Relay yang bisa digunakan untuk mengontrol perangkat eksternal secara otomatis.

Berikut ini adalah rincian konfigurasi wiring (pengabelan) untuk setiap komponen yang teintegrasi dalam sistem.

Komponen Pin Sensor Pin NodeMCU (ESP32) Protokol
BME280 / INA219 SDA / SCL P21 / P22 I2C
DS18B20 DAT P4 One-Wire
pH Meter PH P35 Analog
EC Meter TDS P32 Analog
DO Sensor DO P34 Analog
Ultrasonik TX / RX P16 / P17 UART
LoRa NSS / SCK / MOSI / MISO P5 / P18 / P23 / P19 SPI
Relay IN P13 Digital

Wiring Power

Sistem ini menggunakan konfigurasi Solar-Battery Integrated Circuit yang dirancang untuk menjaga kelangsungan operasional perangkat sensor selama 24 jam. Energi dikumpulkan melalui solar panel, distabilkan, dan disimpan ke dalam baterai sebelum didistribusikan ke beban.

Komponen dan Mekanisme Distribusi Daya

Input Energi (Solar Panel ke Buck-Boost)
  • Fungsi: Solar panel menangkap energi matahari dan mengubahya menjadi tegangan DC
  • Proses: Output dari panel surya masuk ke modul Buck-Boost Converter. Modul ini sangat krusial karena berfungsi menstabilkan tegangan keluaran agar tetap konstan (misalnya di 5V atau 12V) meskipun tegangan dari panel surya naik-turun akibat perubahan intensitas cahaya matahari.
Pengisian dan Proteksi Baterai (BMS & Baterai 18650)
  • Fungsi: Menyimpan energi cadangan dan melindungi sel baterai.
  • Proses: Tegangan yang sudah stabil dari Buck-Boost diteruskan ke modul BMS (Battery Management System) melalui terminal P+ dan P-. BMS bertugas mengatur pengisian ke Dudukan Baterai 18650 (melalui terminal B+ dan B-) serta mencegah terjadinya overcharge atau over-discharge yang dapat merusak baterai.
Monitoring Konsumsi Daya (INA219)
  • Fungsi: Pengukuran arus dan tegangan secara real-time.
  • Proses: Sensor INA219 dipasang secara seri pada jalur utama baterai. Jalur positif baterai masuk ke terminal Vin+ dan keluar melalui Vin-. Hal ini memungkinkan mikrokontroler memantau berapa besar energi yang tersisa di baterai serta berapa arus yang sedang dikonsumsi oleh sistem.
Regulasi Beban Tegangan (Step Down USB)
  • Fungsi: Menyesuaikan tegangan untuk mikrokontroler.
  • Proses: Keluaran akhir dari sistem distribusi ini masuk ke modul Step Down (USB). Modul ini menurunkan tegangan baterai ke level aman (5V DC) yang stabil untuk menyuplai daya ke NodeMCU/ESP32 melalui port USB atau pin power.

Berikut ini adalah penjelasan mengenai koneksi kabel.

Dari Komponen Ke Komponen Jalur Kabel Deskripsi Fungsi
Solar Panel Buck-Boost Merah (+) / Hitam (-) Input sumber energi utama
Buck-Boost BMS (P+/P-) Merah (+) / Hitam (-) Supply daya ter-regulasi ke sistem pengisian.
BMS (B+/B-) Baterai 18650 Merah (+) / Hitam (-) Jalur pengisian dan pengambilan daya baterai.
Baterai (+) INA219 (Vin+) Kuning / Merah Jalur monitoring arus keluar-masuk.
BMS (P+/P-) Step Down USB Merah (+) / Hitam (-) Jalur distribusi daya menuju beban akhir.

Langkah Perakitan

Pemasangan Modul Sensor ke PCB

Gambar berikut menunjukkan langkah-langkah pemasangan modul sensor ke PCB custom:

  • Pasang ESP32 pada PCB
  • Pasang modul INA219 (monitoring power)
  • Pasang modul LoRa
  • Pasang sensor:
  1. pH
  2. Dissolved Oxygen (DO)
  3. Salinitas
  • Hubungkan probe ke masing-masing sensor
  • Sambungkan kabel sensor temperatur dan ultrasonic
  • Lakukan wiring power sesuai diagram
  • Masukkan semua komponen ke dalam casing
  • Pastikan semua koneksi kuat dan tidak longgar

Pemasangan Komponen ke Box

Validasi Sistem dan Konfigurasi Perangkat

Prosedur Pengujian Fisik (Post-Assembly Check)

Setelah proses perakitan selesai, langkah berikutnya adalah melakukan validasi sistem. Hal ini bertujuan untuk memastikan keamanan komponen sebelum diberikan tegangan listrik. Pengecekan meliputi poin-poin berikut:

  • Verifikasi Status Daya: Memastikan LED indikator pada seluruh modul aktif saat sistem dihidupkan.
  • Verifikasi Jalur Kabel: Melakukan inspeksi visual dan teknis untuk memastikan tidak ada koneksi yang longgaratau hubungan arus pendek (short circuit).
  • Stabilitas Tegangan: Mengukur dan memastikan output tegangan pada titik-titik kritis telah stabil dan sesuai dengan spesifikasi teknis komponen.

Catatan: Panduan mengenai prosedur pengecekan dan troubeshooting dapat diakses secara lengkap pada halaman [Perawatan dan Troubleshooting].

Persiapan Perangkat Lunak (Firmware Deployment)

Setelah validasi fisik dinyatakan berhasil, langkah selanjutnya adalah pengunggahan kode (upload code). Namun, sebelum melakukan pengunggahan, pastikan kebutuhan deployment telah siap dengan melakukan:

  1. Instalasi Arduino IDE: Sebagai platform utama pengembangan firmware.
  2. Konfigurasi Library: Menambahkan seluruh library yang diperlukan oleh sensor.

Catatan: Panduan langkah-langkah mengenai prosedur instalasi perangkat lunak dan library dapat diakses secara lengkap pada halaman [Software - Instalasi Arduino].

Pemrograman (Source Code)

Tahap pertama dalam memulai programming utama adalah menyiapkan initial code yang mencakup seluruh library yang diperlukan untuk komunikasi sensor dan transmisi data. Berikut adalah code program yang digunakan.

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_INA219.h>

#include <SoftwareSerial.h>

#include <DHT.h>

#include <Adafruit_BME280.h>

#include <OneWire.h>

#include <DallasTemperature.h>  //DS18B20

#include <SPI.h>

#include <LoRa.h>

Sensor DHT 22

Konfigurasi sensor DHT22 dimulai dengan mendefinisikan pin koneksi dan tipe sensor yang digunakan untuk pengukuran suhu dan kelembaban udara. fungsi setDHT() untuk akuisisi data, dan printDHT() untuk menampilkan hasil. Berikut adalah code program yang digunakan.

//DHT22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#define DHTPIN 27         // what pin we're connected to
#define DHTTYPE DHT22     // DHT 22 (AM2302)

DHT dht(DHTPIN, DHTTYPE);

float dhtTemperature = 0;
float dhtHumidity = 0;

void setDHT() {
  dhtHumidity = dht.readHumidity();
  dhtTemperature = dht.readTemperature();
}

void printDHT() {
  Serial.print("Humidity = ");
  Serial.print(dhtHumidity);
  Serial.print("Temperature = ");
  Serial.print(dhtTemperature);
  Serial.println("ºC");
}

Sensor Tinggi Muka Air (Ultrasonic RS485 A01ANY4B)

Konfigurasi sensor DHT22 dimulai dengan mendefinisikan pin koneksi dan tipe sensor yang digunakan untuk pengukuran tinggi muka air. Berikut adalah code program yang digunakan.

// Ultrasonic RS485 A01ANY4B  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#define MAX485_DE 26

#define MAX485_RE_NEG 25 

#define RXD2 16

#define TXD2 17 

ModbusMaster node485; 

float distance = 0; 

void preTransmission() {

digitalWrite(MAX485_RE_NEG, 1);

digitalWrite(MAX485_DE, 1);

} 

void postTransmission() {

digitalWrite(MAX485_RE_NEG, 0);

digitalWrite(MAX485_DE, 0);

}

void setDistance() {

  uint8_t result =  node485.readHoldingRegisters(257, 1);   // Read one register

  delay(100);

  if (result ==  node485.ku8MBSuccess) {

   int jarak =  node485.getResponseBuffer(0);  // First  buffer index holds the temperature

   distance = 200.0 -  jarak / 10.0;

  }

}

void printDistance() {

Serial.print("Distance = ");

Serial.print(distance);

  Serial.println("  cm");

}

Sensor BME 280

Sensor BME280 dikonfigurasi untuk mengukur empat parameter lingkungan sekaligus: suhu, tekanan barometrik, kelembaban, dan estimasi ketinggian berdasarkan tekanan permukaan laut standar. Berikut adalah code program yang digunakan.

//BME280  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme;  //  I2C

float bmeTemperature;

float bmePressure;

float bmeHumidity;

float bmeAltitude;


void setBMEValues() {

  try {

   bmeTemperature =  bme.readTemperature();                 //Celcius

   bmePressure =  bme.readPressure() / 100.0F;              // hPa

   bmeHumidity =  bme.readHumidity();                       // %

   bmeAltitude =  bme.readAltitude(SEALEVELPRESSURE_HPA);   // meter

  } catch (String error)  {

    Serial.println("Error BME: " + error);

  }

}

void printBMEValues() {

Serial.print("Temperature = ");

Serial.print(bmeTemperature);

  Serial.println("  *C");


Serial.print("Pressure = ");

Serial.print(bmePressure);

  Serial.println("  hPa");


Serial.print("Approx. Altitude = ");

Serial.print(bmeAltitude);

  Serial.println("  m");


Serial.print("Humidity = ");

Serial.print(bmeHumidity);

  Serial.println("  %");


  Serial.println();

}

Sensor suhu air (DS18B20)

Sensor suhu air DS18B20 diimplementasikan dengan protokol OneWire pada GPIO 4, memberikan measurement yang waterproof dan ideal untuk aplikasi monitoring kualitas air laut. Berikut adalah code program yang digunakan.

//DS18B20  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// GPIO where the DS18B20 is connected to

const int waterTemperaturePin = 4;

// Setup a oneWire instance to communicate with any OneWire  devices

OneWire oneWire(waterTemperaturePin);

// Pass our oneWire reference to Dallas Temperature sensor

DallasTemperature sensors(&oneWire);


float waterTemperature = 0;


void setWaterTemperature() {

sensors.requestTemperatures();

waterTemperature = sensors.getTempCByIndex(0);

}


void printWaterTemperature() {

Serial.print("Water Temperature  = ");

Serial.print(waterTemperature);

Serial.println("ºC");

}

Sensor pH (DFRobot: Analog pH Sensor/Meter Kit V2)

Pengukuran pH dilakukan melalui pembacaan analog pada pin 33 dengan metode nilai yang didapat setelah dilakukan kalibrasi untuk mendapatkan nilai pH yang stabil dan akurat. Berikut adalah code program yang digunakan.

//pHSensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

const int PH_PIN = 33;

float ph;

float PH_ADC_RAW = 0;


void setPH() {

for (int i = 0; i < 800; i++) {

  PH_ADC_RAW += analogRead(PH_PIN);

}

PH_ADC_RAW /= 800;

//Serial.println(PH_ADC_RAW);

ph = 15.5942 - 0.0051167 * PH_ADC_RAW;

//ph = -0.2668 *  PH_ADC_RAW + 519.93;

}

void printPH() {

Serial.print("PH_ADC_RAW =  ");

Serial.println(PH_ADC_RAW);

Serial.print("pH = ");

Serial.println(ph);

}

Sensor Salinitas (DFRobot : Analog Electrical Conductivity Sensor / Meter (K=10))

Pengukuran nilai salinitas air menggunakan sensor TDS yang terhubung ke pin 32 pada papan mikrokontroler. Kode ini berfungsi untuk mengambil data analog dari sensor, kemudian mengolahnya menjadi nilai salinitas yang dapat ditampilkan melalui serial monitor. Berikut adalah code program yang digunakan.

//TDS Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

const int TDS_PIN = 32;

float salinity;

float TDS_ADC_RAW = 0;


void setSalinity() {

for (int i = 0; i < 800; i++) {

  TDS_ADC_RAW += analogRead(TDS_PIN);

}

TDS_ADC_RAW /= 800;

//Serial.println(TDS_ADC_RAW);

//salinity = 1E-06 *  TDS_ADC_RAW * TDS_ADC_RAW + 0.0266 * TDS_ADC_RAW + 0.9853;

//salinity = 0.1294 *  TDS_ADC_RAW + 21.266 ;

salinity = 0.0176 * TDS_ADC_RAW - 6.9707;

}


void printSalinitas() {

Serial.print("TDS_ADC_RAW =  ");

Serial.println(TDS_ADC_RAW);

Serial.print("Salinitas = ");

Serial.println(salinity);

}

Sensor Dissolved Oxygen (DFRobot Analog Dissolved Oxygen Sensor)

Kadar oksigen terlarut (Dissolved Oxygen/DO) di dalam air menggunakan sensor DO yang terhubung ke pin 25 pada papan mikrokontroler. Sensor ini bekerja dengan mengubah kadar oksigen yang terlarut menjadi sinyal listrik berupa tegangan. Nilai tegangan tersebut kemudian dibaca oleh mikrokontroler dan diolah menggunakan tabel serta rumus kalibrasi, sehingga dapat ditampilkan sebagai data oksigen terlarut yang lebih mudah dipahami. Berikut adalah code program yang digunakan.

//DO Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#define DO_PIN 25


#define VREF 3300     //VREF (mv)

#define ADC_RES 4095  //ADC Resolution


//Single-point calibration Mode=0

//Two-point calibration Mode=1

#define TWO_POINT_CALIBRATION 0


#define READ_TEMP (25)  //Current  water temperature ℃, Or temperature sensor function


//Single point calibration needs to be filled CAL1_V and  CAL1_T

#define CAL1_V (269)  //mv

#define CAL1_T (25)    //℃

//Two-point calibration needs to be filled CAL2_V and CAL2_T

//CAL1 High temperature point, CAL2 Low temperature point

#define CAL2_V (1300)  //mv

#define CAL2_T (15)    //℃


const uint16_t DO_Table[41] = {

14460, 14220, 13820, 13440, 13090, 12740, 12420, 12110, 11810, 11530,

11260, 11010, 10770, 10530, 10300, 10080, 9860, 9660, 9460, 9270,

9080, 8900, 8730, 8570, 8410, 8250, 8110, 7960, 7820, 7690,

7560, 7430, 7300, 7180, 7070, 6950, 6840, 6730, 6630, 6530, 6410

};


uint8_t Temperaturet;

uint16_t DO_ADC_RAW;

uint16_t DO_ADC_Voltage;

uint16_t DO;


int16_t readDO(uint32_t voltage_mv, uint8_t temperature_c) {

#if TWO_POINT_CALIBRATION == 00

uint16_t V_saturation = (uint32_t)CAL1_V + (uint32_t)35 * temperature_c - (uint32_t)CAL1_T * 35;

return (voltage_mv * DO_Table[temperature_c] /  V_saturation);

#else

uint16_t V_saturation = (int16_t)((int8_t)temperature_c - CAL2_T) * ((uint16_t)CAL1_V - CAL2_V) / ((uint8_t)CAL1_T - CAL2_T) + CAL2_V;

return (voltage_mv * DO_Table[temperature_c] /  V_saturation);

#endif

}


void setDO() {

Temperaturet = (uint8_t)READ_TEMP;

DO_ADC_RAW = analogRead(DO_PIN);

DO_ADC_Voltage = uint32_t(VREF) * DO_ADC_RAW / ADC_RES;


DO = readDO(DO_ADC_Voltage,  Temperaturet);

}


void printDO() {

//Serial.print("DO  Temperaturet:\t" + String(Temperaturet) + "\t");

//Serial.print("DO  ADC RAW:\t" + String(DO_ADC_RAW) + "\t");

//Serial.print("DO  ADC Voltage:\t" + String(DO_ADC_Voltage) + "\t");

Serial.println("DO_ADC_RAW:\t" + String(DO_ADC_RAW));

Serial.println("DO_ADC_Voltage:\t" + String(DO_ADC_Voltage)); 

Serial.println("DO:\t" + String(DO));

}

Sensor Voltage

Sensor INA219 pada alamat I2C 0x41 digunakan untuk monitoring power consumption sistem secara real-time, mengukur tegangan, arus, dan daya yang dikonsumsi seluruh rangkaian. Berikut adalah code program yang digunakan.

// INA219 Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Adafruit_INA219 ina219(0x41);

float shuntvoltage = 0;

float busvoltage = 0;

float current_mA = 0;

float loadvoltage = 0;

float power_mW = 0;


void setVoltage() {

  try {

   shuntvoltage = ina219.getShuntVoltage_mV();

   busvoltage = ina219.getBusVoltage_V();

   current_mA = ina219.getCurrent_mA();

   power_mW = ina219.getPower_mW();

   loadvoltage =  busvoltage + (shuntvoltage / 1000);

  } catch (String error) {

   Serial.println("Error Voltage:  "  + error);

  }

}


void printVoltage() {

  Serial.print("bus voltage =  ");

  Serial.println(busvoltage);

  Serial.print("shunt voltage =  ");

  Serial.println(shuntvoltage);

  Serial.print("load voltage");

  Serial.println(loadvoltage);

  Serial.print("current mA =  ");

  Serial.println(current_mA);

  Serial.print("power mW = ");

  Serial.println(power_mW);

}

Lora

Implementasi komunikasi LoRa mencakup setup transceiver pada frekuensi 915 MHz, konfigurasi pin control, dan utility functions untuk scanning perangkat I2C serta kontrol relay pada pin 26. Berikut adalah code program yang digunakan.

//LoRa  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// - Pin configs -

<nowiki>#</nowiki>define ss 5

<nowiki>#</nowiki>define rst 12

<nowiki>#</nowiki>define dio0 2


void startLora() {

Serial.println("LoRa Sender");

// Setup LoRa  transceiver module

LoRa.setPins(ss, rst, dio0);

LoRa.setTxPower(23, false);

//LoRa.setSpreadingFactor(12);

//LoRa.setSignalBandwidth(62.5E3);


if (!LoRa.begin(915E6)) {

  Serial.println("Starting LoRa  failed!");

  ESP.restart();

} else {

  Serial.println("Starting LoRa  successful");

}

}


void i2cScan() {

byte error, address;

int nDevices;

Serial.println("Scanning...");

nDevices = 0;

for (address = 1; address < 127; address++) {

  Wire.beginTransmission(address);

  error = Wire.endTransmission();

  if (error == 0) {

    Serial.print("I2C device found  at address 0x");

    if (address<16) {

       Serial.print("0");

    }

    Serial.println(address,HEX);

    nDevices++;

  } else if (error == 4) {

    Serial.print("Unknow error at  address 0x");

    if (address < 16) {

      Serial.print("0");

    }

    Serial.println(address, HEX);

  }

}

if (nDevices == 0) {

  Serial.println("No I2C devices  found\n");

}

// else {

//   Serial.println("done\n");

// }

}


void setup() {

Serial.begin(115200);


//Relay  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

pinMode(26, OUTPUT);

digitalWrite(26, LOW);  //set pin LOW (Switch Closed)

  Wire.begin();


i2cScan();

Start Sensor

Proses startup sistem mencakup inisialisasi berurutan semua komponen monitoring: komunikasi LoRa, power sensing INA219, sensor cuaca DHT22 dan BME280, pengukur suhu air DS18B20, sensor pH, serta konfigurasi deep sleep timer untuk optimasi daya. Berikut adalah code program yang digunakan.

//LoRa  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

startLora(); 


//INA219  +++++++++++++++++++++++++++++

  try {

   if (!ina219.begin()) {

     Serial.println("Failed to find  INA219 chip");

     //while (1) {  delay(10); }

   }

  } catch (String error) {

   Serial.println("Error Voltage:  "  + error);

  } 


//DHT22  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

dht.begin();


 //BME280  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Serial.println("Starting  BME280");

bool BMEstatus; 

BMEstatus = bme.begin(0x76); 

if (!BMEstatus) {

  Serial.println("Could not find a  valid BME280 sensor, check wiring!");

}


 //DS18B20  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// Start the DS18B20  sensor

pinMode(waterTemperaturePin,  INPUT);

sensors.begin(); 


//pH Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

pinMode(PH_PIN, INPUT); 


// Voltage Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// set the ADC  attenuation to 11 dB (up to ~3.3V input)

analogSetAttenuation(ADC_11db);


// // Sleep  Configuration

//  //esp_sleep_enable_timer_wakeup(1800E6);

esp_sleep_enable_timer_wakeup(30E6);

} 

void loop() {

//Set relay pin LOW  (Switch closed)

//digitalWrite(25,  LOW);

/*

if (millis() -  startTime > restartTime) {

  ESP.restart();

}
Serial.println(millis() - startTime);

*/

Print Sensor

Proses print dan fungsi loop mengimplementasikan cycle monitoring lengkap: pembacaan sensor berurutan, validasi data berdasarkan threshold suhu air, formatting data ke protokol komunikasi custom, transmisi LoRa, dan power shutdown untuk optimasi energi. Berikut adalah code program yang digunakan.

//DS18B20  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

setWaterTemperature();

//  printWaterTemperature();  //remove  comment on the function to use it.

if (waterTemperature < 84.00) {

  //DHT22  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  setDHT();

  // printDHT();

  

  //BME280  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  setBMEValues();

  //  printBMEValues();  //remove comment on the function to use it.


  //Salinitas  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  setSalinity();

  //  printSalinitas();


  //pH Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  setPH();

  //  printPH();   //remove comment on the function to use it.


  //DO Sensor  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  setDO();

    printDO();  //remove comment on the function to use it.


  // // Voltage Sensor  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  // // setVoltage();

  // //  printVoltage();


  String message = "ID=Aceh_Solitude-1";

  message += "&GROUP=colabs";

  //message +=  "&deviceid=PA00";

  message += "&loc=BlangSitungkoh";

  message += "&long=5.6691075";

  message += "&lat=95.0906248";

  message += "&iT=" + String(bmeTemperature);

  message += "&iH=" + String(bmeHumidity);

  message += "&iP=" + String(bmePressure);

  message += "&iA=" + String(bmeAltitude);

  message += "&eT=" + String(dhtTemperature);

  message += "&eH=" + String(dhtHumidity);

  message += "&wT=" + String(waterTemperature);

  message += "&pH=" + String(ph);

  message += "&DO=" + String(DO);

  message += "&Sal=" + String(salinity);

  message += "&bV=" + String(busvoltage);

  message += "&sV=" + String(shuntvoltage);

  message += "&lV=" + String(loadvoltage);

  message += "&mA=" + String(current_mA);

  message += "&mW=" + String(power_mW);


  // message +=  "&softwaretype=prototype-00";

  Serial.print("Sending packet:  ");

  Serial.println(message);

  // send packet

  LoRa.beginPacket();

  LoRa.print(message);

  LoRa.endPacket();


  delay(500);

  digitalWrite(26, HIGH);  //Set relay pin HIGH (Circuit Opened)


  Wire.end();

  LoRa.end();

  Serial.end();


  delay(100);


  esp_deep_sleep_start();

}

}

Implementasi kode lengkap di atas menunjukkan integrasi sistem monitoring kualitas air laut. Sistem ini mampu beroperasi secara mandiri dengan cycle pembacaan sensor, transmisi data LoRa, dan power management yang optimal untuk deployment jangka panjang di lingkungan laut. Source code lengkap dan dokumentasi tambahan dapat diakses melalui repository GitHub di: https://github.com/insaninfonesia/Co_LABS.

Konfigurasi dan Kalibrasi

Kalibrasi adalah langkah untuk memastikan data yang dihasilkan akurat dan dapat diandalkan. Tanpa kalibrasi rutin, penyimpangan nilai dapat menyebabkan kesalahan dalam pengambilan keputusan.

Jadwal Rekomendasi Kalibrasi

Jenis Sensor Frekuensi Kalibrasi Tingkat Prioritas
pH & Dissolved Oxygen 1 - 2 Minggu sekali Tinggi (Sangat Sensitif)
Salinitas (EC Meter) 1 Bulan sekali Sedang
DS18B20 & DHT22 6 Bulan sekali Rendah (Cukup Stabil)
BME280 6 - 12 Bulan sekali Rendah (Pabrikan)

Prosedur Kalibrasi Per Sensor

Sensor pH (DFRobot Analog V2)

Sensor ini bekerja berdasarkan prinsip beda potensial. Elektroda pH sangat sensitif terhadap perubahan suhu dan usia pemakaian.

  1. Peralatan: Larutan penyangga (Buffer Solution) pH 4.0, pH 7.0, dan pH 10.0, gelas kimia, air distilasi (aquades).
  2. Persiapan: Bersihkan ujung probe dengan aquades dan keringkan perlahan dengan tisu (jangan digosok).
  3. Langkah: Celupkan ke larutan pH 7.0 (netral) sebagai titik nol, kemudian lakukan kalibrasi dua titik dengan pH 4.0 atau 10.0 melalui code atau memutar potensiometer pada modul.

Catatan: Hasil dari keluaran sensor setelah dilakukan kalibrasi 2 titik, dicatat ke dalam excel dan hasil tersebut nanti dihitung dengan rumus regresi. Rumus tersebut nantinya akan dimasukkan ke dalam code bagian sensor pH.

Contoh: Regresi pH pada saat kalibrasi dua titik
Penyesuaian pada Program

Contoh penyesuaian code pada sensor pH setelah kalibrasi

#define pinProbe 33 ;

void setup()

{

   Serial.begin(115200);

} 

void loop()

{

   int ADC = 0;

   float meanADC;

   for(int i=0; i<800; i++){

       ADC += analogRead(pinProbe);               

   }

   meanADC = ADC/800;

   Serial.println("meanADC:" + String(meanADC));

   delay(1000);

}

Sensor Dissolved Oxygen (DO)

Kalibrasi diperlukan untuk memastikan pembacaan kadar oksigen terlarut (mg/L) akurat, terutama setelah perawatan probe, penggantian membran, atau penggantian larutan elektrolit. Sensor DO DFRobot biasanya bertipe galvanik yang membutuhkan proses polarisasi.

  • Peralatan: Larutan NaOH (0 mg/L atau Zero-oxygen solution) dan air yang diaerasi penuh (100% saturasi).
  • Persiapan: Rendam probe di air selama 5-10 menit sebelum mulai.
  • Langkah: 1. Celupkan ke larutan zero-oxygen hingga nilai stabil di angka 0. 2. Angkat ke udara terbuka (atau air jenuh oksigen) untuk menetapkan titik saturasi 100%.
Penyesuaian pada Program

Gunakan nilai tegangan hasil kalibrasi untuk menggantikan parameter kalibrasi pada kode.

Contoh:

#include <Arduino.h>

#define VREF    3300//VREF(mv)
#define ADC_RES 4096//ADC Resolution

uint32_t raw;

void setup()
{
    Serial.begin(115200);
}

void loop()
{
    raw=analogRead(A1);
    Serial.println("raw:\t"+String(raw)+"\tVoltage(mv)"+String(raw*VREF/ADC_RES));
    delay(1000);
}

Sensor Salinitas (EC Meter K=10)

Kalibrasi dilakukan untuk memastikan pembacaan konduktivitas (EC dalam mS/cm) tetap akurat, terutama setelah penggunaan intensif, pembersihan elektroda, atau ketika hasil pembacaan tidak konsisten.

  • Peralatan: Larutan standar konduktivitas (misal: 12.88ms/cm atau 50ms/cm sesuai salinitas air laut).
  • Persiapan: Pastikan tidak ada gelembung udara yang menempel pada permukaan elektroda saat pencelupan.
  • Langkah: Celupkan sensor ke larutan standar, bandingkan pembacaan di Serial Monitor dengan nilai pada botol larutan, lalu sesuaikan nilai K-Factor pada kode program
Contoh: Regresi nilai salinitas hasil kalibrasi
Penyesuaian pada Program

Gunakan nilai hasil kalibrasi untuk menentukan faktor konversi dari ADC ke nilai salinitas.

#define pinProbe 32 ;
void setup()
{
    Serial.begin(115200);
}
 
void loop()
{
    int ADC = 0;
    float meanADC;
    for(int i=0; i<800; i++){
        ADC += analogRead(pinProbe);                
    }
    meanADC = ADC/800;
    Serial.println("meanADC:" + String(meanADC));
    delay(1000);
}

Sensor Temperatur (DS18B20)

Sensor ini umumnya sudah dikalibrasi di pabrik (factory calibrated).

  • Peralatan: Termometer referensi standar (termometer air raksa atau digital yang tersertifikasi).
  • Persiapan: Siapkan wadah berisi air dengan suhu stabil (suhu ruang).
  • Langkah: Celupkan DS18B20 dan termometer referensi secara bersamaan. Jika terdapat selisih (misal 0.5°C), tambahkan nilai offset tersebut pada variabel di kode program: temp_fix = read_temp + offset.


< Kembali ke halaman awal> | <Kembali ke halaman sebelumnya> | <Ke halaman berikutnya >