Introduction: Low-Power Pump for Gravity Water Tank

About: Twitter: @bobparks
THE IDEA

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. 


FINDING A SMALL WATER PUMP

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.

OTHER STUFF

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.

PROBLEMS AND NEXT STEPS

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!

ARDUINO CODE

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
Serial.begin(9600);
//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 );
delay(1000);

//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);
delay(20000);
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);
delay(20000);
counter = 0;
}
Instructables Design Competition

Finalist in the
Instructables Design Competition