3D Printed Plant Auto Watering System

DZ02 | Domechy Project Library

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

Mini Water Pump
Robo Pico x Raspberry Pi Pico
Li-Ion Battery

Supporting Components

    • ZYPOLA Waterproof Box (IP65) → protects electronics

    • Wires & Connectors → simple links

Zypola junction box

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.

The base that hold almost every components
A semicircular arc on the side of the base, guiding the tube
A holder for the Robo Pico inside Zypola junction box

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.

Scroll to Top