/*
Autor: Gregor Mausser
Datum: 04.03.20263
Titel: Messstation mit DHT22 und LCD(I2C) Display und Lauftext
*/
//Bibliothek für DHT22 und LCD(I2C) Display
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
//Pins definieren
const int LedPinRed = 6;
const int LedPinYellow = 4;
const int DHT22Pin = 2;
//Variablen definieren
#define DHT_Type DHT22
float humidity; //Luftfeuchtigkeit
float temperatureC; //Temperatur in °C
//Variablen für die Taupunktberechnung
float gamma;
float dewPoint;
//Grenzwerte
#define maxTemperature 32
#define minTemperature 30
#define maxDewPoint 20
#define minDewPoint 18
DHT dht(DHT22Pin, DHT_Type);
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(9600);
pinMode(LedPinRed, OUTPUT);
pinMode(LedPinYellow, OUTPUT);
//DHT Sensor starten
dht.begin();
//Display starten
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
//Sensor auslesen
humidity = dht.readHumidity();
temperatureC = dht.readTemperature();
//Taupunkt berechnen
gamma = log(humidity/100.0) + (17.62 * temperatureC) / (243.12 + temperatureC);
dewPoint = (243.12 * gamma) / (17.62 - gamma);
//Fehlerprüfung
if(isnan(humidity) || isnan(temperatureC)) {
Serial.println("Messfehler!! Der Sensor(DHT22) konnte nicht ausgelesen werden");
return;
}
//LED Steuerung Temperatur
if(temperatureC > maxTemperature) {
digitalWrite(LedPinRed, HIGH);
} else if(temperatureC < minTemperature) {
digitalWrite(LedPinRed, LOW);
}
//Taupunkt prüfen
if(isnan(dewPoint)) {
lcd.setCursor(6, 0);
lcd.print("Messung ");
lcd.setCursor(0, 1);
lcd.print("Fehler ");
lcd.setCursor(0, 2);
lcd.print("Temp: ");
lcd.print(temperatureC);
lcd.print("C ");
lcd.setCursor(0, 3);
lcd.print("Feuchte: ");
lcd.print(humidity);
lcd.print("% ");
return;
}
//LED Steuerung Taupunkt
if(dewPoint > maxDewPoint) {
digitalWrite(LedPinYellow, HIGH);
delay(250);
digitalWrite(LedPinYellow, LOW);
delay(250);
} else if(dewPoint < minDewPoint) {
digitalWrite(LedPinYellow, LOW);
}
//Erste Zeile schreiben(kein Lauftext)
lcd.setCursor(6, 0);
lcd.print("Messung");
//Vorbereitungen für Lauftext
String scrollingText = "Temp: " + String(temperatureC,1) +
"C Feuchte: " + String(humidity,1) +
"% Taupunkt: " + String(dewPoint,1) + "C ";
// Padding für sauberes Scrollen
scrollingText = " " + scrollingText + " ";
Serial.println(scrollingText);
//Lauftext anzeigen
for (int i = 0; i < scrollingText.length() - 20; i++) {
lcd.setCursor(0, 3);
lcd.print(scrollingText.substring(i, i + 20));
delay(300);
}
}