// 1. Definisikan Pin ESP32 yang terhubung ke komponen
#define POT_PH 34 // Pin G34 untuk Potensio pH
#define POT_TDS 35 // Pin G35 untuk Potensio TDS
#define POMPA_SIRKULASI 25 // Pin G25 untuk Relay Pompa Sirkulasi Utama
#define POMPA_DOSING_A 26 // Pin G26 untuk Relay Pompa Dosing pH Up
#define POMPA_DOSING_B 27 // Pin G27 untuk Relay Pompa Dosing Nutrisi
void setup() {
// Aktifkan Serial Monitor dengan kecepatan 115200 bps
Serial.begin(115200);
// Atur semua pin pompa/relay sebagai OUTPUT
pinMode(POMPA_SIRKULASI, OUTPUT);
pinMode(POMPA_DOSING_A, OUTPUT);
pinMode(POMPA_DOSING_B, OUTPUT);
// Secara default, nyalakan pompa sirkulasi utama (HIGH = Menyala)
digitalWrite(POMPA_SIRKULASI, HIGH);
Serial.println("Sistem Hidroponik Dimulai...");
Serial.println("Pompa Sirkulasi Utama: ON");
}
void loop() {
// 2. Membaca nilai analog dari potensio (Rentang nilai ESP32: 0 - 4095)
int rawPH = analogRead(POT_PH);
int rawTDS = analogRead(POT_TDS);
// Konversi nilai analog ke skala pH (0.0 sampai 14.0)
float nilaiPH = (rawPH / 4095.0) * 14.0;
// Konversi nilai analog ke skala TDS (0.0 sampai 2000.0 PPM)
float nilaiTDS = (rawTDS / 4095.0) * 2000.0;
// 3. Tampilkan hasil pembacaan ke Serial Monitor di bawah layar
Serial.print("pH Air: "); Serial.print(nilaiPH);
Serial.print(" | Kandungan Nutrisi: "); Serial.print(nilaiTDS); Serial.println(" PPM");
// 4. LOGIKA OTOMATISASI POMPA DOSING
// Kontrol pH (Jika pH terlalu asam / di bawah 6.0, nyalakan pompa pH Up)
if (nilaiPH < 6.0) {
digitalWrite(POMPA_DOSING_A, HIGH);
Serial.println("-> [WARNING] pH terlalu rendah! Pompa Dosing pH Up aktif.");
} else {
digitalWrite(POMPA_DOSING_A, LOW); // Matikan pompa jika pH sudah aman
}
// Kontrol Nutrisi (Jika TDS kurang dari 800 PPM, nyalakan pompa Nutrisi AB Mix)
if (nilaiTDS < 800) {
digitalWrite(POMPA_DOSING_B, HIGH);
Serial.println("-> [WARNING] Nutrisi kurang! Pompa Dosing Nutrisi aktif.");
} else {
digitalWrite(POMPA_DOSING_B, LOW); // Matikan pompa jika nutrisi sudah cukup
}
Serial.println("------------------------------------------------");
delay(2000); // Jeda waktu baca ulang setiap 2 detik
}