#include #include "DHT.h" #include #include "Adafruit_CCS811.h" // --- LCD Setup --- // Initialisierung des LCDs mit den Pins aus deinem Schaltplan // RS = 7, E = 8, D4 = 9, D5 = 10, D6 = 11, D7 = 12 LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // --- DHT11 Setup --- #define DHTPIN 2 // Der DHT11 Daten-Pin ist an Pin 2 angeschlossen #define DHTTYPE DHT11 // Sensortyp festlegen DHT dht(DHTPIN, DHTTYPE); // --- CJMCU-811 (CCS811) Setup --- // I2C: SDA = A4, SCL = A5 (Arduino Uno). Der WAK-Pin des Moduls muss an GND liegen. // Standardadresse 0x5A (ADDR an GND), alternativ 0x5B. Adafruit_CCS811 ccs; bool ccsOk = false; // Anzeige wechselt zwischen zwei Seiten, da das LCD nur 2 Zeilen hat bool zeigeLuftqualitaet = false; void setup() { // LCD initialisieren (16 Spalten, 2 Zeilen) lcd.begin(16, 2); // DHT Sensor starten dht.begin(); // CCS811 starten ccsOk = ccs.begin(0x5A); // Kurze Startnachricht lcd.setCursor(0, 0); lcd.print("Sensor startet.."); // Der DHT11 braucht nach dem Start einen Moment delay(2000); lcd.clear(); } void loop() { // WICHTIG: Der DHT11 ist ein langsamer Sensor. // Er benötigt ca. 2 Sekunden Pause zwischen den Messungen. delay(2000); // Werte für Luftfeuchtigkeit und Temperatur auslesen float h = dht.readHumidity(); float t = dht.readTemperature(); // Überprüfen, ob das Auslesen fehlgeschlagen ist (z.B. Kabel locker) if (isnan(h) || isnan(t)) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Sensor Fehler!"); return; // Loop hier abbrechen und von vorne starten } // --- Seite 2: CO2 und TVOC vom CCS811 --- if (zeigeLuftqualitaet) { zeigeLuftqualitaet = false; lcd.clear(); if (!ccsOk) { lcd.setCursor(0, 0); lcd.print("CCS811 Fehler!"); return; } // Temperatur/Feuchte zur Kompensation an den CCS811 geben ccs.setEnvironmentalData(h, t); if (ccs.available() && !ccs.readData()) { lcd.setCursor(0, 0); lcd.print("CO2: "); lcd.print(ccs.geteCO2()); lcd.print(" ppm"); lcd.setCursor(0, 1); lcd.print("TVOC: "); lcd.print(ccs.getTVOC()); lcd.print(" ppb"); } else { lcd.setCursor(0, 0); lcd.print("CCS811 wartet.."); } return; } // --- Seite 1: Ausgabe auf dem LCD Display --- zeigeLuftqualitaet = true; // Zeile 1: Temperatur lcd.setCursor(0, 0); // Spalte 0, Zeile 0 lcd.print("Temp: "); lcd.print(t, 1); // Die ", 1" sorgt dafür, dass nur eine Nachkommastelle gezeigt wird lcd.print(" C "); // Leerzeichen am Ende überschreiben eventuelle alte Zeichen // Zeile 2: Luftfeuchtigkeit lcd.setCursor(0, 1); // Spalte 0, Zeile 1 lcd.print("Luft: "); lcd.print(h, 1); lcd.print(" % "); }