#include <ESP32Servo.h> // Gunakan ESP32Servo
// Pin definisi
const int trigPin = 19; // Pin trig pada sensor ultrasonik
const int echoPin = 18; // Pin echo pada sensor ultrasonik
const int servoPin = 5; // Pin untuk servo
int ledPin = 17;
// Konfigurasi ketinggian
const int maxLevel = 400; // Maksimal jarak (200 cm) untuk servo membuka
const int minLevel = 50; // Minimal jarak (30 cm) untuk servo menutup
// Servo
Servo myServo;
// Fungsi untuk membaca jarak dari sensor ultrasonik
long readDistanceCM() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2; // Menghitung jarak dalam cm
return distance;
}
void setup() {
Serial.begin(115200);
// Konfigurasi pin
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
// Inisialisasi servo
myServo.attach(servoPin);
myServo.write(0); // Posisi awal servo (tertutup)
Serial.println("Starting water level monitoring...");
}
void loop() {
long distance = readDistanceCM(); // Membaca jarak dari sensor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Logika membuka atau menutup servo berdasarkan jarak air
if (distance >= maxLevel) {
// Jika jarak air > 200 cm, buka servo
Serial.println("Water level low, opening servo...");
myServo.write(90); // Posisi servo terbuka (misalnya 90 derajat)
digitalWrite(ledPin, HIGH);
} else if (distance <= minLevel) {
// Jika jarak air < 30 cm, tutup servo
Serial.println("Water level sufficient, closing servo...");
myServo.write(0); // Posisi servo tertutup (0 derajat)
digitalWrite(ledPin, LOW);
}
delay(1000); // Jeda 1 detik sebelum pengukuran berikutnya
}