#include <Adafruit_Sensor.h>
#define LEVEL_TRIGGER_PIN 32 // HC-SR04 Trigger pin
#define LEVEL_ECHO_PIN 33 // HC-SR04 Echo pin
#define PUMP_PIN 12 // Pump control pin
long duration; // Duration of pulse from HC-SR04
float distance; // Calculated distance from HC-SR04
void setup() {
Serial.begin(9600);
// Initialize sensors
pinMode(LEVEL_TRIGGER_PIN, OUTPUT);
pinMode(LEVEL_ECHO_PIN, INPUT);
// Initialize output devices
pinMode(PUMP_PIN, OUTPUT);
// Turn off all output devices initially
digitalWrite(PUMP_PIN, LOW);
}
void loop() {
// Read level sensor (HC-SR04)
distance = readLevelSensor();
// Print sensor readings
Serial.print("Water Level Distance: ");
Serial.print(distance); Serial.println(" cm");
// Control logic for output devices
controlPump(distance);
delay(2000); // Adjust delay as per required sampling rate
}
// Function to read level sensor using HC-SR04
float readLevelSensor() {
// Trigger the sensor
digitalWrite(LEVEL_TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(LEVEL_TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(LEVEL_TRIGGER_PIN, LOW);
// Read the echo pin and calculate distance
duration = pulseIn(LEVEL_ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // Convert time to distance (cm)
return distance;
}
void controlPump(float distance) {
if (distance > 20) { // Assume distance > 20 cm indicates low water level
digitalWrite(PUMP_PIN, HIGH);
Serial.println("Pump ON");
} else {
digitalWrite(PUMP_PIN, LOW);
Serial.println("Pump OFF");
}
}