const int trigPin = 9;
const int echoPin = 10;
const int relayPin = 8;
long duration;
float distance;
float maxLevel = 10.0; // in cm (distance from sensor to top of dam water)
float minLevel = 50.0; // in cm (safe water level)
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // relay OFF initially
}
void loop() {
// Send ultrasonic pulse
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure pulse duration
duration = pulseIn(echoPin, HIGH);
// Calculate distance in cm
distance = duration * 0.034 / 2;
Serial.print("Water Level Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Control gate based on water level
if (distance <= maxLevel) {
Serial.println("⚠ High Water Level! Opening Dam Gate...");
digitalWrite(relayPin, HIGH); // turn ON motor or open gate
}
else if (distance > maxLevel && distance <= minLevel) {
Serial.println("✅ Water Level Normal. Gate Closed.");
digitalWrite(relayPin, LOW); // turn OFF motor or close gate
}
else {
Serial.println("Water Level Low.");
digitalWrite(relayPin, LOW);
}
delay(2000); // check every 2 seconds
}