153 lines
3.5 KiB
C++
153 lines
3.5 KiB
C++
#include <DHT.h> //Setup Sensoren
|
|
#include <DHT_U.h>
|
|
#define DHTPIN1 8
|
|
#define DHTPIN2 9
|
|
#define DHTTYPE DHT22
|
|
DHT dht1(DHTPIN1, DHTTYPE);
|
|
DHT dht2(DHTPIN2, DHTTYPE);
|
|
|
|
#include <SD.h> //Setup SD SDK=D13, MOSI=D11, MISO=D12
|
|
|
|
#include <Wire.h> //Setup LCD
|
|
#include <LiquidCrystal_I2C.h>
|
|
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");
|
|
}
|