Inhaltsverzeichnis
Selbsttest
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include “Arduino.h” #include “SensirionI2cScd4x.h” #include “Wire.h” SensirionI2cScd4x sensor; float TemperaturAbweichung; uint32_t LuftdruckAnpassung; uint16_t HoeheAnpassung; uint16_t ASCaktiviert; uint16_t ASCZiel; uint16_t KalibrierungInitialPeriode; uint16_t KalibrierungStandardPeriode; uint16_t sensorStatus; void setup() { Serial.begin(9600); // I2C Wire.begin(); sensor.begin(Wire, SCD41_I2C_ADDR_62); // R4 WiFi mit QWIIC-Anschluss // Wire1.begin(); // sensor.begin(Wire1, SCD41_I2C_ADDR_62); delay(30); sensor.wakeUp(); sensor.stopPeriodicMeasurement(); sensor.reinit(); sensor.getTemperatureOffset(TemperaturAbweichung); Serial.print(F(“Temperatur Anpassung °C: ”)); Serial.println(TemperaturAbweichung); sensor.getAmbientPressure(LuftdruckAnpassung); Serial.print(F(“Luftdruck Anpassung in Pa: ”)); Serial.println(LuftdruckAnpassung); sensor.getSensorAltitude(HoeheAnpassung); Serial.print(F(“Anpassung Höhe in m: ”)); Serial.println(HoeheAnpassung); Serial.println(); Serial.println(F(“Automatische Selbstkalibrierung (ASC):”)); sensor.getAutomaticSelfCalibrationEnabled(ASCaktiviert); if (ASCaktiviert) { Serial.println(F(“aktiviert”)); } else Serial.println(F(“nicht aktiviert”)); sensor.getAutomaticSelfCalibrationTarget(ASCZiel); Serial.print(F(“ — Ziel für die automatische Kalibrierung in ppm: ”)); Serial.println(ASCZiel); sensor.getAutomaticSelfCalibrationInitialPeriod(KalibrierungInitialPeriode); Serial.print(F(“ — Periode für die Initielisierung in Stunden: ”)); Serial.println(KalibrierungInitialPeriode); sensor.getAutomaticSelfCalibrationStandardPeriod(KalibrierungStandardPeriode); Serial.print(F(“ — Standard-Periode in Stunden: ”)); Serial.println(KalibrierungStandardPeriode); Serial.println(); Serial.print(F(“Selbsttest durchführen … ”)); sensor.performSelfTest(sensorStatus); if(sensorStatus == 0) Serial.println(“Der Sensor funktioniert einwandfrei!”); else { Serial.println(“Fehler beim Test des Sensors!”); while(1); } } void loop() { // bleibt leer } |
Periodische Messung
LCD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | #include “Arduino.h” #include “SensirionI2cScd4x.h” #include “Wire.h” #include “LCDIC2.h” // 4‑zeiliges LCD LCDIC2 lcd(0x27, 20, 4); uint16_t sensorStatus = 1; SensirionI2cScd4x sensor; void setup() { // LCD starten lcd.begin(); // Cursor “verstecken” lcd.setCursor(false); // auf Seriellen Monitor warten Serial.begin(9600); while (!Serial) { delay(200); } // I2C Wire.begin(); sensor.begin(Wire, SCD41_I2C_ADDR_62); // auf Werkseinstellungen zurücksetzen // sensor.performFactoryReset(); delay(30); // Sensor aufwecken sensor.wakeUp(); // periodische Messung stoppen sensor.stopPeriodicMeasurement(); // Voreinstellungen aus dem EEPROM lesen sensor.reinit(); sensor.performSelfTest(sensorStatus); if(sensorStatus == 0) Serial.println(“Der Sensor funktioniert einwandfrei!”); else { Serial.println(“Fehler beim Test des Sensors!”); while(1); } // Höhe des Standorts in m sensor.setSensorAltitude(80); // Temperaturschwankung berücksichtigen sensor.setTemperatureOffset(2.0); // Mittelwert des Luftdrucks hPa *100 // nur sinnvoll, wenn ein präzises Messgerät verfügbar ist // sensor.setAmbientPressure(100400);; // Periodic: alle 5 Sekunden messen // auskommentieren bei SingleShot sensor.startPeriodicMeasurement(); } void loop() { bool SensorBereit = false; uint16_t CO2 = 0; float Temperatur = 0.0; float Luftfeuchtigkeit = 0.0; sensor.getDataReadyStatus(SensorBereit); // wenn der Sensor bereit ist -> Messung durchführen if (SensorBereit) { // periodische Messung sensor.readMeasurement(CO2, Temperatur, Luftfeuchtigkeit); String AnzeigeTemperatur = String(Temperatur); String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit); AnzeigeTemperatur.replace(“.”, “,”); AnzeigeLuftfeuchtigkeit.replace(“.”, “,”); // Anzeige Serieller Monitor Serial.print(“CO2 Konzentration: ”); Serial.print(CO2); Serial.println(“ ppm”); Serial.print(“Temperatur: ”); Serial.print(AnzeigeTemperatur); Serial.println(“°C”); Serial.print(“Luftfeuchtigkeit: ”); Serial.print(AnzeigeLuftfeuchtigkeit); Serial.println(“%”); Serial.println(“————————”); // Anzeige LCD lcd.setCursor(0, 0); lcd.print(“Temperatur: ”); lcd.print(AnzeigeTemperatur); lcd.print(“\337C ”); lcd.setCursor(0, 1); lcd.print(“Luftfeuchtigkeit: ”); lcd.setCursor(0, 2); lcd.print(AnzeigeLuftfeuchtigkeit); lcd.print(“% ”); lcd.setCursor(0, 3); lcd.print(“CO2: ”); lcd.print(String(CO2)); lcd.print(“ ppm ”); } } |
OLED
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | #include “Arduino.h” #include “SensirionI2cScd4x.h” #include “Wire.h” #include “U8g2lib.h” // 0,96 Zoll SSD1306 U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0); // 2,08 Zoll SH122 // U8G2_SH1122_256X64_1_HW_I2C oled(U8G2_R0); uint16_t sensorStatus = 1; SensirionI2cScd4x sensor; void setup() { oled.begin(); // Schriftart OLED 2,08 oled.setFont(u8g2_font_helvB14_tf); Serial.begin(9600); while (!Serial) { delay(200); } Wire.begin(); sensor.begin(Wire, SCD41_I2C_ADDR_62); // auf Werkseinstellungen zurücksetzen // sensor.performFactoryReset(); delay(30); // Sensor aufwecken sensor.wakeUp(); // periodische Messung stoppen sensor.stopPeriodicMeasurement(); // Voreinstellungen aus dem EEPROM lesen sensor.reinit(); sensor.performSelfTest(sensorStatus); if(sensorStatus == 0) Serial.println(“Der Sensor funktioniert einwandfrei!”); else { Serial.println(“Fehler beim Test des Sensors!”); while(1); } // Höhe des Standorts in m sensor.setSensorAltitude(80); // Temperaturschwankung berücksichtigen sensor.setTemperatureOffset(0.5); // Periodic: alle 5 Sekunden messen // auskommentieren bei SingleShot sensor.startPeriodicMeasurement(); // LowPower: alle 30 Sekunden messen // sensor.startLowPowerPeriodicMeasurement(); } void loop() { bool SensorBereit = false; uint16_t CO2 = 0; float Temperatur = 0.0; float Luftfeuchtigkeit = 0.0; sensor.getDataReadyStatus(SensorBereit); // wenn der Sensor bereit ist -> Messung durchführen if (SensorBereit) { // periodische Messung sensor.readMeasurement(CO2, Temperatur, Luftfeuchtigkeit); String AnzeigeTemperatur = String(Temperatur); String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit); AnzeigeTemperatur.replace(“.”, “,”); AnzeigeLuftfeuchtigkeit.replace(“.”, “,”); // Anzeige Serieller Monitor Serial.print(“CO2 Konzentration: ”); Serial.print(CO2); Serial.println(“ ppm”); Serial.print(“Temperatur: ”); Serial.print(AnzeigeTemperatur); Serial.println(“°C”); Serial.print(“Luftfeuchtigkeit: ”); Serial.print(AnzeigeLuftfeuchtigkeit); Serial.println(“%”); Serial.println(“————————”); oled.clearDisplay(); do { oled.setCursor(5, 14); // OLED 2,08 // oled.print(“Temperatur: ”); oled.print(AnzeigeTemperatur); // Grad-Zeichen oled.print((char)176); oled.print(“C”); oled.setCursor(5, 34); // OLED 2,08 // oled.print(“Luftfeuchtigkeit: ”); oled.print(AnzeigeLuftfeuchtigkeit); oled.print(“%”); oled.setCursor(5, 56); // OLED 2,08 // oled.print(“CO2: ”); oled.print(String(CO2)); oled.print(“ ppm”); } while (oled.nextPage()); } } |
SingleShot SCD41
LCD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include “Arduino.h” #include “SensirionI2cScd4x.h” #include “Wire.h” #include “LCDIC2.h” // 4‑zeiliges LCD LCDIC2 lcd(0x27, 20, 4); uint16_t sensorStatus = 1; SensirionI2cScd4x sensor; void setup() { // LCD starten lcd.begin(); // Cursor “verstecken” lcd.setCursor(false); Serial.begin(9600); // warten auf Seriellen Monitor while (!Serial) { delay(200); } Wire.begin(); sensor.begin(Wire, SCD41_I2C_ADDR_62); // auf Werkseinstellungen zurücksetzen // sensor.performFactoryReset(); // Höhe des Standorts in m sensor.setSensorAltitude(80); delay(30); // Sensor aufwecken sensor.wakeUp(); // periodische Messung stoppen sensor.stopPeriodicMeasurement(); // Voreinstellungen aus dem EEPROM lesen sensor.reinit(); sensor.performSelfTest(sensorStatus); if (sensorStatus == 0) Serial.println(“Der Sensor funktioniert einwandfrei!”); else { Serial.println(“Fehler beim Test des Sensors!”); while (1); } // Temperaturschwankung berücksichtigen sensor.setTemperatureOffset(2.0); } void loop() { bool SensorBereit = false; uint16_t CO2 = 0; float Temperatur = 0.0; float Luftfeuchtigkeit = 0.0; sensor.measureSingleShot(); sensor.measureAndReadSingleShot(CO2, Temperatur, Luftfeuchtigkeit); String AnzeigeTemperatur = String(Temperatur); String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit); AnzeigeTemperatur.replace(“.”, “,”); AnzeigeLuftfeuchtigkeit.replace(“.”, “,”); // Anzeige Serieller Monitor Serial.print(“CO2 Konzentration: ”); Serial.print(CO2); Serial.println(“ ppm”); Serial.print(“Temperatur: ”); Serial.print(AnzeigeTemperatur); Serial.println(“°C”); Serial.print(“Luftfeuchtigkeit: ”); Serial.print(AnzeigeLuftfeuchtigkeit); Serial.println(“%”); Serial.println(“————————”); // Anzeige LCD lcd.setCursor(0, 0); lcd.print(“Temperatur: ”); lcd.print(AnzeigeTemperatur); lcd.print(“\337C ”); lcd.setCursor(0, 1); lcd.print(“Luftfeuchtigkeit: ”); lcd.setCursor(0, 2); lcd.print(AnzeigeLuftfeuchtigkeit); lcd.print(“% ”); lcd.setCursor(0, 3); lcd.print(“CO2: ”); lcd.print(String(CO2)); lcd.print(“ ppm ”); } |
OLED
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #include “Arduino.h” #include “SensirionI2cScd4x.h” #include “Wire.h” #include “U8g2lib.h” // 0,96 Zoll SSD1306 U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0); // 2,08 Zoll SH122 // U8G2_SH1122_256X64_1_HW_I2C oled(U8G2_R0); uint16_t sensorStatus = 1; SensirionI2cScd4x sensor; void setup() { oled.begin(); // Schriftart OLED 2,08 oled.setFont(u8g2_font_helvB14_tf); Serial.begin(9600); while (!Serial) { delay(200); } Wire.begin(); sensor.begin(Wire, SCD41_I2C_ADDR_62); // auf Werkseinstellungen zurücksetzen // sensor.performFactoryReset(); delay(30); // Sensor aufwecken sensor.wakeUp(); // periodische Messung stoppen sensor.stopPeriodicMeasurement(); // Voreinstellungen aus dem EEPROM lesen sensor.reinit(); sensor.performSelfTest(sensorStatus); if (sensorStatus == 0) Serial.println(“Der Sensor funktioniert einwandfrei!”); else { Serial.println(“Fehler beim Test des Sensors!”); while (1); } // Höhe des Standorts in m sensor.setSensorAltitude(80); // Temperaturschwankung berücksichtigen sensor.setTemperatureOffset(0.5); } void loop() { bool SensorBereit = false; uint16_t CO2 = 0; float Temperatur = 0.0; float Luftfeuchtigkeit = 0.0; sensor.measureSingleShot(); sensor.measureAndReadSingleShot(CO2, Temperatur, Luftfeuchtigkeit); String AnzeigeTemperatur = String(Temperatur); String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit); AnzeigeTemperatur.replace(“.”, “,”); AnzeigeLuftfeuchtigkeit.replace(“.”, “,”); // Anzeige Serieller Monitor Serial.print(“CO2 Konzentration: ”); Serial.print(CO2); Serial.println(“ ppm”); Serial.print(“Temperatur: ”); Serial.print(AnzeigeTemperatur); Serial.println(“°C”); Serial.print(“Luftfeuchtigkeit: ”); Serial.print(AnzeigeLuftfeuchtigkeit); Serial.println(“%”); Serial.println(“————————”); oled.clearDisplay(); do { oled.setCursor(5, 14); // OLED 2,08 // oled.print(“Temperatur: ”); oled.print(AnzeigeTemperatur); // Grad-Zeichen oled.print((char)176); oled.print(“C”); oled.setCursor(5, 34); // OLED 2,08 // oled.print(“Luftfeuchtigkeit: ”); oled.print(AnzeigeLuftfeuchtigkeit); oled.print(“%”); oled.setCursor(5, 56); // OLED 2,08 // oled.print(“CO2: ”); oled.print(String(CO2)); oled.print(“ ppm”); } while (oled.nextPage()); } |
Letzte Aktualisierung: