How do I calculate CO₂ from pH and KH?
Bicarbonate and dissolved CO₂ sit in equilibrium through carbonic acid, so CO₂ = KH × 15.72 × 10^(pKa − pH), with KH in dKH and pKa = 6.35 at 25 °C. At pH 6.8 and 4 dKH that is 22 mg/L (ppm). Every 0.2 of pH is a factor of 1.58; every degree of KH is linear. The chart below is that equation laid out, colored by what the number means, and it prints. Then the rest of this page is about how far to trust it — which is less far than the two-decimal answers elsewhere suggest.
| pH \ KH | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|
| 6 | 35 | 71 | 106 | 141 | 176 | 212 | 282 | 353 | 423 | 529 |
| 6.2 | 22 | 45 | 67 | 89 | 111 | 134 | 178 | 223 | 267 | 334 |
| 6.4 | 14 | 28 | 42 | 56 | 70 | 84 | 112 | 140 | 169 | 211 |
| 6.6 | 8.9 | 18 | 27 | 35 | 44 | 53 | 71 | 89 | 106 | 133 |
| 6.8 | 5.6 | 11 | 17 | 22 | 28 | 34 | 45 | 56 | 67 | 84 |
| 7 | 3.5 | 7.1 | 11 | 14 | 18 | 21 | 28 | 35 | 42 | 53 |
| 7.2 | 2.2 | 4.5 | 6.7 | 8.9 | 11 | 13 | 18 | 22 | 27 | 33 |
| 7.4 | 1.4 | 2.8 | 4.2 | 5.6 | 7 | 8.4 | 11 | 14 | 17 | 21 |
| 7.6 | 0.9 | 1.8 | 2.7 | 3.5 | 4.4 | 5.3 | 7.1 | 8.9 | 11 | 13 |
| 7.8 | 0.6 | 1.1 | 1.7 | 2.2 | 2.8 | 3.4 | 4.5 | 5.6 | 6.7 | 8.4 |
| 8 | 0.4 | 0.7 | 1.1 | 1.4 | 1.8 | 2.1 | 2.8 | 3.5 | 4.2 | 5.3 |
Green 20–30 mg/L (the injected-tank target); amber 30–40 (fish watch); red over 40. The classic hobby chart uses 3 × KH × 10^(7 − pH) and reads about 15 % lower than this one. Assumes all KH is bicarbonate; read a pH of ±0.1 as a CO₂ range of ×/÷1.26.
The formula everyone repeats, 3 × KH × 10^(7 − pH), is the same equation with a pKa of 6.28 folded into the constant. Carbonic acid's real first pKa in fresh water is 6.351 at 25 °C (Harned & Davis, 1943), so the classic chart reads 15 % low — 19 instead of 22 mg/L in the example above. Temperature moves the pKa a little: 7 % more CO₂ at 20 °C, 5 % less at 30 °C, for the same pH and KH. Neither correction is worth worrying about next to what comes next.
How accurate is the pH/KH chart? Why it lies
Three separate reasons, in order of size. First, the pH reading. The equation raises 10 to the power of pH, so every 0.1 of error is 26 % of CO₂. A liquid test kit read against a color card is good to about ±0.2; a probe that was calibrated last month is often no better. That means a "30 ppm" reading from a kit is honestly 19–48 ppm — the low end is mild, the high end is where fish gasp.
| pH reading good to | "30 ppm" could really be | Factor |
|---|---|---|
| ±0.05 | 27–34 ppm | ×/÷ 1.12 |
| ±0.1 | 24–38 ppm | ×/÷ 1.26 |
| ±0.2 | 19–48 ppm | ×/÷ 1.58 |
| ±0.3 | 15–60 ppm | ×/÷ 2 |
The same ±0.1 that is invisible on a pH chart is a quarter of your CO₂. A pH probe calibrated the same week is the single biggest accuracy upgrade in CO₂ measurement — it beats any chart correction.
Second, the KH may not be carbonate. A KH kit measures alkalinity — everything that neutralizes acid — and the chart assumes all of it is bicarbonate. Phosphate buffers ("pH down", "pH 7.0" powders), some aquasoil leachates and humic substances add alkalinity that is not bicarbonate, so the true bicarbonate is lower than the kit says and the true CO₂ is lower than the chart says. The error runs one way: you believe you have more CO₂ than you do, and you under-inject. Safe for the fish, starving for the plants, and the reason a drop checker exists (below). Third, timing. CO₂ climbs through the photoperiod; a morning reading and an evening reading are different tanks. Test at the same point every time.
What pH should I aim for to get 30 ppm at my KH?
Turn the equation around and the target pH falls out of your KH: 30 ppm sits at pH 6.67 in 4 dKH water and pH 6.37 at 2 dKH. Below about 2 dKH it gets awkward: 30 ppm at 1 dKH is pH 6.07, under the 6.5 where nitrification slows sharply, and under the 3 dKH where pH stops being held anywhere at all. To keep 30 ppm at or above pH 6.5 you need at least 2.7 dKH — which makes raising KH the first step for a lot of RO-water tanks, not the CO₂ regulator. The GH / KH adjustment calculator gives the grams.
| KH | pH for 20 ppm | pH for 30 ppm | pH for 40 ppm |
|---|---|---|---|
| 0.5 dKH | 5.95 | 5.77 | 5.64 |
| 1 dKH | 6.25 | 6.07 | 5.95 |
| 2 dKH | 6.55 | 6.37 | 6.25 |
| 3 dKH | 6.72 | 6.55 | 6.42 |
| 4 dKH | 6.85 | 6.67 | 6.55 |
| 5 dKH | 6.95 | 6.77 | 6.64 |
| 6 dKH | 7.02 | 6.85 | 6.72 |
| 8 dKH | 7.15 | 6.97 | 6.85 |
| 10 dKH | 7.25 | 7.07 | 6.95 |
At 25 °C, all KH as bicarbonate. Red cells sit under pH 6.5, where the biofilter slows — at that KH, hit the target with less CO₂ or raise the KH first.
Take a cup of tank water, let it sit with an airstone for a day, and read its pH; compare with the tank at the end of the photoperiod. The bicarbonate is identical in both, so CO₂ = degassed CO₂ × 10^(drop): a full 1.0 pH drop is ten times whatever the degassed water held, whatever KH is and whatever it is made of. That is why "aim for a 1.0 pH drop" became the standard advice — it sidesteps every chart error. What it does not sidestep is the baseline. Water in equilibrium with outdoor air holds 0.6 mg/L at 25 °C; in a closed room at 1,000 ppm CO₂, 1.5; a stocked tank with fish and bacteria breathing into it, 1.5–5. So the same 1.0 drop is 15 ppm from 1.5, 30 ppm from 3 or 50 ppm from 5 — the answer scales one-for-one with a number nobody measures. The tool prints all three. If the pH-drop result and the pH/KH result disagree by more than that spread, your KH is not all carbonate.
What color should my drop checker be? (4 dKH and 30 ppm)
A drop checker is the pH/KH chart with the KH problem removed: the bulb holds a 4 dKH reference solution — bicarbonate and nothing else — behind an indicator, and CO₂ crosses the air gap until the solution matches the tank. So its color is a pH reading of water whose KH you actually know. Green is the indicator at about pH 6.6, which at 4 dKH is 35 ppm (30 on the classic chart — that is where "4 dKH = 30 ppm" comes from). But a color is read by eye to about ±0.2 pH, so green means 22–56 ppm, and it lags the tank by an hour or two. It is a yes/no instrument — "is CO₂ roughly where I think it is" — not a gauge, and that is still worth having when the chart's second failure is exactly the thing it is immune to.
| Color | Indicator pH | CO₂ at 4 dKH | Readable as | Classic chart |
|---|---|---|---|---|
| Dark blue | 7.2 | 9 ppm | 6–14 | 8 |
| Blue | 7 | 14 ppm | 9–22 | 12 |
| Blue-green | 6.8 | 22 ppm | 14–35 | 19 |
| Green | 6.6 | 35 ppm | 22–56 | 30 |
| Yellow-green (lime) | 6.4 | 56 ppm | 35–89 | 48 |
| Yellow | 6.2 | 89 ppm | 56–141 | 76 |
Bromothymol blue read against a card, ±0.2 pH. Fill the checker with a bought or mixed 4 dKH solution, never tank water — tank water brings the non-carbonate KH problem back inside the bulb.
How much CO₂ is too much for fish?
The injected-tank target is 20–30 mg/L: enough that plants stop being CO₂-limited, low enough that fish behave normally. Past 30 the fish start to pay for the plants' gain, and past about 40 they show it — hanging at the surface, gasping, sitting on the bottom. Those are hobby consensus figures, not species limits; what actually hurts is CO₂ against oxygen, so a tank with good surface movement tolerates the top of the range and a still one does not. Under about 4 mg/L the water is at air equilibrium: no injection is reaching it, the sample degassed before you tested it, or the reading is from before the solenoid opened. The tool grades every result against these bands and says which case you are in.
Is a 1.0 pH swing every day safe? Why is my pH so low?
In an injected tank, yes — because it is not an acid swing. CO₂ moves pH without touching KH, and the fish experience it as CO₂, not as a change in the water's chemistry; the same 1.0 swing from dosing acid would be a different matter. What is not fine is a swing on top of a KH under 3 dKH, where there is nothing holding the pH anywhere and the injection can push it through 6.5 and stall the filter — the table above marks where that happens. And a low pH with the CO₂ off is not a CO₂ problem at all: it is the KH gone, usually eaten by nitrification, which the freshwater parameters chart explains. Unstable CO₂ — not high or low, but changing — is also the condition most reliably linked to black beard algae, per the algae ID guide; the fix is a steady reading at the same hour each day, which is what this page is for.