# 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: