/*
Autor: Gregor Mausser
Datum: 04.03.20263
Titel: Messstation mit DHT22
*/
//Bibliothek für DHT22
#include <DHT.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);
void setup() {
Serial.begin(9600);
pinMode(LedPinRed, OUTPUT);
pinMode(LedPinYellow, OUTPUT);
dht.begin();
}
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)) {
Serial.println("Es ist ein Fehler während der berechnung aufgetreten!!");
//Temperatur und Leuftfeuchtigkeit ausgeben
Serial.print("Temperatur: ");
Serial.print(temperatureC);
Serial.print(" Luftfeuchtigkeit: ");
Serial.print(humidity);
return;
}
if(dewPoint > maxDewPoint) {
digitalWrite(LedPinYellow, HIGH);
delay(250);
digitalWrite(LedPinYellow, LOW);
delay(250);
}
if(dewPoint < minDewPoint) {
digitalWrite(LedPinYellow, LOW);
}
//Ausgabe der Messwerte im Serial Monitor
Serial.print("Temperatur: ");
Serial.print(temperatureC);
Serial.print(" Luftfeuchtigkeit: ");
Serial.print(humidity);
Serial.print(" Taupunkttemperatur: ");
Serial.println(dewPoint);
}