Hacker News new | ask | show | jobs
by abirkill 1442 days ago
The auto-calibration systems on cheaper consumer sensors also cause issues if they rarely see air that has low CO2 levels. Because these sensors can't measure absolute CO2 levels, only relative CO2 levels, they provide an absolute figure by looking for the lowest CO2 concentration they've seen over a period of time, usually around a 72 hour rolling window.

This works acceptably if the sensor is frequently exposed to outdoor air, but in a residential environment that's not always guaranteed, particularly in winter when it's not uncommon to keep windows closed to retain heat. In these situations the sensor will consider the lowest level to be around ~400ppm, even if it's actually much higher. This, of course, scales all other readings, so a sensor might read between 400-800ppm, leading you to believe everything is fine, when the actual indoor range is 800-1600ppm.

Because the auto-calibration happens over a period of time, it can be quite difficult to determine that your sensor is misreading, and the only way to fix it is to expose it to fresh air to reset the baseline.

The best solution I found to this is a dual-NDIR sensor which measures two different light frequencies, one which is absorbed by CO2 and one that isn't. This allows the sensor to know the absolute CO2 concentration, rather than the relative CO2 concentration, and avoids the need for auto-calibration. (I believe for absolute accuracy it still needs calibration for altitude, but for consumer use this makes such a small difference to be irrelevant).

Unfortunately, when I last looked, I couldn't find any consumer-grade sensors which used dual-NDIR sensors, only more expensive and less aesthetic commercial sensors. In the end I built my own using a CDM7160 sensor connected via I2C to a ESP8266, which reports over MQTT.

2 comments

> Unfortunately, when I last looked, I couldn't find any consumer-grade sensors which used dual-NDIR sensors, only more expensive and less aesthetic commercial sensors. In the end I built my own using a CDM7160 sensor connected via I2C to a ESP8266, which reports over MQTT.

Looks like that's been discontinued. [1] Any advice for folks trying to build one now?

[1] https://www.figarosensor.com/topic/2020/11/Discontinuance-of...

That's a shame, they've worked well for me. Unfortunately I can't recommend any others without doing some research, I found quite a few dual-NDIR sensor modules when I was looking and chose this one primarily based on availability and a reasonable datasheet.

A sibling post[1] mentioned a sensor that is listed as being dual-NDIR so should give reliable readings, and has a USB interface, so that sounds like one possibility.

[1] https://news.ycombinator.com/item?id=32122301

Manual for this unit is at https://cdn.shopify.com/s/files/1/0019/5952/files/Manual-RAD...

I assume 'dual-beam' is the same as dual-channel? Does the calibration technique mentioned in the manual indicate dual channel operation?

Auto calibration can be disabled, popular sensors that can do this are MH-Z19 and MH-Z14 (also cheap ones).
This is true, but I don't think any consumer-grade sensor systems offer this as an option? I guess it might be useful if you're building your own sensor, and can't afford/justify a dual-NDIR sensor.

My understanding is that with single-NDIR sensors (like the MH-Z14 and 19), the auto-calibration is intended to overcome gradual particle buildup and beam degradation in the sensor chamber. While disabling it will prevent the scenario I described, you'll instead end up with gradual sensor shift as the sensor ages. I guess this could be minimised by manually calibrating the sensor outdoors on a regular basis.

Dual-NDIR sensors split a single beam into two chambers, so any degradation of the sensor beam affects both measurements, and the particle buildup in both chambers should also be approximately equal over time, so they should remain accurate over an extended period without any requirement for calibration. I built mine about 4 years ago and I do occasionally check to make sure they read ~400ppm when placed outdoors, last check was around 420ppm which suggests they're behaving reasonably well as they age.