diff --git a/Steuerung_Truhen.ino b/Steuerung_Truhen.ino new file mode 100644 index 0000000..a656ae7 --- /dev/null +++ b/Steuerung_Truhen.ino @@ -0,0 +1,152 @@ +#include //Setup Sensoren +#include +#define DHTPIN1 8 +#define DHTPIN2 9 +#define DHTTYPE DHT22 +DHT dht1(DHTPIN1, DHTTYPE); +DHT dht2(DHTPIN2, DHTTYPE); + +#include //Setup SD SDK=D13, MOSI=D11, MISO=D12 + +#include //Setup LCD +#include +LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //0x3F = Adresse des Displays + +const int REL1 = 2; //Pin des Relais +const int REL2 = 3; +int stat1 = 0; //Status-Variable +int stat2 = 0; + +float T1 = 0; //Temperatur-Variablen +float T2 = 0; + +unsigned long zeit1 = 0; //Zeitstempel für Relais +unsigned long zeit2 = 0; +int uptime = 0; //Zeitstempel für log in min +int logmin = 0; +int logsek = 0; +String logdata1 = ""; +String logdata2 = ""; + +//* **EINSTELLUNGEN** *// +const int mess = 5; //Messintervall in s !!! muss >2 wegen Sensoren +const int truhe = 30; //Schaltintervall in min +const int uT = 0; //Abschalt-Temperatur in °C +const int oT = 6; //Einschalt-Temperatur in °C + +void setup() { + //Serial.begin(9600); + dht1.begin(); //Starten der Sensoren + dht2.begin(); + delay(2000); + + lcd.begin(16,2); //Starten des LCD, 16 Zeichen, 2 Zeilen + lcd.backlight(); //Beleuchtung des Displays einschalten + delay(2000); + + lcd.setCursor(0,0); //...(Zeichen,Zeile); + lcd.print("Initialisierung"); + delay(2000); + if (!SD.begin(4)) { //Initialisiere SD_Karte mit CS auf Pin D4 + lcd.setCursor(0,1); + lcd.print("fehlgeschlagen!"); + delay(2000); + return; + } + lcd.setCursor(0,1); + lcd.print("abgeschlossen"); + delay(2000); + + pinMode(REL1, OUTPUT); + pinMode(REL2, OUTPUT); + digitalWrite(REL1, HIGH); + digitalWrite(REL2, HIGH); + + File logfile = SD.open("logTruhe.txt", FILE_WRITE); //Erstelle bzw. öffne log-Datei + logfile.println("t(min)\tTruhe\tT(°C)\tStatus"); + logfile.close(); +} + +void loop() { +//Messung und log + T1 = dht1.readTemperature(); + logdata1 = String(logmin) + ":" + String(logsek) + "\t1\t" + String(T1) + "\t" + String(stat1); + T2 = dht2.readTemperature(); + logdata2 = String(logmin) + ":" + String(logsek) + "\t2\t" + String(T2) + "\t" + String(stat2); + File logfile = SD.open("logTruhe.txt", FILE_WRITE); + logfile.println(logdata1); + logfile.println(logdata2); + logfile.println(); + logfile.close(); +//Serial.println("Messung"); + +//Schaltung Truhe 1 + if (millis() >= zeit1){ + if (T1 >= oT){ + digitalWrite(REL1, LOW); + stat1 = 1; + zeit1 = millis()+(truhe*60*1000); + } + else { + if (T1 <= uT){ + digitalWrite(REL1, HIGH); + stat1 = 0; + zeit1 = millis()+(truhe*60*1000); + } + } + } + else{ + } +//Schaltung Truhe 2 + if (millis() >= zeit2){ + if (T2 >= oT){ + digitalWrite(REL2, LOW); + stat2 = 1; + zeit2 = millis()+(truhe*60*1000); + } + else { + if (T2 <= uT){ + digitalWrite(REL2, HIGH); + stat2 = 0; + zeit2 = millis()+(truhe*60*1000); + } + } + } + else{ + } +//Serial.println("Schaltung"); + +//LCD-Anzeige + lcd.setCursor(0,0); //...(Zeichen,Zeile); + lcd.print("Truhe1 "); + lcd.setCursor(7,0); + lcd.print(String(T1)); + lcd.setCursor(11,0); + lcd.print("\337C"); + lcd.setCursor(13,0); + if (stat1 == 1){ + lcd.print(" an"); + } + else{ + lcd.print("aus"); + } + lcd.setCursor(0,1); + lcd.print("Truhe2 "); + lcd.setCursor(7,1); + lcd.print(String(T2)); + lcd.setCursor(11,1); + lcd.print("\337C"); + lcd.setCursor(13,1); + if (stat2 == 1){ + lcd.print(" an"); + } + else{ + lcd.print("aus"); + } + +delay(mess*1000); +uptime += mess; +logmin = uptime/60; +logsek = uptime%60; +//Serial.println("LCD"); +}