Co2 Ampel - falsche Temperatur Messwerte

Ich habe mir eine Co2 Ampel besorgt und lese auch die Temperatur und Feuchtigkeitsmesswerte aus. Der Temperaturwert ist immer deutlich zu hoch (ca. 5-6 °C), Feuchtigkeit und Co2 Werte ergeben Sinn.
Mein Code ist ganz simpel:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include „SenseBoxMCU.h“
#include „SparkFun_SCD30_Arduino_Library.h“

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
SCD30 airSensor;
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel rgb_led_1= Adafruit_NeoPixel(3, 1,NEO_GRB + NEO_KHZ800);

void setup() {
senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();
Wire.begin();
if (airSensor.begin() == false)
{
while (1)
;
}
rgb_led_1.begin();
rgb_led_1.setBrightness(255);
}

void loop() {

if (airSensor.getCO2() < 1000) {
rgb_led_1.setPixelColor(0,rgb_led_1.Color(0,255,0));
rgb_led_1.show();
} else if (airSensor.getCO2() >= 1000 && airSensor.getCO2() < 1500) {
rgb_led_1.setPixelColor(0,rgb_led_1.Color(255,150,0));
rgb_led_1.show();
} else if (airSensor.getCO2() >= 1500) {
rgb_led_1.setPixelColor(0,rgb_led_1.Color(255,0,0));
rgb_led_1.show();
}
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(WHITE,BLACK);
display.println(„CO2“);
display.setCursor(0,25);
display.setTextSize(5);
display.setTextColor(WHITE,BLACK);
display.println(airSensor.getCO2());
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(WHITE,BLACK);
display.println(„Temp“);
display.setCursor(0,25);
display.setTextSize(5);
display.setTextColor(WHITE,BLACK);
display.println(airSensor.getTemperature());
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(WHITE,BLACK);
display.println(„rel.H.%“);
display.setCursor(0,25);
display.setTextSize(5);
display.setTextColor(WHITE,BLACK);
display.println(airSensor.getHumidity());
display.display();
delay(2000);

Hat jemand eine Idee, woran es liegen könnte oder ob man den Sensor kalibrieren kann/muss? Eventuell hat der Sensor auch ein Heizelement, das man berücksichtigen muss? Es scheint so, als würde der Wert nach dem Einschalten erst mit der Zeit höher und pendelt sich dann bei diesem Offset ein.

Hi, I have had the same issue. I have been comparing it against my Suunto Ambit Peak 3 sports watch. The thermometer on that is very accurate. Also finding the sensebox gradually increases during use and after an hour or so is about 3 degrees higher than the Suunto.

The temperature reading from the Sensirion SCD-30 CO2-Sensor do not display correct temperature values as the temperature sensor is inside the case and for the purpose to support the CO2 measurements.

There is the possibility to set a temperature offset via the library in Arduino (see https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/blob/master/examples/Example2_SetOptions/Example2_SetOptions.ino#L57-L63 for more informations)

Kind regards

Mario

Could someone from Sensebox please make this clear on the website. If you read the info around the CO2 sensor it implies the temperature and humidity sensor are on par with the dedicated units.

Hello @blaise ,

The „problem“ here is not the sensor itself but rather the casing with the MCU.

Also finding the sensebox gradually increases during use and after an hour or so is about 3 degrees higher than the Suunto.

You would find much more accurate measurements with the same sensor in a casing specifically designed for temperature measurements. In fact in our shop you can even find casings especially made for temperature measurements. So the fact that your watch measures a different temperature than the CO2 sensor is not the sensors fault. Try placing your sports watch diretly inside a computers casing and see how it compares to „normal“ measurements.

The SCD30 is first and foremost a CO2 Sensor and needs a temperature values to determine accurate CO2 values. If you want to use the SCD30 to measure temperature you need to, just like Mario said, use the temperature offset function in order to try to negate the effect the casing has on the temperature values. What value this offset has to be needs to be determined individually.

Additionally: Could you point me to the part where we state that the SCD30’s temperature measurements are on par with the CO2 values?

Greetings
Eric