/*Temperatursteuerung von Stellantriebe fuer Heizungen mit stromlos geschlossenen 24V Antriebe
* Version 1.0 vom 9.10.2022
* Umgeschrieben von Stephan, inspirriert durch "Der Bastelbruder"
// https://forum.arduino.cc/t/heizungssteuerung-raumtemperaturregelung/1041610/3
// to be deleted 2022-12
*/
//#include <OneWire.h>
//#include <DallasTemperature.h>
// simulation Onewire & DS
class OneWire{
public:
OneWire(int pin){}
};
class DallasTemperature{
public:
DallasTemperature(OneWire oneWire) {}
void begin(){};
void requestTemperatures(){};
float getTempCByIndex(uint8_t index)
{
(void)index;
return 22.1; // hardcoded fixe Temperatur
}
};
// Ende Simulation
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
//================================Wohnzimmer==Ein-/Ausgaenge================================================
#define DS18B20_DATA_WZ 2
#define Knopf_Plus_PIN_WZ 3
#define Knopf_Minus_PIN_WZ 4
#define Relais_PIN_WZ A0
#define start_WZ 18.0
//=======================================Bad==Ein-/Ausgaenge================================================
#define DS18B20_DATA_B 5
#define Knopf_Plus_PIN_B 6
#define Knopf_Minus_PIN_B 7
#define Relais_PIN_B A1
#define start_B 18.0
//===============================Schlafzimmer==Ein-/Ausgaenge================================================
#define DS18B20_DATA_SZ 8
#define Knopf_Plus_PIN_SZ 9
#define Knopf_Minus_PIN_SZ 10
#define Relais_PIN_SZ A2
#define start_SZ 18.0
//==============================Arbeitszimmer==Ein-/Ausgaenge================================================
#define DS18B20_DATA_AZ 11
#define Knopf_Plus_PIN_AZ 12
#define Knopf_Minus_PIN_AZ 13
#define Relais_PIN_AZ A3
#define start_AZ 18.0
//=========================================Code=============================================================
OneWire oneWire(DS18B20_DATA_WZ);
DallasTemperature sensors(&oneWire);
float soll_Temp_WZ;
OneWire oneWire_B(DS18B20_DATA_B);
DallasTemperature sensors_B(&oneWire);
float soll_Temp_B;
OneWire oneWire_SZ(DS18B20_DATA_SZ);
DallasTemperature sensors_SZ(&oneWire);
float soll_Temp_SZ;
OneWire oneWire_AZ(DS18B20_DATA_AZ);
DallasTemperature sensors_AZ(&oneWire);
float soll_Temp_AZ;
void setup(){
lcd.init();
lcd.backlight();
sensors.begin();
pinMode(Relais_PIN_WZ, OUTPUT);
digitalWrite(Relais_PIN_WZ,HIGH);
pinMode(Knopf_Plus_PIN_WZ,INPUT_PULLUP);
pinMode(Knopf_Minus_PIN_WZ,INPUT_PULLUP);
sensors_B.begin();
pinMode(Relais_PIN_B, OUTPUT);
digitalWrite(Relais_PIN_B,HIGH);
pinMode(Knopf_Plus_PIN_B,INPUT_PULLUP);
pinMode(Knopf_Minus_PIN_B,INPUT_PULLUP);
sensors_SZ.begin();
pinMode(Relais_PIN_SZ, OUTPUT);
digitalWrite(Relais_PIN_SZ,HIGH);
pinMode(Knopf_Plus_PIN_SZ,INPUT_PULLUP);
pinMode(Knopf_Minus_PIN_SZ,INPUT_PULLUP);
sensors_AZ.begin();
pinMode(Relais_PIN_AZ, OUTPUT);
digitalWrite(Relais_PIN_AZ,HIGH);
pinMode(Knopf_Plus_PIN_AZ,INPUT_PULLUP);
pinMode(Knopf_Minus_PIN_AZ,INPUT_PULLUP);
}
void loop(){
//==============================================Wohnzimmer===================================================
if (soll_Temp_WZ == 0){
soll_Temp_WZ = start_WZ;
}
while (digitalRead(Knopf_Plus_PIN_WZ) == 0){
soll_Temp_WZ = soll_Temp_WZ + 0.1;
lcd.setCursor(0,1);
lcd.print("WZ Soll: ");
lcd.print(String(soll_Temp_WZ,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_plus_WZ = knopf_lang_plus_WZ + 1;
while (digitalRead(Knopf_Plus_PIN_WZ) == 0 && knopf_lang_plus_WZ == 3){
soll_Temp_WZ = soll_Temp_WZ + 0.1;
lcd.setCursor(0,1);
lcd.print("WZ Soll: ");
lcd.print(String(soll_Temp_WZ,1));
lcd.print("\337C ");
delay(100);
}
}
while (digitalRead(Knopf_Minus_PIN_WZ) == 0){
soll_Temp_WZ = soll_Temp_WZ - 0.1;
lcd.setCursor(0,1);
lcd.print("WZ Soll: ");
lcd.print(String(soll_Temp_WZ,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_minus_WZ= knopf_lang_minus_WZ + 1;
while (digitalRead(Knopf_Minus_PIN_WZ) == 0 && knopf_lang_minus_WZ == 3){
soll_Temp_WZ = soll_Temp_WZ - 0.1;
lcd.setCursor(0,1);
lcd.print("WZ Soll: ");
lcd.print(String(soll_Temp_WZ,1));
lcd.print("\337C ");
delay(100);
}
}
sensors.requestTemperatures();
float temp_WZ (sensors.getTempCByIndex(0));
lcd.setCursor(0,0);
lcd.print("WZ Ist: ");
lcd.print(String(temp_WZ,1));
lcd.print("\337C ");
lcd.setCursor(0,1);
lcd.print("WZ Soll: ");
lcd.print(String(soll_Temp_WZ,1));
lcd.print("\337C ");
//==============================================Bad==========================================================
if (soll_Temp_B == 0){
soll_Temp_B = start_B;
}
while (digitalRead(Knopf_Plus_PIN_B) == 0){
soll_Temp_B = soll_Temp_B + 0.1;
lcd.setCursor(0,1);
lcd.print("B Soll: ");
lcd.print(String(soll_Temp_B,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_plus_B = knopf_lang_plus_B + 1;
while (digitalRead(Knopf_Plus_PIN_B) == 0 && knopf_lang_plus_B == 3){
soll_Temp_B = soll_Temp_B + 0.1;
lcd.setCursor(0,1);
lcd.print("B Soll: ");
lcd.print(String(soll_Temp_B,1));
lcd.print("\337C ");
delay(100);
}
}
while (digitalRead(Knopf_Minus_PIN_B) == 0){
soll_Temp_B = soll_Temp_B - 0.1;
lcd.setCursor(0,1);
lcd.print("B Soll: ");
lcd.print(String(soll_Temp_B,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_minus_B = knopf_lang_minus_B + 1;
while (digitalRead(Knopf_Minus_PIN_B) == 0 && knopf_lang_minus_B == 3){
soll_Temp_B = soll_Temp_B - 0.1;
lcd.setCursor(0,1);
lcd.print("B Soll: ");
lcd.print(String(soll_Temp_B,1));
lcd.print("\337C ");
delay(100);
}
}
sensors_B.requestTemperatures();
float temp_B (sensors_B.getTempCByIndex(0));
lcd.setCursor(0,0);
lcd.print("B Ist: ");
lcd.print(String(temp_B,1));
lcd.print("\337C ");
lcd.setCursor(0,1);
lcd.print("B Soll: ");
lcd.print(String(soll_Temp_B,1));
lcd.print("\337C ");
//==============================================Schlafzimmer=================================================
if (soll_Temp_SZ == 0){
soll_Temp_SZ = start_SZ;
}
while (digitalRead(Knopf_Plus_PIN_SZ) == 0){
soll_Temp_SZ = soll_Temp_SZ + 0.1;
lcd.setCursor(0,1);
lcd.print("SZ Soll: ");
lcd.print(String(soll_Temp_SZ,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_plus_SZ = knopf_lang_plus_SZ + 1;
while (digitalRead(Knopf_Plus_PIN_SZ) == 0 && knopf_lang_plus_SZ == 3){
soll_Temp_SZ = soll_Temp_SZ + 0.1;
lcd.setCursor(0,1);
lcd.print("SZ Soll: ");
lcd.print(String(soll_Temp_SZ,1));
lcd.print("\337C ");
delay(100);
}
}
while (digitalRead(Knopf_Minus_PIN_SZ) == 0){
soll_Temp_SZ = soll_Temp_SZ - 0.1;
lcd.setCursor(0,1);
lcd.print("SZ Soll: ");
lcd.print(String(soll_Temp_SZ,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_minus_SZ = knopf_lang_minus_SZ + 1;
while (digitalRead(Knopf_Minus_PIN_SZ) == 0 && knopf_lang_minus_SZ == 3){
soll_Temp_SZ = soll_Temp_SZ - 0.1;
lcd.setCursor(0,1);
lcd.print("SZ Soll: ");
lcd.print(String(soll_Temp_SZ,1));
lcd.print("\337C ");
delay(100);
}
}
sensors_SZ.requestTemperatures();
float temp_SZ (sensors_SZ.getTempCByIndex(0));
lcd.setCursor(0,0);
lcd.print("SZ Ist: ");
lcd.print(String(temp_SZ,1));
lcd.print("\337C ");
lcd.setCursor(0,1);
lcd.print("SZ Soll: ");
lcd.print(String(soll_Temp_SZ,1));
lcd.print("\337C ");
//==============================================Arbeitszimmer================================================
if (soll_Temp_AZ == 0){
soll_Temp_AZ = start_AZ;
}
while (digitalRead(Knopf_Plus_PIN_AZ) == 0){
soll_Temp_AZ = soll_Temp_AZ + 0.1;
lcd.setCursor(0,1);
lcd.print("AZ Soll: ");
lcd.print(String(soll_Temp_AZ,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_plus_AZ = knopf_lang_plus_AZ + 1;
while (digitalRead(Knopf_Plus_PIN_AZ) == 0 && knopf_lang_plus_AZ == 3){
soll_Temp_AZ = soll_Temp_AZ + 0.1;
lcd.setCursor(0,1);
lcd.print("AZ Soll: ");
lcd.print(String(soll_Temp_AZ,1));
lcd.print("\337C ");
delay(100);
}
}
while (digitalRead(Knopf_Minus_PIN_AZ) == 0){
soll_Temp_AZ = soll_Temp_AZ - 0.1;
lcd.setCursor(0,1);
lcd.print("AZ Soll: ");
lcd.print(String(soll_Temp_AZ,1));
lcd.print("\337C ");
delay(500);
int knopf_lang_minus_AZ = knopf_lang_minus_AZ + 1;
while (digitalRead(Knopf_Minus_PIN_AZ) == 0 && knopf_lang_minus_AZ == 3){
soll_Temp_AZ = soll_Temp_AZ - 0.1;
lcd.setCursor(0,1);
lcd.print("AZ Soll: ");
lcd.print(String(soll_Temp_AZ,1));
lcd.print("\337C ");
delay(100);
}
}
sensors_AZ.requestTemperatures();
float temp_AZ (sensors_AZ.getTempCByIndex(0));
lcd.setCursor(0,0);
lcd.print("AZ Ist: ");
lcd.print(String(temp_AZ,1));
lcd.print("\337C ");
lcd.setCursor(0,1);
lcd.print("AZ Soll: ");
lcd.print(String(soll_Temp_AZ,1));
lcd.print("\337C ");
}