/*
* Name: arduino_klimabox.ino
* Date: 2024/02/15
* Author: Luisa Ostermann, Luis Richter, Silas Klöpper, Leon Glenn, Dimitri Doroschenko
* Version 1.5
* Wokwi-Simulation:
* Es wird das Rich-Shield-One von Open Smart simuliert.
*
* https://wokwi.com/projects/364951815128165377
*/
//Step 1: LCD Display einfügen
#include <LiquidCrystal_I2C.h> // LCD Display importieren
LiquidCrystal_I2C lcd(0x27, 16, 2); // Display Zeilen definieren: 16 Zeichen, zwei Zeilen und der i2C Adresse 0x27
//Step 2: Temperatur und Luftfeuchtigkeitssensor definieren
#include "DHT.h" // Bibliothek importieren
#define DHTPIN 12 // DHT22 an Pin 12 anschließen
#define DHTTYPE DHT22 // DHT22 Simulation = DHT11
DHT dht(DHTPIN, DHTTYPE); // Objekt mit Parameter anlegen (PIN 5 und Type DHT22)
//Step 3: Potentiometer anschließen
#define KNOB A0 //Poti am analogen Anschluss A0
//Step 4: Gegebenheiten aus der Aufgabenstellung minimal 20 Grad
float air, temperature; // Variablen vereinbaren
float mintemp = 25; // Minimale Temperatur angeben = 20 Grad
int maxtemp; // Definiert maximale Temperatur für den Drehregler
//Step 5: LED Lampen definieren
void setup() {
pinMode(4, OUTPUT); // Rote LED am Pin 4, leuchtet bei zu hoher Temperatur
pinMode(5, OUTPUT); // Grüne LED am Pin 5, leuchtet bei Temperatur im Normbereich
pinMode(6, OUTPUT); // Blaue LED am Pin 6, leuchtet bei zu niedriger Temperatur
pinMode(7, OUTPUT); // Gelbe LED am Pin 7, leuchtet, wenn die Luftfeuchtigkeit zu hoch ist
dht.begin(); // DHT-Sensor wird eingeschaltet
lcd.init(); // Display wird initialisiert
lcd.clear(); // Display soll nach dem Einschalten leer sein
lcd.setBacklight(1); // Hintergrundbeleuchtung 0 = aus, 1 = ein
}
//Step 6: Starte Schleife der Temperaturabfrage
void loop() {
temperature = dht.readTemperature(); // temperature = Temperatur, die vom DHT gemessen wird
air = dht.readHumidity(); // air = Luftfeuchtigkeit, die vom DHT gemessen wird
//Step 7: Drehpotentiometer soll Werte erstellen, welche in feste Werte umwgewandelt werden
int maxtemp = analogRead(KNOB); // maxtemp wird dem Poti zugeordnet
maxtemp = map(maxtemp, 0, 1024, 20, 25); // Schrittweite, minimaler und maximaler Wert am Poti definieren
analogWrite(9, maxtemp); // analoges Signal für max temp soll an Pin 9 weitergegeben werden
//Step 8: LEDs werden bei Start resettet
digitalWrite(4, LOW); // Schalte rote LED aus
digitalWrite(5, LOW); // Schalte grüne LED aus
digitalWrite(6, LOW); // Schalte blaue LED aus
digitalWrite(7, LOW); // Schalte gelbe LED aus
//Step 9: If Abfrage der Temperatur definieren
if (temperature > maxtemp) { // Wenn die ausgelesene Temperatur > maximale Temperatur
digitalWrite(4, HIGH); // Schalte rote LED an
}
else if (temperature < mintemp) { // Wenn die ausgelesene Temperatur < minimale Temperatur
digitalWrite(6, HIGH); // Schalte blaue LED an
}
else { // Wenn die ausgelesene Temperatur < max. Temperatur und > min. Temperatur
digitalWrite(5, HIGH); //Schalte grüne LED an
}
//Step 10: If Abfrage der Luftfeuchtigkeit definieren
if (air > 50) { // Wenn die ausgelesene Luftfeuchtigkeit > 50%
digitalWrite(7, HIGH); // Schalte gelbe LED ein
} else { // Wenn die ausgelesene Luftfeuchtigkeit < 50%
digitalWrite(7, LOW); // Schalte gelbe LED aus
}
//Step 11: Ausgabe der Temperatur am LCD Monitor definieren
lcd.setCursor(0, 0); // Cursor auf Zeile 1, Zeichen 1 setzen
lcd.print("Temp = "); // Gib den Temperaturwert aus
lcd.print((float)dht.readTemperature()); // Pfad der Temperaturabfrage
lcd.print(" \337C"); // \337 für Grad Celsius einfügen
delay(500); // Warte 0,5 Sekunden bis zur nächsten Messung
//Step 12: Ausgabe der Luftfeuchtigkeit am LCD Monitor definieren
lcd.setCursor(0, 1); // Cursor auf Zeile 2, Zeichen 1 setzen
lcd.print("Luft = "); // Gib den Luftfeuchtigkeitswert aus
lcd.print((float)dht.readHumidity()); // Pfad der Luftfeuchtigkeitsabfrage
lcd.print(" %"); // für Prozentgrad Luftfeuchtigkeit
delay(500); // Warte 0,5 Sekunden bis zur nächsten Messung
}