Introduction: Basic Ebb and Flow a Simple Hydroponic System

These little guys can get up to 9 ft tall.

The Situation

When I make things I often use what I have around the house. In this case, I thought of these five-gallon buckets because the plant that I want to grow is a Cherokee Purple Tomato Bush, which can grow well over 6 ft.


Partial parts list*

5 Gallon Bucket

Storage Bin (Reservoir) Mine was 27 Gallon

A small length of Garden Hose

2 Hose clamps

25 Watt Fountain Pump

Bulkhead and hose adapter

A small length of PVC Pipe


5 Gallons of Expanded Clay Pellets

Raspberry Pi w/relay board

5 Bricks

Nutrient Solution

* A partial parts list because I’m a big believer in adapting to what you have available… one reason the project took this particular shape is that I had 5 Gallon buckets, the PVC pipe, and the bricks left over from previous jobs. I could also get my hands on some garden hose, a 35 Watt pump, and not quite enough of those expanded clay pellets…
It’s only from there that I went shopping!

**You should also adapt these plans to whatever you may have on hand and to whatever scale you need...

Step 1: The Basics

One of the best features of an ebb and flow system is that it’s very simple.

You have a fountain (under-water) pump in a reservoir of nutrient solution (not shown). Periodically the solution is pumped into the 5-gallon bucket containing the plant flooding it [ The "Ebb" ] and feeding the plant. The overflow pipe sets the level the solution can reach in the bucket before pouring back into the reservoir. 2” from the top worked well for me.

The solution is then allowed to drain back through the hose and into the reservoir [ The "Flow" ] so that the roots can get the oxygen they need. The schedule for the Ebb and Flow, or pump turning on and off, is controlled by a timer, in this case, a Raspberry Pi running a simple Python program.

This is perfect for me because I’m always off on another project and forget to water and fertilize etc… This system continuously waters, feeds, and provides oxygen to the roots.

Step 2: The Bucket

I have this scroll saw bit on my Dremel tool so I used that to cut the two holes in my bucket, but it could be done with a standard hole saw.

This hole at the base of the bucket's side attaches to the garden hose with this bulkhead found in the plumbing section at the local Home store. [make sure you leave enough space below the hole for the bulkhead to turn freely inside the bucket]

Step 3: ...also the Bucket

I had this pressure fitting for a PVC drain and so I ground out the middle and turned it into a screw-on bulkhead for my overflow drain. That was convenient, but the drainpipe could easily be epoxied in place, or use a commercial bulkhead like with the previous hole.

And How the Bucket appears...

INSIDE... (The PVC overflow drain is epoxied into the improvised bulkhead.)

and OUT! (note the blue adapter, lower left, bought with the black bulkhead to attach the garden hose)

Step 4: The Reservoir (top)

  • Now you’ve got to measure for the lid hole. This one you CAN’T cut with a common hole saw. I had my Dremel but a jigsaw will do the trick.
  • The hole should be loose-fitting. The idea is to keep light out of the reservoir to prevent algae from growing fat on the nutrients and providing little space from which the nutrient solution can evaporate.

Step 5: The Reservior

Here is the reservoir (a 27Gallon storage bin) with pump in place but still no solution. The pump is 30 watts and more than powerful enough for the job. I’m using the bricks to raise the bucket above the waterline of the reservoir. The reservoir holds 12 gallons when half full, just topping the bricks. Remember the bottom of the bucket has to be near or above the waterline for gravity to do its part...

With 12 Gallons of water and those bricks, this reservoir will be very heavy. That’s GOOD! I don’t intend to move it and I wanted it heavy so it won’t blow over when the plant gets large. I also put a heavy brick at the bottom of the 5 Gallon Bucket that sits on top of these bricks.

Step 6: And Here We Are Back at the Basic Setup

Now that we are hooked up you’ll need hose clamps for each end of the garden hose.

When it became obvious the drain has to be well below the level of the aggregate (I’d never tried the drain inside the grow medium before) I improvised this wire cage on the fly… Works, but I’ll think of something better… The aggregate will be filled to the brim when the plant is introduced. A good layer of dry aggregate on top is important to keep light from reaching the wet pellets to once again discourage algae growth.

Step 7: The Raspberry Pi Timer

I’d recently added a HAT (Hardware Attached on Top) to my Pi which is simply a name for conveniently sized hardware ad-on, in this case, a series of 3 relays attached via the GPIO General Purpose Input/Output Pins.

In this old lunch box is the Raspberry Pi 3B+ with a 3 Relay “HAT” and an electrical outlet. The far end of the outlet has continuous power and will power the Raspberry Pi, while the near outlet’s hot side is diverted through a relay on the board [Please see the circuit diagram]. A very simple program written in Python3 serves as a timer for tripping the relay and thus turning the pump on and off. With the additional relays, I could automate lights and add a third function as well. Any Pi can be used to run this. I plan to get a “Zero” so I can have my 3B+ back to experiment with.

