Since 2004, I've used a calcium reactor to maintain alkalinity and calcium in my reef tanks. It's a semi-simple setup, with a few necessary components. I have an article about how it is set up here: https://www.melevsreef.com/articles/how-set-calcium-reactor
The Trident is a Neptune Systems water testing device that measures alkalinity, calcium and magnesium, and results are saved by the Apex controller. After a few months, I decided I'd like to have my Apex control the calcium reactor based on current water parameters. This part is more complex, because the Trident measures alkalinity every six hours rather than constant up-to-the-minute readings. If you were to simply use an on/off approach, in theory you would stop adding any alkalinity to the tank for the next six hours, awaiting the next testing results to determine what should be dosed or not. It's possible the reactor would need to play catch-up as soon as the Trident measures a lowered reading - calling for more. My friend Duane wrote some code to limit how long the calcium reactor runs, rather than shutting it off entirely. This made sense.
For ease of copy & paste, here's the actual code:
If Alk > 9.00 Then OFF
OSC 005:00/015:00/000:00 Then ON
If Output CaRx-maximum = ON Then OFF
If CaRx_pH > 6.6 Then ON
If CaRx_pH < 6.5 Then OFF
If Output CaRx-limiter = ON Then OFF
The following is the breakdown with visuals to help explain what is going on.
I have a couple of virtual switches that help control the calcium reactor. I run the AquariumPlants Carbon Doser (electronic regulator), which is plugged into one out of my Eb-832 power brick outlets. The Apex turns the Co2 on or off. The calcium reactor and all other associated gear continues to run the entire time.
This is what it the main tile looks like in Apex Fusion, with the extra virtual switches and one named outlet:
If you look at CaRx-Limiter (a virtual switch) above, you’ll see it is "on." The reason it is on is because the Trident reports that my alkalinity is higher than 9 dKH, and thus I don't want to melt any more media at the moment.
Next: This is CaRx-Maximum (a second virtual switch), which basically tells the CO2 to always be on, UNLESS alkalinity has risen higher than 9.0. CaRx-Maximum means the reactor runs constantly, unabated. The regulator has power to its solenoid constantly, unless controlled:
Below is the CaRx-Limiter code. Please note that the OSC command is actually written backward yet works. If I understand OSC correctly, the first number (005:00) means 5 minutes ON, then the second number (015:00) means 15 minutes off. Basically, out of every hour, my CaRx is running normally for 15 minutes, then the CO2 is limited (turned off) for 45 minutes. OSC does this in short bursts instead of a single duration like 15 minutes on, 45 minutes off. Hope that makes sense. On 5, off 15, on 5, off 15... for the full six hour period. **You may decide you need to change those individual durations to get the least amount of swing.
This is the Co2 code. The outlet is always ON, unless the virtual switch CaRx-Limiter is ON. Then it shuts off the power to the regulator and no Co2 gets to the calcium reactor:
OPTION #1 (this is how mine is set up, because I use a Milwaukee pH controller to measure pH in the reactor)
OPTION #2 (if you use the Apex to monitor the pH in the calcium reactor, this is the code you'll want to use)
Keep in mind that you may need to adjust the pH level in your own code to match the system's demand. In the above code, what happens on Line 3 is when the pH rises above 6.6 (in the reactor), the CO2 is flowing (aka ON). Line 4 dictates if the pH measures less than 6.5 (ie: 6.49 or less), CO2 flow is OFF.
I've been running with this method for about 3 months, and it has kept the Alkalinity right around 9.0 dKH regularly. The slight dip you see in the next image is when I recently ran calibration testing to make sure my readings were repeatedly accurate.
Other details, not really related but on topic:
The Versa pump pushes tank water into the reactor at the rate of 50ml per minute.
pH in my reactor is set to 6.8
Carbon Doser bubble counter is roughly 1.5 bubbles per second.
If you have any questions, ask.