#include <ESP32Servo.h>
Servo waterValve; // Membuat objek Servo yang akan mengendalikan servo
#define TRIG_PIN 22 // Pin Trigger sensor ultrasonik
#define ECHO_PIN 23 // Pin Echo sensor ultrasonik
#define LED_PIN 27 // Pin LED untuk simulasi kran air
#define SERVO_PIN 26 // Pin Servo untuk mengendalikan kran air
const int WATER_LEVEL = 150; // Level air penuh dalam satuan cm
int waterLevel = 0; // Nilai awal untuk level air
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT); // Mendefinisikan pin sensor ultrasonik sebagai output dan input
pinMode(LED_PIN, OUTPUT);
waterValve.attach(SERVO_PIN); // Menghubungkan objek Servo dengan pin
waterValve.write(0); // Menetapkan posisi awal servo ke 0
Serial.begin(115200);
}
int readWaterLevel() {
digitalWrite(TRIG_PIN, LOW); // Membaca tingkat air
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
int distance = duration * 0.034 / 2;
return distance;
}
void loop() {
waterLevel = readWaterLevel(); // Mendapatkan nilai level air yang terdeteksi
Serial.print("Water level: ");
Serial.println(waterLevel);
if (waterLevel <= WATER_LEVEL) {
digitalWrite(LED_PIN, HIGH); // Hidupkan "kran air"
waterValve.write(0);
Serial.println("Kran air hidup");
} else if (waterLevel >= WATER_LEVEL) {
digitalWrite(LED_PIN, LOW); // Matikan "kran air"
waterValve.write(90);
Serial.println("Kran air mati");
}
delay(1000);
}