Step 8: Simple Python Program

The Following articles showed me how to use relays with the Raspberry Pi...
The circuit design and lunchbox are my own.

How to begin with Raspberry Pi GPIO programming using Python

Controlling Any Device Using a Raspberry Pi and a Relay Module

I used these sources to assemble the Python program, you see above.

  1. Type the program out in any text editor.
    [Note: In Python, the indenting in the code matters. Not an exact number of spaces but that they are present, consistent and related items are in line vertically.]
  2. name it:
  3. Store it in a folder on your Raspberry Pi.
  4. Launch the program from the Terminal with the following command and the path to the folder you stored it in. Sudo python3 /home/pi///

Step 9: Eureka... or Wait What?

You should quickly see the terminal print out:

ON 10min       # Because we told it to, followed in 10 minutes by
OFF 35min      
ON 10min      
OFF 35min     
ON 10min       
OFF 35min     
ON 10min<br>

Is it Working?
When it’s on, the solution should quickly fill the bucket and begin to pour through the overflow pipe. And when it’s off it should take a couple of minutes for the solution to drain back into the reservoir.

Note: the “time.sleep” is where you set the length of an event and is measured in seconds. Depending on your plant and growth medium these times can vary. Just Google “Ebb and Flo timing” and you will find a slew of information on the topic, including some average numbers you can start with. 10 min on and 35 min off are what I’m currently trying.

If it's not working begin to trace the problem starting with the outlet. Is everything getting power. Are the pins of the relay connected properly. There are 3 different methods for identifying GPIO pins strangely enough. Make sure your method is compatible with your program and that you've chosen the correct pins (mine is "Board" [6th line of code]). Does anything happen when you start the program. The relays are mechanical. You should hear them click when the pump turns on. Is the outlet wired correctly? On most outlets, there is a copper tab that ties the upper and lower outlet together. You have to break the tab on the hot side to separate the outlets.

Step 10: The Operation

Though you won’t be watering every day don’t get the idea that this system needs no attention at all. You will need a nutrient solution. There are tons of commercial options ranging from cheapish to very expensive, or you can make it yourself, or get into “Aquaponics” and have your fish make it for you while you also take care of them. The commercial stuff is on the “Base” side of pH (a measure of acidity) and here’s why that’s important!..

You will want to check the pH of the solution at a minimum. Plants can only feed in a certain range that’s particular to that type of plant. Tomatoes for example prefer a slightly acidic solution (pH 5.5-6.8). You can measure pH with a kit for fish tanks, or there are cheap electronic pH Meters. When you find out that the pH needs to be adjusted, you’ll need a way to adjust it. Search “pH Up” or “pH Down” for Bases and Acids respectively. Since I have tomatoes I will need “pH Down” to make my solution slightly acidic, being careful not to add too much. A little too much (and a little goes a long way) pH Down and I might add more fertilizer (not Ph Up adjuster). Being that it’s on the basic side that would bring the pH up again. It’s a better choice than to keep toying with adjustment chemicals. Add a little at a time and be patient at first.

You can also measure the solution’s strength, the solution temperature, etc. etc. Monitoring and adjusting pH is a must-do. The rest may improve your plants but can be learned as you go. Whatever you need to do the top swivels open so that it is even easy to bail it out and start over if you were so inclined…

In the beginning, mixing the solution and getting the pH right will take a lot of attention, but once you get it dialed in and you know how much of everything it takes to balance the system, you can set it and forget it for a time, checking on it every few days or even once a week.

So there you have it a very basic ebb and flow Hydroponic system for a large plant. One that I hope you can adapt to your needs large or small. If you have any questions feel free to contact me at
And check out my website: for other do it yourself projects ideas and especially the plans for the Coolest little pinhole camera ever made.

Step 11: What I Learned From the First Growing Season


The growing Season is over and I thought a few Notes about what I learned are appropriate.

1. When the power goes out the program has to be initialized again or the plant will experience drought conditions... You can make the Raspberry Pi run the program at startup and I'm looking now at a couple of methods for next season...

2. A wire cage! That plant really got massive and needed more support. I knew it would, but did not prepare enough ahead of time!

3. RAIN! A little rain will make little difference. But the huge rainstorms, the like of which we had this summer will ruin any ph balance you've achieved and possibly flood the reservoir leaving the roots under water perpetually and drowning them. (I'm also on the south shore of Long Island, a storm picked up saltwater and left a film on all my garden plants killing many and lowering the yield on others.)This plant, being native to the area, was actually pretty hearty.

Even with the harsh weather and saltwater (and my mistakes), it yielded some tasty but oddly shaped tomatoes!.. but I expect better yields next year.