We gathered data over the course of a single day to compare the CO2 measurements from an Aranet4 and two different SenseAir S8 LP CO2 sensors, one controlled by an Arduino Nano and the other controlled by an Arduino Nano Every.

The monitors were in a common area, sitting all together. We had closed all doors and windows in the morning, and then opening them again late afternoon.

Aranet4 with SenseAir S8 based CO2 monitors

Here’s a plot of the three sensors’ values over time. The Aranet4 is in black; the two SenseAir S8s are in blue and pink.

It had started raining, so we closed up the house at 8:30am or so, and the CO2 gradually increased, reaching a peak of about 1200 ppm at about 5pm. At that point, we opened windows and doors again, and the CO2 quickly plunged back to an acceptable level (in less than an hour).

The three sensors give qualitatively similar information, though one of the SenseAir S8 sensors is noticeably shifted down, and gave a peak reading of 1150 ppm, vs the peak of 1228 ppm from the Aranet4.

Directly plotting the differences, taking the Aranet4 values as the standard, makes those differences more clear.

One of the SenseAir S8 sensors tends to be above the Aranet4 by an average of 17 ppm, while the other tends to be below by 49 ppm. The shifts are relatively constant, though the first sensor tends to be off a bit more when then readings are low, and the second sensor tends to be off a bit more when the readings are high.

If we take the Aranet4 readings to be the gold standard, the RMS error in the two SenseAir S8 sensors are 23 and 52 ppm, respectively. The largest discrepancies were 55 and 81 ppm, respectively.

If we adjust for the overall shifts in the values, the RMS errors in the two SenseAir S8 sensors are reduced to 15 and 17 ppm, respectively. (These are just the regular SDs of the errors.)

In particular, most of the error in the second sensor is do to a shift that might be corrected by calibration.

I left it outside for a bit, and sure enough that sensor needs calibration. It showed 385 ppm CO2 after sitting outside, whereas outdoor air should be >400 and more like 420 ppm.

The 2nd SenseAir S8 sensor (reading 385) with the Aranet4 (reading 428), getting some fresh air

The easiest way to calibrate it is to just leave it outside for a while. The SenseAir S8 has built in “Automatic Baseline Correction (ABC)” with an adjustment period of 8 days (see page 7 of the sensor’s documentation), so I’ll just wait.

I should re-stage the photo to include all three sensors. I should re-calibrate them and re-run the experiment. But instead, I’m moving on to other tasks.

In conclusion, based on these admittedly limited data (from a single day), these two SenseAir S8 sensors seem to provide equivalent information as the much more expensive Aranet4.


The source for this document, including the data, is at https://github.com/karlduino/CO2monitor/tree/main/docs/Comparison

Details on the design and assembly of the Arduino-based CO2 monitor are at https://karlduino.org/CO2monitor.