A water bearing robot to autonomously water plants.

WIP warning

This project is a work in progress.


A robot to water trees and plants at known locations.

This robot wanders around watering trees and plants at known locations, filling itself at the water station as necessary.


This project is actually in two parts - the water-truck and the water-station.

A water-truck - A modified GizMow, adapted to carrying

    A water container - with a large mouth at the top.
    A pump - to pump water out of the rover onto the plants.
    A flow meter - to test that the pump is actually pumping (and know whether a refill is required).
    A water level meter - to test if the tank is full.

A water-station consisting of

    A solenoid to turn on water, which will flow into the container mouth.
    This must be a 'gravity feed' solenoid, as most solenoids require full-pressure water to make them work. This requires a low-pressure solenoid.
    An ESP-01 to activate the solenoid.

The water container must be fixed to the rover, with the pump externally mounted so that the flow meter can be mounted to it. The flow meter must be mounted vertically with flow going upwards (that is, according to the specifications, but it's not actually clear how critical this is). The water level meter can be mounted at the top of the container, to enable testing of whether the container is full.


The work flow is
The rover goes to the successive watering points, and runs the pump, and monitors the flow-meter, depositing the required amount of water on each plant.
If the flow-meter rate stops (or becomes very low), then we assume the water has run out and we refill.
To re-fill

    The rover travels to the to water station and positions itself so that water outlet is above the water container mouth.
    The rover sends a 'squirt me' message to the water fill ESP-01, which activates the solenoid, supplies the water, and fills the on-board container.
    The rover continues to send 'squirt me' messages every few seconds to the ESP-01 until the container is full.
The rover then resumes watering.

There are many fail-safes built into the water-station software.
It will be normally closed (ie no flow), and close if power fails (and stay closed even when power comes back on). There are ESP8266 relays which claim to require continuous open commands from the ESP8266, but then they arrived, that's not what they did (at least they were cheap).
A 'squirt me' request will only turn on the water or 10s.
If a 'squirt me' request is not followed up by another request within 10s, the station goes into lock-down (turns off water and won't turn on again for at least 5 minutes).
If continuous 'squirt me' requests span more than 10m, the station goes into lock-down (turns off water and won't turn on again for at least 5 minutes).
If a 'shut-off' request is received, the station goes into lock-down (turns off water and won't turn on again for at least 5 minutes).
Any water requests which are received while the station is in lock-down causes the lock-down timer to restart.

There are also some other mitigation mechanisms
The water station is not taking water from the main house tank, so that even catastrophic spills will only drain a supplementary tank.
If the rover detects that the fill is taking too long, it times out - that is, it just stops sending 'squirt me' messages, and raises an alarm.

Water station

This is all that is required for control. An ESP8266 connects to the local WiFi network, listens for commands, and activates a relay to turn on and off the solenoid. It is mounted on the outside of the (metal) shed facing the nearest WiFi access point - because there is no way it would get WiFi inside the shed.
This is a 12V solenoid which will work with low pressure (ie gravity fed water). Many of them require a high water pressure to activate/de-activate them.

Positioning the water truck at the filling point

The rover must move to a position where it can fill from the water-station. How will the rover (and/or the water station) know that the rover is in the correct place to receive water? If the rover is not within the radius of the container mouth of the correct position, the water will spill.

    The water-station has a horizontal swinging arm, and the nozzle and a flexible hook are at the end of it.
    The rover has a vertical bar stickup up from the container mouth, which hits the swinging arm.
    On approach to the water station, the rover goes through a programmed approach path, bumping and swinging the the arm as necessary, and travelling away until the hook catches (this is detected via a limit switch).
    At this point the nozzle must be above the container mouth, so filling can begin.
    Clearly this hook mechanism is mostly vaporware at this point. I needs to actually be done.

Water truck

Float switch

Intended to be used with a fish tank. Can be used to detect if the tank is full.


Designed to work with a solar panel, should be good enough to pump out of tank into ground.

In principle it should be possible to just gravity feed this (and count the pulses to allow for reduced flow as the tank empties), but a pump will make the dispensing faster.

Pulse counter

SEN-HZ21 pulse counter. It produces a pulse every 1.5mL (0.0015L) or so. [Around 0.00152 L/pulse @ 5L/min and around 0.00145 L/pulse @ 9L/min].

It can be used to detect that the tank is empty (no flow), but also used to regulate exactly how much water is dispensed on each location.

Yes, the chassis is a repurposed GizMow-Mark-One. The shorter frame on this rover should make it useful for other things too - like carrying, fetching taking pictures, or even house a weeding or spraying mechanism.
Fancy containers are available, but Bunnings sells general purpose storage containers very cheap. This should be good enough for a proof of concept.
Sourcing the tank outlet was a bit of a challenge - Bunnings don't sell them that small. I had to go to a specialist plumbing shop.

Issues - slosh reduction


slosh needs to be prevented in the tank. Slosh will cause spillage, and may even cause the rover to capsize.

Arduino Code for the medulla water-station: the code for the water-station to fill the rover. aquarius: the Arduino code for the rover, which handles the rover bumper, the parking sensor, and the dispensing of the water.
The code which runs on the Raspberry Pi is not (yet) available.

Leave a comment

Something I'm doing wrong? Solved my problems? Got a better idea? Got a similar problem?
Think I might have solved your problem? Ninety-nine problems, but your robot ain't one? Say so ..