Arduino Project
Arduino Water Level Monitoring System with Water Pump
Course Introduction
This program uses an Arduino UNO R4 board with a Water Level Sensor Module, a water pump, LEDs, and a push button.
The sensor monitors the water level, while the LEDs indicate the water status. Pressing the button turns the water pump on or off.
Note
If this is your first time working with an Arduino project, we recommend downloading and reviewing the basic materials first.
1.1 Install Arduino IDE(Important)
1.2 Introduction of Arduino IDE
Required Components
In this project, we need the following components:
Wiring

Common Connections:
Water Level Detection Module
A: Connect to A0 on the Arduino.
G: Connect to breadboard’s negative power bus.
V: Connect to breadboard’s red power bus.
LED
RED:Connect the LEDs cathode to a 220Ω resistor then to the negative power bus on the breadboard, and the LED anode to 7 on the Arduino.
Green: Connect the LEDs cathode to a 220Ω resistor then to the negative power bus on the breadboard, and the LED anode to 6 on the Arduino.
Button
Connect to the breadboard’s negative power bus, and the other end to 2 on the Arduino board.
TA6586 - Motor Driver Chip
BI:Connect to 9 on the Arduino.
FI: Connect to 10 on the Arduino.
GND: Connect to breadboard’s negative power bus.
VCC: Connect to breadboard’s red power bus.
Centrifugal Pump
Connect to TA6586 B0.
Connect to TA6586 F0.
Writing the Code
Note
You can copy this code into Arduino IDE.
Don’t forget to select the board(Arduino UNO R4 Minima/WIFI) and the correct port before clicking the Upload button.
// Pins
const int WATER_LEVEL_PIN = A0;
const int BUTTON_PIN = 2;
const int GREEN_LED_PIN = 6;
const int RED_LED_PIN = 7;
const int PUMP_IN1_PIN = 9;
const int PUMP_IN2_PIN = 10;
// Water level threshold
// UNO R4 is set to 10-bit ADC: 0-1023.
// About two-thirds of 1023 is approximately 650.
const int WATER_LEVEL_THRESHOLD = 650;
// Button debounce
const unsigned long DEBOUNCE_DELAY = 50;
bool pumpRunning = false;
bool lastButtonReading = HIGH;
bool stableButtonState = HIGH;
unsigned long lastDebounceTime = 0;
void setup() {
analogReadResolution(10);
pinMode(WATER_LEVEL_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(PUMP_IN1_PIN, OUTPUT);
pinMode(PUMP_IN2_PIN, OUTPUT);
pumpOff();
}
void loop() {
updateWaterLevelIndicator();
handleButton();
}
void updateWaterLevelIndicator() {
int waterLevel = analogRead(WATER_LEVEL_PIN);
if (waterLevel >= WATER_LEVEL_THRESHOLD) {
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
} else {
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
}
}
void handleButton() {
bool currentReading = digitalRead(BUTTON_PIN);
if (currentReading != lastButtonReading) {
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime >= DEBOUNCE_DELAY) {
if (currentReading != stableButtonState) {
stableButtonState = currentReading;
// Trigger only when the button is pressed
if (stableButtonState == LOW) {
pumpRunning = !pumpRunning;
if (pumpRunning) {
pumpOn();
} else {
pumpOff();
}
}
}
}
lastButtonReading = currentReading;
}
void pumpOn() {
// Run the pump in one direction
digitalWrite(PUMP_IN1_PIN, HIGH);
digitalWrite(PUMP_IN2_PIN, LOW);
}
void pumpOff() {
// Stop the pump
digitalWrite(PUMP_IN1_PIN, LOW);
digitalWrite(PUMP_IN2_PIN, LOW);
}
