Wet­ter­sta­ti­on CO2-Sen­sor MH-Z19C

# include "Arduino.h"
# include "MHZ19.h"
# include "SoftwareSerial.h"
# include "RTClib.h"
# include "DHT.h"
# include "LiquidCrystal_I2C.h"

// Name des LCDs (lcd) festlegen
LiquidCrystal_I2C lcd(0x27, 20, 4);

// Pin des DHT-Sensors
int SENSOR_DHT = 8;

// Sensortyp festlegen
// DHT22 oder DHT11
# define SensorTyp DHT11

// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);

// Name des RTC-Moduls (rtc)
RTC_DS3231 rtc;

// RX/TX Pins zuordnen
# define RX 2
# define TX 3  

// Name des Moduls MH-Z19
MHZ19 MHZCO2;

// SoftwareSerial -> Name zuordnen
SoftwareSerial MHZSerial(RX, TX);

unsigned long VerstricheneZeit = 0;

void setup() 
{
  Serial.begin(9600);
  delay(500);

  // LCD starten
  lcd.init();

  // Hintergrundbeleuchtung einschalten
  lcd.backlight();

  // Serielle Kommunikation MH-Z19C starten
  MHZSerial.begin(9600);
  MHZCO2.begin(MHZSerial);

  // automatische Kalibrierung ausschalten (false), einschalten mit true
  MHZCO2.autoCalibration(false);

  // RTC-Modul starten
  rtc.begin();

  // Datum/Zeit einmalig setzen, beim nächsten Starten auskommentieren
  // rtc.adjust(DateTime(2023, 4, 23, 8, 50, 30));

  // Sensor DHT starten
  dht.begin();
}

void loop() 
{
  // 5 Sekunden warten
  if (millis() - VerstricheneZeit >= 5000) 
  {
     // rtc.now() -> aktuelle Zeit holen
    DateTime aktuell = rtc.now();

    /*
      Datumsformat festlegen
      DD -> Tag mit führender 0
      MM -> Monat mit führender 0
      YYYY -> vollständige Angabe des Jahres
    */
    char Datum[] = "DD.MM.YYYY ";

    // Datum in Zeichenkette (String) umwandeln und anzeigen
    Serial.print(aktuell.toString(Datum));

    // Format der Zeitangabe festlegen
    char Zeit[] = "hh:mm:ss Uhr";

    // Zeitangabe in Zeichenkette (String) umwandeln und anzeigen
    Serial.println(aktuell.toString(Zeit));
    
    // Daten lesen
    // CO2-Wert MH-Z19C
    int CO2 = MHZCO2.getCO2();

    // Temperatur MH-Z19
    int TemperaturMHZ = MHZCO2.getTemperature();

    // Temperatur RTC ermitteln
    String TemperaturRTC = String(rtc.getTemperature());
    String AnzeigeTemperaturRTC = String(TemperaturRTC);
    AnzeigeTemperaturRTC.replace(".", ",");

    // Temperatur DHT
    float TemperaturDHT = dht.readTemperature();
    String AnzeigeTemperaturDHT = String(TemperaturDHT);
    AnzeigeTemperaturDHT.replace(".", ",");

    // Luftfeuchtigkeit DHT
    String AnzeigeLuftfeuchtigkeit = String(dht.readHumidity());
    AnzeigeLuftfeuchtigkeit.replace(".", ",");
    Serial.print("Messwert CO²: ");
    Serial.println(String(CO2) + " ppm");

    Serial.print("Temperatur MH-Z19: ");
    Serial.println(String(TemperaturMHZ) + "°C");

    Serial.print("Temperatur RTC: ");
    Serial.println(AnzeigeTemperaturRTC + "°C");

    Serial.print("Temperatur DHT: ");
    Serial.println(AnzeigeTemperaturDHT + "°C");
    Serial.println("----------------------");

    lcd.setCursor(0, 0);
    lcd.print(aktuell.toString(Zeit));
    lcd.setCursor(0, 1);
    lcd.print("CO2 " + String(CO2) + " ppm");
    lcd.setCursor(0, 2);
    lcd.print("Temperatur " + AnzeigeTemperaturDHT + "\337C");
    lcd.setCursor(0, 3);
    lcd.print("Feuchtigkeit " + AnzeigeLuftfeuchtigkeit + "%");
    
    VerstricheneZeit = millis();
  }
}

Letzte Aktualisierung: 25. Jul 2023 @ 21:21