Sensor SCD4x: Temperatur, Luftfeuchtigkeit und CO2 messen




Die Hardware

Die Sen­so­ren SCD40 und SCD41 (zusam­men­ge­fasst als SCD4x) mes­sen Tem­pe­ra­tur, Luft­feuch­tig­keit und den CO2-Gehalt in der Luft.
Der Sen­sor SDC4x arbei­tet nach dem pho­to­akus­ti­schen Mess­prin­zip:

Gas­mo­le­kü­le wie das CO2 neh­men nur Licht ganz bestimm­ter Wel­len­län­gen auf. Schickt man infra­rotes Licht, das nur von CO2 absor­biert wird, durch ein Gas­ge­misch, erhöht sich die Aus­deh­nung der ange­reg­ten Mole­kü­le. Die Licht­quel­le wird peri­odisch ein- und aus­ge­schal­tet, dadurch schwankt die Aus­deh­nung der Mole­kü­le eben­falls peri­odisch. Die­se Druck­schwan­kun­gen wer­den wer­den als akus­ti­sche Signa­le von einem Mikro­fon auf­ge­fan­gen. Das akus­ti­sche Signal ist pro­por­tio­nal zur Kon­zen­tra­ti­on des Gases im Gas­ge­misch.

Eigen­schaf­ten des Sen­sors

  • auto­ma­ti­sche oder hän­di­sche Kali­brie­rung
  • Selbst­test mit Prü­fung der Funk­tio­nen
  • Ein­stel­lun­gen kön­nen im EEPROM gespei­chert wer­den

Funktionen des Sensors

Schlüs­sel­wortAnzeige/Parameter
begin(Wire, SCD41_I2C_ADDR_62);Sen­sor star­ten
per­form­Fac­to­ry­Re­set();auf Stan­dard­ein­stel­lun­gen zurück­set­zen
per­sist­Set­tings();Ein­stel­lun­gen in den EEPROM schrei­ben
performSelfTest(Wert)Selbst­test durch­füh­ren
0 = Selbst­test erfolg­reich
reinit();Vor­ein­stel­lun­gen aus dem EEPROM des SCD4x lesen
wake­Up();Sen­sor auf­we­cken
power­Down();Sen­sor aus­schal­ten
setAutomaticSelfCalibrationEnabled(Wert);0 = auto­ma­ti­sche Kali­brie­rung aus­schal­ten
1 = auto­ma­ti­sche Kali­brie­rung ein­schal­ten
setAutomaticSelfCalibrationTarget(CO2-Wert);Wert der auto­ma­ti­schen Kali­brie­rung anpas­sen
Anga­be in ppm
setAutomaticSelfCalibrationInitialPeriod(Wert_in_Stunden)Zeit­raum für auto­ma­ti­sche Kali­brie­rung fest­le­gen
setSensorAltitude(Höhe in m);Stand­ort des Sen­sors anpas­sen (Höhe in m)
setAmbientPressure(Luftdruck)Luft­druck anpas­sen
setTemperatureOffset(Wert);Abwei­chung der Tem­pe­ra­tur kor­ri­gie­ren
start­Pe­ri­odic­Me­a­su­re­ment();Peri­odi­sche Mes­sun­gen star­ten (alle 5 Sekun­den)
stop­Pe­ri­odic­Me­a­su­re­ment();Peri­odi­sche Mes­sun­gen been­den
start­Low­Power­Pe­ri­odic­Me­a­su­re­ment();Peri­odi­sche Mes­sun­gen star­ten (alle 30 Sekun­den)
mea­su­reS­in­g­le­Shot()Sin­g­le­Shot: jede Mes­sung ein­zeln star­ten
(nur SCD41)
readMeasurement(CO2, Tem­pe­ra­tur, Luft­feuch­tig­keit);Mess­wer­te lesen
measureAndReadSingleShot(CO2, Tem­pe­ra­tur, Luft­feuch­tig­keit);Mes­sung im Sin­g­le­Shot-Modus (nur SCD41)

Einstellungen

