CO2 Sensor Comparison: SCD30, MH-Z19B, BME680, VZ89TE, SGP30

SCD30 and MH-Z19B are so-called NDIR-sensors ( and measure the optical absorption of CO2 gas in the infrared wavelength region.

Sensors like VZ89TE, BME680 and VZ89TE are Indoor-Air-Quality-Sensors (IAQ-Sensors) that work in a totally different way. These sensors are metal-oxide semiconductor gas sensors, which rely on changes of the conductivity of certain metal oxides under the influence of gas molecules.

IAQ sensors try to derive „equivalent CO2 concentrations“ from the readings of the MOX elements and other internal sensors like temperature sensors. The BME680 does this inside of the BSEC library that typically runs on the host processor where the sensor is connected to. The other sensors do this internally.

In order to compare the sensors, I connected them to a ESP32 board which sent the sensors readings twice per minute to my MQTT broker. The MQTT broker, which runs on my Raspberry Pi 3, sent the readings to a small NODE-RED application, which also runs on my Raspberry Pi. The readings were stored in a CSV file for later analysis.

The recorded data show the sensor readings while the sensors were lying in my bookshelf in my living room for several days:

In order to visualize the correlations of the sensor readings a little more clearly, I produced the following scatter plots.

The horizontal coordinate (x-coordinate) of each dot in every scatter plot is a reading of the SCD30 sensor, which is assumed to have a quite high accuracy, as stated in the datasheet of this sensor.

The vertical coordinate (y-coordinate) of each dot is the corresponding reading of one of the other sensors:

It can be seen very clearly on the upper left plot that the correlation between the SCD30 readings and the MH-Z19B readings is very high. This is not surprising either, because the functional principles of both sensors are the same.

In fact, I think that the correlations between the other sensors and the SCD30 are so low that it really seems rather adventurous to even talk about CO2 concentrations that these measured values are supposed to indicate. But decide for yourself!

One Reply to “CO2 Sensor Comparison: SCD30, MH-Z19B, BME680, VZ89TE, SGP30”

  1. My observations with these sensor types are similar. I have tracked and recorded values from an MHZ19B (Winsens), an SGP40 (Sensirion) and a BME680 (Bosch) over a few days. The BME68x type sensors give values that seem to be generated by a random generator. I have run several of these BME68x sensors, including the latest BME688. The best values were still those of a BME680, which I obtained directly from China. The latest sensor from Sensirion, the SGP40, is also based on this metal oxide technology. It only outputs a VOC index. This shows at least a much better correlation to the CO2 values of the MHZ19B, which determines these with the infrared measurement (NDIR).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert