/*
* Name: arduino_klimabox.ino
* Date: 2024/01/24
* Author: Luis OSkar George
* Version 1.5
* Wokwi-Simulation:
* Es wird ein Arduino Uno simuliert.
*
* https://wokwi.com/projects/380176377990187009
*/
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Wire.h>
#include <TM1637TinyDisplay.h> //(Zusatz)
// Definition der Pins für die LEDs
const int blueLedPin = 6;
const int redLedPin = 4;
const int greenLedPin = 5;
// Definition der Pins für die Taster
const int maxTempPotPin = A0;
// Definition der DHT-Sensor-Parameter
const int DHTPin = 12;
const int DHTType = DHT22;
DHT dht(DHTPin, DHTType);
//Definition der Digit Display Parameter
const int CLK = 10;
const int DIO = 11;
TM1637TinyDisplay display(CLK, DIO);
// Definition des LCD-Displays
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Min und Max Werte für den Temperaturbereich
const int minTemp = 20;
int maxTemp = 24;
void setup() {
// Initialisierung der LEDs
pinMode(blueLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
// Initialisierung des Drehreglers
pinMode(maxTempPotPin, INPUT);
// Initialisierung des DHT-Sensors
dht.begin();
// Initialisierung des LCD-Displays
lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
//Initialisierung des Difit Displays
display.begin();
}
void loop() {
// Temperatur und Luftfeuchtigkeit vom DHT-Sensor lesen
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
lcd.print("Fehler");
}
// LCD aktualisieren
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Feuchtigkeit: ");
lcd.print(humidity);
lcd.print("%");
// Maximalen Temperaturwert mit dem Drehregler einstellen
maxTemp = map(analogRead(maxTempPotPin), 0, 1024, 20, 30);
// LED-Status basierend auf der Temperatur aktualisieren
updateLedStatus(temperature);
//Zeige auf Digit Display maxTemp vom Drehpotentiometer an
display.showNumber(maxTemp);
// Messintervall einhalten
delay(5000);
}
void updateLedStatus(float temperature) {
// Blaue LED für Messbereichsunterschreitung
if (temperature < minTemp) {
digitalWrite(blueLedPin, HIGH);
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, LOW);
}
// Rote LED für Messbereichsüberschreitung
else if (temperature > maxTemp) {
digitalWrite(blueLedPin, LOW);
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
}
// Grüne LED für normalen Messbereich
else {
digitalWrite(blueLedPin, LOW);
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
}
}