schreiben

  • Ein­stel­lun­gen im EEPROM spei­chern
    persistSettings();
  • auf Werks­ein­stel­lun­gen zurück­set­zen
    performFactoryReset();
  • Höhe des Stand­orts bestim­men
    setSensorAltitude(Höhe_in_m);
    Der Luft­druck schwankt je nach der Höhe des Stand­orts. Die Stan­dard­ein­stel­lung ist 0, wenn die Höhe deut­lich abweicht, soll­te sie ange­passt wer­den.
  • Tem­pe­ra­tur anpas­sen
    setTemperatureOffset(Wert_als_float);
    Da der Sen­sor sich erwärmt, kann die Tem­pe­ra­tur mit einem Ver­gleich eines ande­ren Mess­ge­räts ange­passt wer­den.
  • Luft­druck über­schrei­ben
    setAmbientPressure(Wert_in_hPa*100);
    Die­se Ein­stel­lung ist nur sinn­voll, wenn ein prä­zi­ses Mess­ge­rät zum Ver­gleich zur Ver­fü­gung steht

lesen

Kalibrierung des Sensors

Automatische Selbstkalibrierung

Die auto­ma­ti­sche Selbst­ka­li­brie­rung ver­läuft in zwei Pha­sen:
44 Stun­den für die Erst­ka­li­brie­rung und 156 Stun­den für die fol­gen­de Stan­dard­ka­li­brie­rung. Der Sen­sor muss wenigs­ten ein­mal wäh­rend die­ser Zeit einen bekann­ten Tiefst­wert der CO2-Kon­zen­tra­ti­on (400 ppm) errei­chen. Aller­dings ist der Tiefst­wert im Durch­schnitt inzwi­schen auf 430 ppm gestie­gen (🔗Umwelt­bun­des­amt).
Der Ziel­wert kann mit setAutomaticSelfCalibrationTarget(ppm) gesetzt wer­den.
Die Zeit in Stun­den für die Erst- und Stan­dard­ka­li­brie­rung kann mit
setAutomaticSelfCalibrationInitialPeriod(Stun­den)
setAutomaticSelfCalibrationStandardPeriod(Stun­den)
geän­dert wer­den. Der Wert in Stun­den muss ein Viel­fa­ches von 4 sein.

Wäh­rend der auto­ma­ti­schen Kali­brie­rung muss der Sen­sor in einem gut gelüf­te­ten Raum sein.

Erzwungene Kalibrierung

Neben der auto­ma­ti­schen Kali­brie­rung kannst du alter­na­tiv mit performForcedRecalibration(CO2Richtwert, frcCorr)die Kali­brie­rung erzwin­gen. Hier­zu wird ein Wert (CO2Richtwert) fest­ge­legt, auf den kali­briert wer­den soll. frc­Corr ist ein Ker­rek­tur­wert, der im Fal­le eines Miss­erfolgs 0xFFFF aus­gibt.

Um eine FRC erfolg­reich durch­zu­füh­ren, müs­sen die fol­gen­den Schrit­te durch­ge­führt wer­den:

  • Die peri­odi­sche Mes­sung (startPeriodicMeasurement) muss min­des­tens drei Minu­ten in einer Umge­bung mit mög­lichst kon­stan­tem CO2-Wert aus­ge­führt wer­den.
  • Nach die­ser Zeit wird die peri­odi­sche Mes­sung gestoppt (stopPeriodicMeasurement).
  • Nach einer War­te­zeit von 500 Mil­li­se­kun­den kann dem Sen­sor mit performForcedRecalibration der neue CO2-Richt­wert mit­ge­teilt wer­den.

Das Programm

Benötigte Bibliotheken

für den Sen­sor SCD4x

Ver­wen­dung des OLEDs

Anzei­ge auf einem LCD

Anschluss des Sensors

Die Anzei­ge­mo­du­le kön­nen an den ande­ren I²C-Pins A4 und A5 ange­schlos­sen wer­den.

Messmodi

Periodische Messung

Die peri­odi­sche Mes­sung ermit­telt alle 5 Sekun­den die Mess­wer­te. Sie wird mit startPeriodicMeasurement(); ange­sto­ßen.

In den Lösun­gen fin­dest du die Pro­gram­me für die Anzei­ge auf dem ⇒LCD und auf einem ⇒OLED.

Low-Power Messung

Die Low-Power Mes­sung misst die Wer­te alle 30 Sekun­den.
Statt startPeriodicMeasurement(); wird die Mes­sung mit startLowPowerPeriodicMeasurement(); gestar­tet.

SingleShot Messung

Nur der SCD41 kann Sin­g­le­Shot-Mes­sun­gen durch­füh­ren.

Die Pro­gram­me für die Anzei­ge auf dem ⇒LCD und auf einem ⇒OLED fin­dest du in den Lösun­gen.


Quellen


Letzte Aktualisierung: Feb. 5, 2026 @ 19:05

Inhalt