#define TRIG_PIN_1 2 #define ECHO_PIN_1 1 #define TRIG_PIN_2 7 #define ECHO_PIN_2 0 #define TRIG_PIN_3 29 #define ECHO_PIN_3 6 #define RELAY_PIN_1 27 #define RELAY_PIN_2 26 #define RELAY_PIN_3 28 #define MIN_ACTIVATION_DISTANCE_1 10 // Minimum distance to activate pump 1 (in cm) #define MIN_ACTIVATION_DISTANCE_2 15 // Minimum distance to activate pump 2 (in cm) #define MIN_ACTIVATION_DISTANCE_3 20 // Minimum distance to activate pump 3 (in cm) #define PUMP_ACTIVATION_TIME 4000 // Pump activation time (in milliseconds) #define TIME_BETWEEN_MEASUREMENTS 60000 // Time between measurements (in milliseconds) unsigned long last_measurement_time = 0; void setup() { Serial.begin(9600); pinMode(TRIG_PIN_1, OUTPUT); pinMode(ECHO_PIN_1, INPUT); pinMode(TRIG_PIN_2, OUTPUT); pinMode(ECHO_PIN_2, INPUT); pinMode(TRIG_PIN_3, OUTPUT); pinMode(ECHO_PIN_3, INPUT); pinMode(RELAY_PIN_1, OUTPUT); pinMode(RELAY_PIN_2, OUTPUT); pinMode(RELAY_PIN_3, OUTPUT); } void loop() { unsigned long current_time = millis(); if (current_time - last_measurement_time >= TIME_BETWEEN_MEASUREMENTS) { // First ultrasound reading long duration_1, distance_1; digitalWrite(TRIG_PIN_1, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN_1, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN_1, LOW); duration_1 = pulseIn(ECHO_PIN_1, HIGH); distance_1 = duration_1 * 0.034 / 2; // Second ultrasound reading long duration_2, distance_2; digitalWrite(TRIG_PIN_2, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN_2, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN_2, LOW); duration_2 = pulseIn(ECHO_PIN_2, HIGH); distance_2 = duration_2 * 0.034 / 2; // Third ultrasound reading long duration_3, distance_3; digitalWrite(TRIG_PIN_3, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN_3, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN_3, LOW); duration_3 = pulseIn(ECHO_PIN_3, HIGH); distance_3 = duration_3 * 0.034 / 2; // Show distances on the serial monitor Serial.print("Ultrasound Distance 1: "); Serial.print(distance_1); Serial.println(" cm"); Serial.print("Ultrasound Distance 2: "); Serial.print(distance_2); Serial.println(" cm"); Serial.print("Ultrasound Distance 3: "); Serial.print(distance_3); Serial.println(" cm"); // Pump control if (distance_1 < MIN_ACTIVATION_DISTANCE_1 && distance_2 < MIN_ACTIVATION_DISTANCE_2 && distance_3 < MIN_ACTIVATION_DISTANCE_3) { digitalWrite(RELAY_PIN_1, HIGH); // Activate the pump digitalWrite(RELAY_PIN_2, HIGH); // Activate the pump digitalWrite(RELAY_PIN_3, HIGH); // Activate the pump Serial.println("Pump activated"); delay(PUMP_ACTIVATION_TIME); digitalWrite(RELAY_PIN_1, LOW); // Deactivate the pump digitalWrite(RELAY_PIN_2, LOW); // Deactivate the pump digitalWrite(RELAY_PIN_3, LOW); // Deactivate the pump Serial.println("Pump deactivated"); } last_measurement_time = current_time; } }