#include <WiFi.h>
#include <Servo.h>
const int ultrasonicTriggerPin = 2; // Pin trigger sensor ultrasonik
const int ultrasonicEchoPin = 4; // Pin echo sensor ultrasonik
const int LDRPin = 32; // Pin analog untuk sensor Kekeruhan
const int LDRLED = 22; // Pin LED untuk indikator kekeruhan
const int potentiometerPin = 25; // Pin analog untuk potensiometer pH
const int pumpPin = 15; // Pin relay untuk mengontrol pompa air
const int pengisiLED = 19; // Pin LED untuk indikator pengisian air
const int pembuangLED = 18; // Pin LED untuk indikator pembuangan air
const int servoPin = 5;
// Nilai ambang batas
const int minWaterLevel = 80; // Tinggi air minimum dalam cm
const int maxWaterLevel = 150; // Tinggi air maksimum dalam cm
const int LDRThreshold = 500; // Ambang batas kekeruhan (nilai LDR)
const float phMin = 6.0; // Ambang batas pH minimum(nilai potensiometer)
const float phMax = 8.0; // Ambang batas pH maksimum(nilai potensiometer)
const float voltageMin = 0.0;
const float voltageMax = 5.0;
Servo servoku;
void setup() {
pinMode(ultrasonicTriggerPin, OUTPUT);
pinMode(ultrasonicEchoPin, INPUT);
pinMode(LDRPin, INPUT);
pinMode(LDRLED, OUTPUT);
digitalWrite(LDRLED, LOW); // Matikan LED kekeruhan saat awal
pinMode(pumpPin, OUTPUT);
digitalWrite(pumpPin, LOW); // Matikan pompa air saat awal
pinMode(pengisiLED, OUTPUT);
digitalWrite(pengisiLED, LOW); // Matikan LED pengisian air saat awal
pinMode(pembuangLED, OUTPUT);
digitalWrite(pembuangLED, LOW); // Matikan LED pembuangan air saat awal
servoku.attach(servoPin);
Serial.begin(115200);
}
void loop() {
// Baca tinggi air menggunakan sensor ultrasonik
long duration, distance;
digitalWrite(ultrasonicTriggerPin, LOW);
delayMicroseconds(2);
digitalWrite(ultrasonicTriggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(ultrasonicTriggerPin, LOW);
duration = pulseIn(ultrasonicEchoPin, HIGH);
distance = duration * 0.034 / 2;
int LDRValue = analogRead(LDRPin); // Baca nilai kekeruhan menggunakan sensor LDR
int potentiometerValue = analogRead(potentiometerPin); // Baca nilai pH menggunakan potensiometer
float pH = map (potentiometerValue, 0, 1023, 0, 14);
// float voltage = map(potentiometerValue, 0, 1023, voltageMin, voltageMax);
// float pHValue = map(voltage, voltageMin, voltageMax, potentiometerThresholdLow, potentiometerThresholdHigh);
// Cek tingkat ketinggian air
Serial.println("==============================================");
Serial.print("Ketinggian Air: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < minWaterLevel) {
Serial.println("Ketinggian Air Minimal. Kolam Di isi");
digitalWrite(pumpPin, HIGH); // Nyalakan pompa air
digitalWrite(pengisiLED, HIGH); // Nyalakan LED pengisian air
digitalWrite(pembuangLED, LOW); // Matikan LED pembuangan air
} else if (distance > maxWaterLevel) {
Serial.println("Ketinggian Air Maksimal, Kolam Penuh");
digitalWrite(pumpPin, LOW); // Matikan pompa air
digitalWrite(pengisiLED, LOW); // Matikan LED pengisian air
digitalWrite(pembuangLED, LOW); // Matikan LED pembuangan air
} else {
Serial.println("Ketinggian Air Normal.");
digitalWrite(pumpPin, LOW); // Matikan pompa air
digitalWrite(pengisiLED, LOW); // Matikan LED pengisian air
digitalWrite(pembuangLED, LOW); // Matikan LED pembuangan air
}
// Cek tingkat kekeruhan air
Serial.print("Nilai Kekeruhan: ");
Serial.println(LDRValue);
if (LDRValue > LDRThreshold) {
Serial.println("Air Keruh. Air di Kuras");
digitalWrite(pumpPin, LOW); // Matikan pompa air
digitalWrite(pengisiLED, LOW); // Matikan LED pengisian air
digitalWrite(pembuangLED, HIGH); // Nyalakan LED pembuangan air
digitalWrite(LDRLED, HIGH); // Nyalakan LED kekeruhan
}
else {
Serial.println("Air Jernih.");
digitalWrite(LDRLED, LOW); // Matikan LED kekeruhan
digitalWrite(pembuangLED, LOW); // Matikan LED pembuangan air
}
// Cek tingkat pH air
Serial.print("Nilai Ph: ");
Serial.println(pH);
if (pH < phMin) {
Serial.println("Ph Rendah. Air di Kuras");
digitalWrite(pumpPin, LOW); // Matikan pompa air
digitalWrite(pengisiLED, LOW); // Matikan LED pengisian air
digitalWrite(pembuangLED, HIGH); // Nyalakan LED pembuangan air
} else if (pH > phMax) {
Serial.println("Ph Tinggi. Air di Kuras");
digitalWrite(pumpPin, LOW); // Matikan pompa air
digitalWrite(pengisiLED, LOW); // Matikan LED pengisian air
digitalWrite(pembuangLED, HIGH); // Nyalakan LED pembuangan air
} else {
Serial.println("Ph Normal.");
// digitalWrite(pumpPin, LOW); // Matikan pompa air
// digitalWrite(pengisiLED, LOW); // Matikan LED pengisian air
// digitalWrite(pembuangLED, LOW); // Nyalakan LED pembuangan air
}
if (LDRValue > LDRThreshold) {
servoku.write(180);
}else if (pH < phMin || pH > phMax) {
servoku.write(90);
}else {
servoku.write(0);
}
delay(3000); // Tunda 3 detik sebelum mengulang
}