CO2-Ampel kalibrieren

Hallo,
mein CO2-Sensor hat leider Fantasiewerte angezeigt (>950 ppm im Freien). Wenn ich die Bibliothek und das Datenblatt richtig verstanden habe, kann ich ihn mit dem Befehl
airSensor.setForcedRecalibrationFactor(450);
neu kalibrieren.

Ich habe ein kleines Programm dazu geschrieben, falls sonst noch jemand Probleme mit dem Sensor hat (siehe unten).

Das Programm mit der Arduino IDE aufspielen und den Sensor ins Freie bringen. Der Sensor muss sich vorher an die Umweltbedingungen im Freien angepasst haben. Laut Datenblatt mindestens 2 min. In meinem Programm gebe ich ihm 4 min Zeit, was gestern, vermutlich wegen der großen Temperaturdifferenz zwischen drinnen und draußen, aber auch noch nicht gereicht hat. Den Erfolg kann man überprüfen, indem man das Programm einfach neu startet, da es die Messwerte bis zum Kalibrierungszeitpunkt nach 4 min anzeigt. Bei mir war der Klimawandel dann kein Problem mehr, da ich nur noch 300 ppm CO2 hatte :wink: Ich habe dann noch ein paar Minuten gewartet und das Programm noch mal gestartet. Dann waren die Messwerte gut.

Wenn man sein altes Programm wieder auf die Ampel spielen möchte, hat man dazu in der Wohnung nach Anschluss des USB-Kabels an den Computer 4 Minuten Zeit. Ansonsten wird mit den CO2-Werte in der Wohnung neu bzw. falsch kalibriert.

Keine Garantie :wink:

Viele Grüße
Philipp

/*
 * Arduino ins Freie bringen.
 * Nach 4 Minuten erfolgt die Kalibrierung auf 450 ppm
 * Er benötigt konstante Bedingungen und sollte schon etwas warmgelaufen sein. 
 * Wenn man ihn von einem warmen Raum ins kalte nach draußen bringt, sind die vier Minuten u. U. nicht ausreichend.
*/


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

boolean unkalibriert;
long laufzeit;

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
SCD30 airSensor;

void setup() {
  senseBoxIO.powerI2C(true);
  delay(2000);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
  display.display();
  delay(100);
  display.clearDisplay();
   Wire.begin();
   Wire.setClock(50000); //50kHz

  if (airSensor.begin() == false)
  {
    while (1)
      ;
  }

  unkalibriert = true;
  display.setCursor(0,0);
  display.setTextSize(1);
  display.setTextColor(WHITE,BLACK);
  display.println("Zur Kalibrierung den Sensor nach draussen bringen");
  display.display();
  delay(60000);

}

void loop() {

if (unkalibriert) {
    display.clearDisplay();
      display.setCursor(0,0);
      display.setTextSize(1);
      display.setTextColor(WHITE,BLACK);
      display.println("Kalibrierung laeuft");
    display.display();
  } else {
    display.clearDisplay();
      display.setCursor(0,0);
      display.setTextSize(1);
      display.setTextColor(WHITE,BLACK);
      display.println("Kalibrierung abgeschlossen");
    display.display();
  }
  delay(1000);
  display.clearDisplay();
    display.setCursor(0,0);
    display.setTextSize(2);
    display.setTextColor(WHITE,BLACK);
    display.println(airSensor.getCO2());
  display.display();
  delay(1000);
  laufzeit = millis();
  if (unkalibriert && laufzeit > 240000) {    //nach 4 min erfolgt Kalibrierung
    airSensor.setForcedRecalibrationFactor(450);
    unkalibriert = false;
  }

}
1 Like

Ein verspätetes Dankeschön noch vom senseBox Team für deinen Beitrag @Philipp2p :green_heart:
wäre das in Ordnung für dich wenn wir diesen Beitrag und deinen Code in unserer Doku verlinken bzw. weiter leiten wenn wir Fragen dazu aus der Community bekommen?

1 Like

Na klar, kein Problem.

2 Likes

Vielen Dank für die Anleitung! Nur um sicher zu gehen, ich lade den Code oben mit der Aurduino IDE auf die MCU, aber danach dann wieder die .bin Datei aus der Ampel Anleitung über drag&drop?

Ja. Kalibrieprogramm drauf. Kalibrierung ablaufen lassen. Messprogramm wieder drauf. Der Sensor bleibt kalibriert, auch wenn die Stromzufuhr unterbrochen wird.

funktioniert einwandfrei, dankeschön für den Code — kleine Bemerkung - um dem Sensor genügend Zeit zu geben sich an die Umgebungstemperatur anzupassen sollte er wirklich mindestens eine Viertelstunde draußen liegen, wenn die Differenz zwischen innen- und außen Temperatur groß ist. Eine meiner CO2-Ampeln habe ich vor ein paar Tagen morgens kalibriert, Büro: 22°C und draußen 6°C – das hat eine ganze Weile gedauert :smiley: — Umgekehrt genau so - im prallen Sonnenlicht draußen wird sich der Sensor deutlich erwärmen und sollte erst nach einer Anpasszeit kalibriert werden.

1 Like