/*
Autor: Gregor Mausser
Datum: 04.03.20263
Titel: Messstation mit DHT22 und LCD(I2C) Display
*/
//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, 4, 20);
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, das Auslesen kann zwisch 250ms und 2000ms dauer(je nach Sensor z.B. alt/neu)
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);
//Prüfen ob die ausgelesenen Werte Zahlen sind
if(isnan(humidity) || isnan(temperatureC)) {
Serial.println("Messfehler!! Der Sensor(DHT22) konnte nicht ausgelesen werden");
return; //überspring den aktuellen Loop/springt an den Anfang von void loop
}
if(temperatureC > maxTemperature) {
digitalWrite(LedPinRed, HIGH);
}
if(temperatureC < minTemperature) {
digitalWrite(LedPinRed, LOW);
}
//Prüfen ob der Taupunkt eine Zahl ist
if(isnan(dewPoint)) {
lcd.setCursor(0, 0);
lcd.print("Fehler ");
if (humidity <= 0) {
lcd.setCursor(0, 1);
lcd.print("Feuchte betraegt 0%");
}
//Temperatur und Leuftfeuchtigkeit ausgeben
lcd.setCursor(0, 2);
lcd.print("Temperatur: ");
lcd.print(temperatureC);
lcd.print("C ");
lcd.setCursor(0, 3);
lcd.print("Feuchte: ");
lcd.print(humidity);
lcd.print("% ");
return;
}
if(dewPoint > maxDewPoint) {
digitalWrite(LedPinYellow, HIGH);
delay(250);
digitalWrite(LedPinYellow, LOW);
delay(250);
}
if(dewPoint < minDewPoint) {
digitalWrite(LedPinYellow, LOW);
}
//Ausgabe der Messwerte auf dem LCD-Display
lcd.setCursor(0, 0);
lcd.print(" Messungen");
lcd.setCursor(0, 1);
lcd.print("Temperatur: ");
lcd.print(temperatureC);
lcd.print("C ");
lcd.setCursor(0, 2);
lcd.print("Feuchte: ");
lcd.print(humidity);
lcd.print("% ");
lcd.setCursor(0, 3);
lcd.print("Taupunkt: ");
lcd.print(dewPoint);
lcd.print("C ");
Serial.print("Temperatur: ");
Serial.print(temperatureC);
Serial.print(" Luftfeuchtigkeit: ");
Serial.print(humidity);
Serial.print(" Taupunkttemperatur: ");
Serial.println(dewPoint);
}