CO₂ automated on a fixed window with hardware safety limits, why the usual pH/KH table does not apply here, and why the pH loop is deliberately left open.
Published
Purpose
To document how CO₂ is controlled on a tank kept at or near zero carbonate hardness, where the usual pH/KH reference table does not apply.
Background
The common way to infer dissolved CO₂ is a pH/KH table. On active aquasoil run without a buffer, carbonate hardness sits at or near zero, which makes that table unusable, because a tiny KH error produces an enormous CO₂ error. What remains repeatable is the change in pH between degassed water and water under injection. This project therefore uses pH drop as an operational control signal rather than an absolute dissolved CO₂ measurement, and publishes no estimated ppm figure. That near-zero figure was an assumption about this water for longer than it should have been. It was measured on the 8th of August 2026 and came back at 0 dKH, with general hardness at 6 dGH, so the reasoning below now rests on a reading rather than on an expectation about what aquasoil does.
Methodology
01Drive the solenoid from a controller outlet on a fixed daily window, through a virtual output so the relay is not switched repeatedly.
02Keep the hard limits on the controller itself: a pH floor, a permitted time window, and a leak sensor.
03Log pH continuously so the day's curve can be read whether or not anything is steering by it.
04Do not close the pH loop while carbonate hardness sits at or near zero. See the reasoning below.
05Reassess when KH rises: capture the degassed pH each morning and hold a target drop below that baseline through the photoperiod rather than aiming at an absolute pH.
Observations
·Keeping the safety limits on the controller rather than in software means the tank survives a restart or a broken script.
·The absolute pH values here are low, and that is the expected consequence of running active aquasoil at 0.0 dKH rather than a sign of a bad reading.
·The probe was changed on the 19th of September 2026. An Apera 203DJ-C double-junction electrode now reads pH on the controller, through a 3-foot BNC extension that was fitted before calibration and is therefore part of the calibrated path. It replaced a roughly eighteen-month-old Milwaukee MA911B/2. Calibrated on two points, it verified at approximately 7.00 and 4.04 in fresh buffer.
·Two instruments disagree in aquarium water and both read buffers reasonably well. The controller with the Apera reads about 5.97 to 5.99 where a separately recalibrated Hanna HI98129 reads about 5.73, a gap of roughly 0.24 to 0.30 pH. Before its recalibration the Hanna disagreed substantially at the acidic end; afterwards it read about 3.98 in 4.00 buffer and about 7.03 in 7.00 buffer while stabilising. Neither instrument is called failed here, because passing buffer checks and disagreeing in tank water is exactly the case where the buffer check does not settle it. What follows from it is a procedural rule rather than a verdict: every pH drop is calculated from the Apera on both sides, and Hanna and Apera readings are never mixed in the same figure.
·The degassed reference is 6.55, measured on the 19th of September 2026 with the Apera. A fresh sample of tank water was stirred aggressively in an open container for about six minutes, the stirrer was stopped, and the probe was allowed to stabilise. This replaces the earlier 6.22, which was a Hanna figure and is no longer the baseline any CO₂ calculation starts from. The tank itself read about 6.0 that evening with CO₂ off; the stirred sample, not the tank, is the reference. The drop is therefore 6.55 minus the stabilised in-tank reading during the CO₂ period, and no CO₂ increase follows from the old baseline.
·Probe verification is deliberately not recalibration. The Apera is checked in fresh 7.00 buffer on the evening of the 23rd of September 2026, and occasionally over the first couple of weeks, to establish how stable it is. If it holds, checks move toward roughly monthly. Recalibrating on a schedule would erase the record of whether it was drifting, which is the thing the checks exist to find out.
·The loop has been closed before. Pearl held injection against a target drop off the morning degassed baseline, and it worked. It was reverted to a fixed schedule anyway, so the open loop here is a decision that has been tested rather than a feature nobody built.
·With active aquasoil and near-zero KH, pH is influenced by more than dissolved CO₂ alone, so this project does not treat pH as a direct CO₂ concentration measurement. The continuous pH curve is used to review and tune the injection schedule rather than as the sole feedback signal controlling the solenoid. That is a decision about this water, not a general claim about what any controller would do.
·The tank also runs well down the pH range already, so a loop holding a target drop would largely be enforcing a figure the water is under anyway. A fixed window is the steadier control in this regime, and it is a decision rather than an unfinished feature.
Scope
·Why the pH drop is read rather than a pH/KH table at near-zero KH
·Why the pH loop is deliberately left open, and what would change that
·How the degassed baseline is captured, and which instrument it must be measured with
·Which limits live on the controller rather than in software