dht11 und CJMCU-811 anbindung

Phase1Deliverables
Matias Mas Viehl 2026-10-08 11:16:17 +02:00
parent 3844dc71ac
commit a7964b9ca9
1 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,106 @@
#include <LiquidCrystal.h>
#include "DHT.h"
#include <Wire.h>
#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(" % ");
}