I like aquariums, specifically freshwater planted tanks. Some people set one up and let it do whatever it wants, while others treat it like a chemistry set with fish in it. I land somewhere in the middle. I try not to interfere too much, but I want the plants and animals to be healthy, which means fertilizing and keeping the water chemistry where it needs to be. Over the course of a month, I dose several different liquids on different schedules and in different amounts. And as always, if it’s worth doing, it’s worth overdoing.

You can absolutely buy a dosing pump for an aquarium. They usually come with one, two, or three pumps that drip liquids into the back of the tank. But why buy one when I could build one? My version had a twist, though. Instead of dripping chemicals into the tank, I wanted to design an injector that would push them directly into the flow of water coming out of the pump, so everything got mixed before it ever reached the aquarium. Four pumps, four bottles, four liquids, all feeding into one injector inline with the water.

For the pumps, I used peristaltic pumps. These have a tube that runs through the housing, and a spinning cam squeezes the liquid along the inside of that tube. Nothing ever touches the liquid except the tube itself, which keeps the water completely away from the electronics. That seemed like a smart move for something that would live in a cabinet under a fish tank. The brains of the whole operation was the Arduino Uno Q, which is a really interesting board because one side is a microcontroller and the other side is a full Linux computer.

The electronics were pretty straightforward. The Arduino outputs 5 volts from its pins, but the pumps need 12 volts to run, so I used relays to bridge the gap. A relay takes one voltage as a control signal and switches something at a different voltage on the other side. If that sounds interesting and you want to go deeper, I have an online course called Arduino for Makers that covers all of this stuff with no experience required. I wired everything up on a breadboard with a 12 volt supply and a buck converter, and after swapping out one dead buck, the Arduino clicked a relay and spun a pump on command.

The injector was a different challenge. It’s basically a pipe with smaller pipes entering it at angles, which is a nightmare for an FDM printer and wouldn’t be watertight anyway. So I printed it on an SLA resin printer in clear resin, because if you can watch the injection happen inside the part, why wouldn’t you? After a wash and a UV cure, the print came out great, barbs and all. It even had a version number built right into the model thanks to a plugin I made for Autodesk Fusion. If you want to get better at designing parts like this, check out my Fusion for Makers course.

While mounting the components, I went down a fun rabbit hole. I was measuring all the mounting holes on the pumps, the relay board, and the Arduino so I could model a base plate, when it hit me: why isn’t there a breadboard for components? So I printed a grid of holes and a pile of flexible pins and tabs that snap parts in place without needing the mounting holes to line up perfectly. It’s probably impractical and maybe unnecessary, but it held everything in place and kept it all movable, which is exactly what prototyping needs.

The software was where this thing earned the word “system.” Using App Lab on the Uno Q, I built a web interface backed by a SQL database. Each pump shows its status and how much it has dosed that day. You can rename pumps, set daily limits so you can’t overdose the tank, calibrate the flow rate of each one, dose manually on demand, and set schedules to run automatically. All of it works from my phone. Calibration took some trial and error, since my first five milliliter test delivered two, and the fix after that delivered eight. A little math later, it landed close enough.

For the final test, I set up two bins, an aquarium pump, the injector, and four bottles of water tinted with food coloring so I could actually see each dose getting carried into the flow. One at a time, red, blue, yellow, and green all pulled through their pumps and swirled into the stream, all triggered from the app. I even ran one without any water flowing just to watch the dye curl through the clear injector, and honestly, that might have been the coolest visual of the whole project. Then the scheduler fired on time, on its first try.

I was fully expecting a leak, a short, or some weird software gremlin, and instead it just worked. It’s not finished. There’s no security on the web app yet, and the electronics need an enclosure before they can safely live anywhere near water. But the real goal was to see if I could pull all of these different disciplines together to deliver measured liquids into an aquarium, and that absolutely happened. If you’ve got ideas for making it better, I’m not done with it, so let me know. Thanks for hanging out with me on this one. Now, go make something awesome!

TOOLS

(purchasing via these affiliate links supports ILTMS)

Woodworking

Finishes & Adhesives

3d Printing/CNC/Laser

Welding

Electronics

Other Stuff