// Library untuk sensor HC-SR04
#include <NewPing.h>
// Pin yang digunakan untuk sensor HC-SR04
#define TRIGGER_PIN 4
#define ECHO_PIN 5
// Pin yang digunakan untuk lampu tingkat air
#define RED_PIN 8
#define YELLOW_PIN 7
#define GREEN_PIN 6
// Maksimum jarak yang akan diukur (dalam cm)
#define MAX_DISTANCE 400
// Batas tingkat air untuk mengatur status lampu (dalam cm)
#define HIGH_WATER_LEVEL 300
#define MEDIUM_WATER_LEVEL 150
#define LOW_WATER_LEVEL 50
// Objek untuk sensor HC-SR04
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
// Inisialisasi pin sebagai output
pinMode(RED_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
// Inisialisasi Serial untuk debug
Serial.begin(9600);
}
void loop() {
// Mengukur jarak dengan sensor HC-SR04
unsigned int distance = sonar.ping_cm();
// Menampilkan hasil pengukuran pada Serial Monitor
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Mengendalikan lampu tingkat air berdasarkan jarak
if (distance >= HIGH_WATER_LEVEL) {
// Lampu merah menyala
digitalWrite(GREEN_PIN, LOW);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(RED_PIN, HIGH);
} else if (distance >= MEDIUM_WATER_LEVEL) {
// Lampu Hijau menyala
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(RED_PIN, LOW);
} else if (distance >= LOW_WATER_LEVEL) {
// Lampu Kuning menyala
digitalWrite(GREEN_PIN, LOW);
digitalWrite(YELLOW_PIN, HIGH);
digitalWrite(RED_PIN, LOW);
} else {
// Semua lampu dimatikan jika jarak sangat rendah (menunjukkan air melewati sensor)
digitalWrite(GREEN_PIN, LOW);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(RED_PIN, LOW);
}
// Menunggu sejenak sebelum mengulangi pengukuran
delay(500);
}
// Jika jarak yang terbaca kurang dari 50cm
// maka semua lampu akan mati yang menandakan tingkat air sangat rendah