Hallo Leute,
ich möchte meine Heizung/ Raumtemperatur besser und effizienter steuern und möchte dazu einen Arduino Nano nehmen. Als Inspirration habe ich dieses Video aus Youtube genommen: Temperatursteuerung selber bauen mit einem Arduino und dem DS18B20 - YouTube
dort wird alles sehr schön gezeig und erklärt, nur passt das nicht ganz für mich. Ich möchte diese Steuerung auf 4 Fühler, 4 Relais und 8 Taster erweitern. Das im Video gezeigte 20x4 I2C Display bleibt gleich und auch das einzige. nun möchte ich aber auf dem Display jede Zeile für einen Raum mit Soll und Ist Temperatur angezeigt haben. Also ungefähr so:
WZ Soll: 18C Ist: 20C
B: Soll: 18C Ist: 21C
SZ: Soll: 18C Ist: 18C
AZ: Soll: 18C Ist: 17C
Den Code habe ich soweit angepasst, nur bin ich mir nicht sicher, ob mir das Display das so auch wieder geben wird, oder wie ich das machen könnte. Bin bei Displays ziemlich am Anfang. Könnt ihr mich da bitte in den richtigen Weg lenken? den Code findet ihr hier:
/*Temperatursteuerung von Stellantriebe fuer Heizungen mit stromlos geschlossenen 24V Antriebe
* Version 1.0 vom 9.10.2022
* Umgeschrieben von Stephan, inspirriert durch "Der Bastelbruder"
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#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 ");
}
Ich habe leider noch nicht das Display zum testen, deswegen wäre es mir lieb, wenn ich dennoch den Code soweit schon fertig habe, ebenso den Rest der Hardware. Als Sketch sieht es dann so aus:
Mit freundlichen Grüßen
Stephan