
Problem Statement
We were leaving for a 5-day trip to Hokkaido during Obon 2025, but my son’s Morning Glory plant (from his kindergarten activity) still needed water. Nobody would be home, so I needed a way to keep it alive without daily watering.
The answer is clear, I need to build a simple automatic watering system.
How Does An Automatic Plant Watering System Works?
To simplify: it’s just a pump + timer + water source.
You can buy a cheap mini water pump online, then connect it to a board with a microcontroller and motor driver. For this project, I was lucky to have a Robo Pico board from Cytron Technologies, which already combines the microcontroller, motor driver, and terminals for the pump.
That means no messy wiring — just connect the pump to the terminal connector, and the circuit is complete.
All that’s left is to write a small program that tells the pump when to run. In my case, the logic was simple: every 12 hours, pump water for 10 seconds.
Core Components of this project
Mini Water Pump + Tube → delivers water to the plant
Raspberry Pi Pico → runs the code
Robo Pico Board → drives the pump
Lithium-Ion Battery → power supply
2L Mineral Water Bottle → water reservoir



Supporting Components
ZYPOLA Waterproof Box (IP65) → protects electronics
Wires & Connectors → simple links

Mechanical Design
The system needed three main mechanical parts:
Base → keeps the bottle + junction box stable
Semi-circular Arc → guides the tube without sharp bends
Board Holder → lets Robo Pico slide neatly inside the box
I first tried a 2000 mAh LiPo battery, but it wouldn’t last 5 days. Replaced it with a salvaged lithium-ion cell from a solar garden light, which ended up powering both the garden light and this system.



Coding
A short Python program runs the pump automatically:
import board
import time
import digitalio
# Pump motor connected to GP10 (black), GP11 (red)
motorA1 = digitalio.DigitalInOut(board.GP10)
motorA2 = digitalio.DigitalInOut(board.GP11)
motorA1.direction = digitalio.Direction.OUTPUT
motorA2.direction = digitalio.Direction.OUTPUT
def pump_on():
motorA1.value = False
motorA2.value = True
def pump_off():
motorA1.value = False
motorA2.value = False
# Wait 10 seconds after Raspberry Pi starts
print("Waiting 10 seconds before starting...")
time.sleep(10)
while True:
print("Pump ON for 10 seconds")
pump_on()
time.sleep(10)
pump_off()
print("Pump OFF")
time.sleep(43200) # Wait before running again
Final Result
The system ran reliably and the plant survived our trip.
You can watch the video of this project here.

Problems & Future Improvements
Battery capacity → Even when using a solar-rechargeable lithium-ion battery, it was barely enough to keep the system alive for 5 days straight. A better option would be powering directly from a household outlet, or switching to a higher-capacity battery.
Siphon effect → I completely forgot about this when designing the system. Since the tube was guided downward and its end sat below the reservoir’s water level, a siphon effect kicked in. That meant water kept flowing even after the pump turned off. My quick fix was to tie the tube end higher than the water level — but that defeats the purpose of the nice semicircular arc.
Soil moisture sensor → The Robo Pico came bundled with accessories like a soil moisture sensor. In theory, I could use it to measure dryness and trigger the pump only when needed, with a customizable threshold. For one small plant, it’s probably overkill — but it would be a fun experiment for a future version.