Low-Power Pump for Gravity Water Tank

Introduction: Low-Power Pump for Gravity Water Tank

About: Twitter: @bobparks

This project started as a test to see the least amount of power needed to pump water to a gravity tank high off the ground. We wanted to find the most efficient pump possible, maybe just a few watts. The interesting part seemed to be the time shift -- if the pump ran very slowly and continuously, it would fill a tank over time. As long as you only used the water tank once a day, you would have many gallons available at any single time.

The result was a solar-powered pump that moved water continuously at around 6 gallons an hour to a tank 15 feet in the air, running at 6 volts and .3 amps, or 1.8 watts. In 8 hours, the system filled a 50-gallon tank, and then we could attach a garden hose to irrigate plants, water the car, and spray small children. As long as the end of the hose was lower than the bottom of the barrel, the pressure in the hose was enough to spray 20 feet away or more. 


It was hard to find a small DC motor that would push water to a tank 15 feet off the ground via a tube. Most small pumps don't have enough hydraulic head for this application; that is, they don't have enough oomph to move water through a tube uphill. There were a few pumps sold online for laboratory use that might have worked, but they were expensive. First, we tried to make our own pump from a pine board, motor, and small plastic impeller (total disaster). Then, we tested aquarium pumps and novelty fountain pumps (they have high flow rates but very little hydraulic head). Then, we used the pump inside a WaterPik teeth-cleaning gadget. That's not a pump so much as a plunger system, but it is very powerful. The WaterPik device worked well for a while, but it eventually burned out my DC motor because it required too much torque. Finally, at a toy store, we discovered $10 battery-powered Nerf Super-Soaker water guns. Inside these toys are powerful pumps with integrated DC motors.


An Arduino Uno microcontroller cycled the pumps on and off to prevent burning the motors out. The Arduino also used a continuity sensor to test the water level in the supply tank so the pump wouldn't run dry. An Arduino Motor Shield switched the Super Soaker pumps on and off.

Many yards of 5/16-inch PVC tubing connected the pump to the tank.

We wanted the water source to be a rain barrel, but to cut down on hassles during testing, we drew water from an over-productive well nearby. You will see the well's bulkhead in the photos.


The system worked autonomously for a while, except for a few things. The gravity tank would keep filling and running into the overflow for hours unless the system was stopped manually. Also, the battery would run out on cloudy days when the solar charger couldn't keep up.

The next steps for the project are to program a water-level tester for the gravity tank so that the microcontroller turns off the pump when its work is done. I also would like the microcontroller to check the battery level, so that if the solar charger can't keep up, the microcontroller shuts the pump down. (Programming that in will probably be tough for me as an Arduino beginner.) These elements would make the system run more or less autonomously.

This project had a nice highlight. While I was working on it with the kids, it was featured by Radio Shack's Great Create campaign. The project showed up in a Radio Shack ad in the fall of 2012, and the company gave us a budget to upgrade the components -- free solar panel, charge controller, water tank, and rechargeable battery packs!


I am very much a beginner at microcontroller programming so I cribbed heavily from Instructables user liseman's Garduino code and his descriptions of how to make moisture testers. Here's my modified code. Please be kind if you see a lot of pretzel logic in the code.

//define analog inputs to which we have connected our sensors
int moistureSensor = 0;
int voltageSensor = 1;

//define digital outputs to which we have connecte our relays (water and light) and LED (temperature)
int pump = 12;
int pump2 = 13;
int motorbrake = 9;
int motorbrake2 = 8;
int LED = 13;
int i = 0;

//define variables to store moisture, light, and temperature values
int moisture_val;
int voltage_val;

//define variables to store moisture, light, and temperature values
int counter;

void setup() {
//open serial port
//Setup Channel A
pinMode(pump, OUTPUT); //Initiates Motor Channel A pin
pinMode(motorbrake, OUTPUT); //Initiates Brake Channel A pin
//set the water, light, and temperature pins as outputs that are turned off
pinMode (LED, OUTPUT);
digitalWrite (pump, LOW);
digitalWrite (motorbrake, HIGH);
digitalWrite (LED, LOW);

void loop() {
// read the value from the moisture-sensing probes, print it to screen, and wait a second
moisture_val = analogRead(moistureSensor);
Serial.print("moisture sensor reads ");
Serial.println( moisture_val );

//turn water on when soil is dry, and delay until soil is wet
while (moisture_val > 15 && counter < 2)
digitalWrite(pump, HIGH);
digitalWrite(motorbrake, LOW);
analogWrite(3, 140);  //Spins the motor on Channel A at full speed
digitalWrite(pump2, HIGH);
digitalWrite(motorbrake2, LOW);
analogWrite(11, 120);  //Spins the motor on Channel A at full speed
digitalWrite(LED, HIGH);
counter = counter + 1;
moisture_val = analogRead(moistureSensor);

digitalWrite(pump, LOW);
digitalWrite(motorbrake, HIGH);
analogWrite(3, 0);
digitalWrite(LED, LOW);
digitalWrite(pump2, LOW);
digitalWrite(motorbrake2, HIGH);
analogWrite(11, 0);
counter = 0;

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Instructables Design Competition

Finalist in the
Instructables Design Competition

Be the First to Share


    • Declutter Speed Challenge

      Declutter Speed Challenge
    • First Time Author Contest

      First Time Author Contest
    • Leather Challenge

      Leather Challenge

    3 Discussions


    2 years ago

    Did you try a 12volt windshield washer pump? Go to automobile supply store or better, auto wreckers yard. I used one once with a foot operated switch


    6 years ago on Introduction

    The water level tester will be easy with an aurduino just put two wires at the desired fill level one wire to 5 volts one wire to an analog input with a pulldown resistor then measure the amount of power returned with and without water using serialprint.ln and u can write an if statement with the values you found to shut off the water.


    7 years ago on Introduction

    I enjoyed the story about finding the right pump. I've run up against that "hydraulic head" problem before (I had no idea that's what it was called,) while trying to make a water replacement system for an aquarium. I never did come up with a good solution.. electric squirt guns would have been perfect!
    Cool project :)