A few years ago, Alissa and I saw an aquaponics display at the State Fair (in the hexagonal "hunny building" as I call it, though I'm sure it has a real name). As I often find myself saying, I exclaimed "that looks neat, let's do that!" Alissa agreed, and thus began a multi-year journey.
For the uninitiated: aquaponics is simply using fish poo to feed bacteria (and optionally worms), which produce nitrates to feed the plants, which then filter the water before it gets returned to the fish tank. You can grow pretty much any veggies or other plants you want, as well as edible fish such as tilapia. This can make aquaponics appealing and useful in extreme food deserts, since the only "input" you really need is sunlight and fish food.
Since we are lucky enough not to suffer from food scarcity, our aquaponics goals were much less ambitious; basically we just wanted a "free"1 source of fresh veggies for our bunny rabbits, Luke and Daisy, during the winter months when our outdoor garden is frozen.
After finishing Aquaponic Gardening, I drew a pencil and paper sketch of what I thought our system should look like. In fancy lingo, it would be a slightly modified "CHIFT-PIST" design, which stands for "Constant Height In Fish Tank - Pump In Sump Tank.” ("slightly modified" in that we have an additional pump in the fish tank, too). The main benefits of this design are that the fish tank water height remains constant (changing water height can stress the fish), and both pumps are constant-on (turning a pump off and on can shorten its life). If you're really into the nitty-gritty details, you can also read this footnote: 2
grow beds (they weigh a figurative ton - shipping alone was $100 for the two beds!). I also scoured the internet to find the best price on hydroton, a clay-pebble growing medium for the plants; I eventually found Greener Gardens in Richfield had a good price, and Alissa and I had a fun outing there to purchase 400 pounds of the stuff.3
Alissa's sister Abby helped us rinse all the hydroton as we added it to the grow beds on January 4, 2020. (Er, excuse me, Winnie reminded me he actually was the one who did all the work. My mistake.) By this time I'd also made countless trips to Menards to acquire various PVC pipe fittings in order to assemble the plumbing, as well as spent countless hours researching grow lights.4
Once water was flowing, I started "cycling" by adding Ammonium Chloride (in the absence of fish waste) to encourage bacteria colonies to take up residence, and somewhere in here we added our first plants, too. I tested the water almost daily to watch for nitrites (which would indicate the presence of ammonia-eating bacteria), and then waited not-so-patiently for nitrates to appear, indicating that the tank was fully cycled and ready for fish. After days then weeks of testing but not seeing any nitrates, I kept adding more and more Ammonium Chloride, to no avail. I was baffled.
I bought some cheap water test strips from Amazon and was shocked when I dipped the strip into the water and saw a nitrate reading off the charts (like, 140+ or something). I went back and re-read the directions in my original water test kit, and realized I'd been testing for nitrates completely the wrong way; while with the pH test you just have to invert the test tube a couple times, for the nitrate test you have to shake one of the solution bottles for 30 seconds before adding to the test tube, and then shake the test tube a full 60 seconds afterward. I'd done none of that. Once I actually followed the directions, the test tube clearly showed an overabundance of nitrates.
This was both good and bad news. Good in that it meant the tank was, indeed, fully cycled, but bad in that we couldn't add fish until the nitrate level was back under control (down into the 10-20 range or lower). It took several months of partial water changes, adding plants, and adding a canister pump/filter with nitrate-reducing pads, before the nitrates decreased enough so we could add fish.
We worried about our water quality but after re-testing (and bringing a sample to the pet store to test, too), there didn't appear to be anything obviously wrong. We went back to Aqualand and bought one more goldfish, whom we named Silver (because he was all silver), and enjoyed his presence for about a week before he disappeared. There weren't many hiding spots in the tank, but we spent over an hour trying to find him. At one point, I turned off the pumps and a whole bunch of biologic-looking "stuff" came out of the fish tank pump, so we assumed he must have gotten sucked into there, or died/was eaten by Dewey and these were the remains. I used the canisters pumps suction to get most of the debris out and then turned everything back on.
A day or two later, I went down to feed Dewey and... there was Silver! We determined he must have been hiding in the fish castle (I could have sworn I saw a fish tail in there when we pulled it out of the tank, but then when we looked again we didn't see anything, so he must have been hiding way up in the tower spire or something). He was looking quite worse for wear, with his top fin gone - presumably torn off in trying to escape the castle decoration's interior. I put him into a bucket with tank water and medicine and a bubbler, and he died a few hours later. To the degree you can emotionally bond to a fish, I was really sad to lose yet another one. And we did remove the castle ornament so if/when we get yet another fish, there's no risk of it getting stuck in there.
Ultimately I've been able to achieve three of my five sensor goals. Let's talk about the successes, first. Once a minute the Pi checks for water temperature, lights on/off, and water height, and logs those values into a MySQL database. If the temperature goes out of bounds, or one of the grow lights is off for more than 15 minutes during the day (perhaps because we went to harvest kale and forgot to turn the light back on when we were done), or if the sump tank's water height falls below a certain level for an extended period of time (due to overall evaporation from the system), then the Pi emails me so I know something needs attention. I've also added a small LCD display to the front of the Pi box that will print warning messages.
liquid level sensor from Adafruit, allowing the Pi to measure the water height in the sump tank. Unlike the fish tank (which maintains a constant height of water), the sump tank water level is quite variable. As both grow beds fill with water over the course of 5-10 minutes, the sump tank will slowly get emptier; when a grow bed is full, it will dump all its water back into the sump tank in less than 30 seconds. So, looking at the sump's water height at a single point in time isn't very helpful, because, for instance, if both grow beds are nearly full of water the sump tank water height will be fairly low, but that doesn't necessarily mean we're short on the total amount of water in the system, it just means the grow beds are full and about to siphon their water back down. So instead, I have the Pi look at the past 12-hours of water height data and find the highest water level during that time. I make an assumption that both grow beds will have emptied near-simultaneously at least once during that timeframe. After adding a "fudge factor" and doing some math based on the dimensions of the sump tank, I can know that if the highest water level was below 9 inches, that means we need to add 5 gallons of water. If I ignore the warning messages for a couple days and the highest measurement dips below 7 inches, that means add 10 gallons. And so on. By design, the Pi gets more insistent / annoying about it's warnings the longer I ignore them.
Apparently the sensor requires the water around it to be still, instead of swirling with currents like there are in the aquarium, because I got readings that were all over the place (one minute it might say 4.3, the next 2.6, and the next 11.5). I toyed with the idea of buying some little pumps that would every-so-often pump water out of the fish tank into a small testing container, take the measurement with the pH sensor, then pump the water back out and pump distilled water in. But, honestly, that seemed like over-engineering a solution that wasn't a huge hassle just to do manually. Using the test tube kit it takes 1-2 minutes to test pH and clean up, and it only needs to be tested every few days or once a week, so... I gave up on the pH sensor idea.
1 "Free" like a puppy. When you add up the cost of electricity, water refills, various pH balancing chemicals, etc, it's probably more expensive than just going to the grocery store.
2 In this design, water (and fish poo) is pumped constantly from the fish tank into the two grow beds (and also through a splash bar back into the fish tank, to help with aeration). Each grow bed has a bell-siphon, which means when the water in a grow bed reaches a depth of 10" or so, physics happens and the water gets siphoned down the drain to the sump tank (underneath both grow beds). Once the grow bed has drained, air enters the pipe, breaking the siphon until the grow bed fills up again. A pump in the sump tank, meanwhile, is constantly pumping water from the sump back into the fish tank. To prevent the main fish tank from overflowing, there's an overflow box hanging off the back which drains excess water back to the sump tank; the overflow box also has a small, self-priming pump attached so it never loses siphon. Lastly, the fish and sump tank pumps are each connected to mechanical water level sensors that will cut power to a pump if the water level drops too low in that tank, thus avoiding dry-pumping which would damage the pump.
3 Regular readers might recall our puppy Winnie writing about "Clifford kibble" in a previous blog post.
4 One wonders what Google makes of my search history sometimes. I'm sure they think I'm growing pot; for the record: we're not, but I will say the marijuana farmers on the internet know a lot about what are the best grow lights for indoor plants.