// Sistem Monitoring Pembibitan Mangrove
// Ivang Fanindra 26050124140150 Oseanografi 2024
#include "DHT.h" // Memasukkan library DHT agar Arduino mengenali fungsi sensor suhu dan kelembaban
#define DHTPIN 2 // Mendefinisikan pin 2 pada Arduino sebagai jalur komunikasi data dari sensor DHT22
#define DHTTYPE DHT22 // Mendefinisikan tipe sensor DHT yang digunakan, yaitu seri DHT22
DHT dht(DHTPIN, DHTTYPE); // Membuat objek sistem bernama 'dht' berdasarkan pin dan tipe sensor yang telah dideklarasikan
// Inisialisasi Pin Komponen
const int pinLDR = A0; // Mendeklarasikan pin A0 sebagai jalur input analog untuk membaca sensor cahaya (LDR)
const int ledKuning = 10; // Mendeklarasikan pin digital 10 sebagai output untuk LED Kuning (representasi Lampu Tumbuh)
const int ledMerah = 8; // Mendeklarasikan pin digital 8 sebagai output untuk LED Merah (representasi Kipas Sirkulasi)
const int ledBiru = 9; // Mendeklarasikan pin digital 9 sebagai output untuk LED Biru (representasi Pompa Air)
void setup() {
Serial.begin(9600); // Memulai komunikasi serial dengan kecepatan 9600 bps untuk menampilkan teks/data di layar komputer (Serial Monitor)
dht.begin(); // Menginisialisasi sensor DHT22 agar mulai mendeteksi kondisi udara sekitar
pinMode(pinLDR, INPUT); // Mengatur pinLDR (A0) sebagai jalur INPUT untuk menerima sinyal analog dari sensor
pinMode(ledKuning, OUTPUT); // Mengatur pin ledKuning (10) sebagai jalur OUTPUT untuk menyalakan komponen
pinMode(ledMerah, OUTPUT); // Mengatur pin ledMerah (8) sebagai jalur OUTPUT untuk menyalakan komponen
pinMode(ledBiru, OUTPUT); // Mengatur pin ledBiru (9) sebagai jalur OUTPUT untuk menyalakan komponen
Serial.println("Sistem Monitoring Mangrove Aktif!"); // Mencetak kalimat pembuka di Serial Monitor satu kali saat sistem pertama kali dinyalakan
}
void loop() {
// 1. Membaca Data Sensor
int nilaiCahaya = analogRead(pinLDR); // Membaca intensitas cahaya dari pin A0 dalam bentuk angka (0-1023) dan menyimpannya ke variabel nilaiCahaya
float suhu = dht.readTemperature(); // Membaca nilai suhu dalam satuan Celcius dari sensor DHT22 dan menyimpannya ke variabel suhu (desimal)
float kelembaban = dht.readHumidity(); // Membaca persentase kelembaban dari sensor DHT22 dan menyimpannya ke variabel kelembaban (desimal)
// 2. Menampilkan Data ke Serial Monitor
Serial.print("Cahaya (Analog): "); // Menampilkan teks "Cahaya (Analog): " tanpa membuat garis baru
Serial.print(nilaiCahaya); // Menampilkan angka nilai bacaan sensor LDR
Serial.print(" | Suhu: "); // Menampilkan teks pembatas dan kata "Suhu: "
Serial.print(suhu); // Menampilkan angka derajat suhu saat ini
Serial.print(" C"); // Menampilkan huruf C sebagai penanda Celcius
Serial.print(" | Kelembaban: "); // Menampilkan teks pembatas dan kata "Kelembaban: "
Serial.print(kelembaban); // Menampilkan angka persentase kelembaban udara saat ini
Serial.println(" %"); // Menampilkan simbol % sekaligus membuat baris baru (enter) karena menggunakan perintah println
// 3. Logika Program (Sistem Keputusan)
// A. Cahaya
if (nilaiCahaya > 300) { // Mengecek apakah nilai LDR lebih dari 800 yang berarti kondisi lingkungan sedang gelap atau mendung
digitalWrite(ledKuning, HIGH); // Jika ya (gelap), beri tegangan (HIGH) ke pin ledKuning agar Lampu Tumbuh menyala
} else { // Jika kondisi tidak terpenuhi (nilai cahaya <= 800 yang berarti lingkungan terang)
digitalWrite(ledKuning, LOW); // Hentikan tegangan (LOW) ke pin ledKuning agar Lampu Tumbuh mati untuk menghemat energi
}
// B. Suhu
if (suhu > 32.0) { // Mengecek apakah deteksi suhu udara melebihi 32 derajat Celcius (kondisi kepanasan bagi bibit)
digitalWrite(ledMerah, HIGH); // Jika ya (panas), beri tegangan (HIGH) untuk menyalakan Kipas Sirkulasi pendingin
} else { // Jika kondisi tidak terpenuhi (suhu <= 32 derajat / normal)
digitalWrite(ledMerah, LOW); // Hentikan tegangan (LOW) untuk mematikan Kipas Sirkulasi
}
// C. Kelembaban
if (kelembaban < 60.0) { // Mengecek apakah persentase uap air di udara berada di bawah 60% (kondisi udara kering)
digitalWrite(ledBiru, HIGH); // Jika ya (kering), beri tegangan (HIGH) untuk menyalakan Pompa Air agar udara kembali lembab
} else { // Jika kondisi tidak terpenuhi (kelembaban >= 60% / normal)
digitalWrite(ledBiru, LOW); // Hentikan tegangan (LOW) untuk mematikan Pompa Air
}
delay(2000); // Memberikan jeda waktu 2000 milidetik (2 detik) sebelum Arduino mengulang kembali proses pembacaan dari awal loop
}