Skip to content

eCO2 and TVOC sensor

The AMS CCS811 is a Metal Oxide Sensor with I2C connectivity which is capable of measuring a volatile organic compounds (VOCs for short). This sensor was introduced in the SCK2.1, in replacement of the SGX MICS4514 from previous designs. As mentioned in other parts of the documentation, this decission was mainly due to the lower power consumption of the CCS811 and the easy implementation of reading processing provided by the manufacturer.

Does it measure CO2?

No. Despite the name, the sensor does not measure CO2. See below for a detailed description of the sensor measurements.


eCO2 and eTVOC are two related measurements. The first stands for equivalent CO2, and it's an indication of the concentration of CO2 that would cause the same level of radiative forcing as a given type and concentration of greenhouse gas. The eCO2 measurement is therefore a derived measurement from the reactions all these substances in the air with the metal oxide substrate in the sensor. eCO2 bottomline starts at 400ppm (current background CO2, sadly) and can reach several thousands.

On the other hand, eTVOC stands for equivalent total volatile organic compounds and is a measurement of the total amount of any emitted gases coming from toxins and chemicals. They come from a wide range of everyday items including paints and varnishes, wax and cosmetics, cleaning and hobby products, and even cooking. When you have an enclosed space like a home or office, these emitted gases accumulate and pollute our fresh air.

Global Warming Potential

To understand the eCO2 readings, we need to know what is the Global Warming Potential (GWP for short). GWP is an estimate of how much a given greenhouse gas contributes to Earth’s radiative forcing.

We know that CO2 is one of the major contributors to global warming, but there are others (and that are much worse). For example: CO2 has a value of 1 GWP, whereas methane has a GWP of 72 over 20 years, but a lower GWP of 25 over 100 years. This is because it is very potent in the short-term but then breaks down to CO2 and water in the atmosphere, meaning that the longer the period you consider it over, the more similar its effect is to that of CO2 alone. This means that 1ppm of CH4 is much more worrying for the global warming of the planet than 1ppm CO2 in the short term, because it can produce a higher increment of the atmosphere temperature. All this is at the same time interesting and worrying, because many products used for painting, solvents, varnish, refrigeration, and more contain pollutants with high GWP. A very interesting article can be found here.

Working principle

As any metal oxide sensor, the CCS811 measures the resistance of a sensitive layer, exposed to ambient air. This layer is heated up with a heater element (a resistance) up to several hundred ºC, and some oxidation reactions take place on it. The characteristics of the sensitive element vary from sensor to sensor, and with time, depending as well on the exposure to different chemical components and ambient conditions. For this reason an individual sensor charactersition is very tricky, and relative measurements are used, using an internal processing that monitors the baseline resistance of the sensor (i.e., the resistance of the sensitive layer when exposed to clean air).

The sensor generally targets pollutants that can get oxidised in the sensor substrate. This oxidation process modifies the resistance of the sensor, and the more oxidation reactions we have the lower the resistance is. The concept of baseline resistance in this sense can be confusing, but basically can be explained as: the higher resistance, the cleaner the environment.

Temperature and humidity are used internally to compensate the readings, as the sensor compares it’s actual resistance with the clean air one (baseline), and inputs the ambient conditions in the correction.

Sensor considerations

Like any sensor, the CCS811 has some limitations. As mentioned above, the sensitive layer will decrease it's resistance when in presence of VOCs, but other pollutants can have the opposite effect on it. For instance, Ozone (O3) will increase the sensor's resistance, and it could be seen as clean air by the sensor. This could explain why in some outdoor environments (generally with traffic and high levels of sun radiation), the sensor can present an unstable behaviour.

Additionally, humidity is known to affect the sensor resistance. The internal humidity correction can limit this effect up to a certain extent, but a perfect correction is not possible.

We also recommend setting the sensor in a stable environment, in which temperature and relative humidity changes are not abrupt. When moving the sensor to another location, beware that any high resistance could be seen as the new baseline resistance, and this value might not apply to the previous environment, should you put the sensor back into it's original location.

Resetting the baseline resistance

The sensor keeps track of the baseline resistance even after a factory reset. Currently, there is no method to reset the baseline resistance in the firmware, but it will soonly be introduced. When changing locations, a baseline resistance reset should be performed.

Finally, although the sensor is considered to be an indoor sensor, it can be placed outdoor, but keeping in mind, that the environment will be very different and that the sensor might behave in unexpected ways.


Have a read to the Datasheet or some other ANs here

Early-Life (Burn-In)

The CCS811 performance in terms of resistance levels and sensitivities will change during early life. The change in resistance is greatest over the first 48 hours of operation, although this process can last up to 5 days. CCS811 controls the burn-in period allowing eCO2 and eTVOC readings to be used from first power-on after 60 minutes of operation.

Conditioning Period (Run-In)

After early-life (Burn-In) the conditioning or run-in period is the time required to achieve good sensor stability before measuring VOCs after long idle period. The sensor will need to run for 20 minutes, before accurate readings are generated.