Guten Abend,
Will einen Vorlauf für einen Bodenheizungskreis steuern. Der Mischer ist ein Danfoss AmI 140 / 230V
eigentlich dachte ich er hätte eine Abschaltung in beiden Endpositionen. Hat er aber nur eingefahren. Wie könnte ich bewerkstelligen, dass die Relais nach max 1,5 Minuten auf High gehen und der Motor abstellt, auch wenn die Vorlaufstemperatur den Sollwert noch nicht erreicht hat. Der Arduino Uno müsste jedoch weiterhin Temperatur messen etc. und die Relais später wieder schalten können... Also eine Softwarelösung für die fehlende automatische Abschaltung im ausgefahrenen Zustand. Bin dankbar für eine Idee.
#include <Wire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
// Initialisiere die Bibliothek mit den Nummern der Schnittstellenpins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define DS18B20_PIN A5 // Pin des Temperatursensors
#define RELAY_PIN_COOLER A1 // Pin Relais Kühler
#define RELAY_PIN_HEATER A2 // Pin Relais Heizung (sind beide an wird's wärmer siehe Schaltplan des Mischermotors)
OneWire oneWire(DS18B20_PIN);
DallasTemperature sensors(&oneWire);
int Zieltemperatur = 20; // Beispielwert, du kannst dies anpassen
int Toleranz = 1; // Toleranzbereich um die Zieltemperatur
void setup() {
Serial.begin(115200);
// Setze die Anzahl der Spalten und Zeilen des LCDs:
lcd.begin(16, 2);
lcd.setCursor(0, 0);
sensors.begin();
// Gebe die Anzahl der erkannten Sensoren aus
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");
// Setze die Relaispins
pinMode(RELAY_PIN_COOLER, OUTPUT);
pinMode(RELAY_PIN_HEATER, OUTPUT);
}
void loop() {
int x;
x = analogRead(0);
lcd.setCursor(10, 1);
Serial.print("x=");
Serial.println(x);
if (x < 60) {
Serial.print("Rechts ");
} else if (x < 200 && Zieltemperatur < 55) {
Serial.print("Hoch ");
Zieltemperatur++; // Erhöhe Zieltemperatur um 1, wenn kleiner als 55
} else if (x < 400 && Zieltemperatur > 10) {
Serial.print("Runter ");
Zieltemperatur--; // Verringere Zieltemperatur um 1, wenn größer als 10
} else if (x < 600) {
Serial.print("Links ");
} else if (x < 800) {
Serial.print("Auswahl ");
}
sensors.requestTemperatures();
float currentTemperature = sensors.getTempCByIndex(0);
// Steuere die Relais basierend auf der Differenz zwischen Zieltemperatur und Vorlauftemperatur
if (currentTemperature < Zieltemperatur - Toleranz) {
digitalWrite(RELAY_PIN_COOLER, LOW);
digitalWrite(RELAY_PIN_HEATER, LOW);
} else if (currentTemperature > Zieltemperatur + Toleranz) {
digitalWrite(RELAY_PIN_COOLER, HIGH);
digitalWrite(RELAY_PIN_HEATER, LOW);
} else {
// Im Toleranzbereich
digitalWrite(RELAY_PIN_COOLER, HIGH);
digitalWrite(RELAY_PIN_HEATER, HIGH);
}
lcd.clear(); // Lösche das Display, um die Werte zu aktualisieren
lcd.setCursor(0, 0);
lcd.print("Vorlauf: ");
lcd.print(currentTemperature);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Zieltemp: ");
lcd.print(constrain(Zieltemperatur, 10, 55)); // Begrenze die Zieltemperatur auf 10 bis 55
lcd.print(" C ");
}