Hysterese programmieren

Hallo an alle,

ich beschäftige mich schon seid einiger Zeit mit dem Arduino und habe auch alles soweit hinbekommen. Bei der Programmierung einer Hyserese scheitert es aber leider.

Mein Vorghaben: Heizung einschalten bei 24°C und ausschalten, wenn 25°C erreicht ist. Und Kühlung anschalten bei 26°C und ausschalten bei 25°C. (Als Kontrolle habe ich Leds)

Der Code sieht gerade folgendermaßen aus:

if (celcius <=24)
{
 digitalWrite(heizer,HIGH);
 digitalWrite(lufter,LOW);
 digitalWrite(redled,LOW);
 digitalWrite(blueled,HIGH);
 digitalWrite(greenled,LOW);
}
else if (celcius >=26)
{
 digitalWrite(heizer,LOW);
 digitalWrite(lufter,HIGH);
 digitalWrite(redled,HIGH);
 digitalWrite(blueled,LOW);
 digitalWrite(greenled,LOW);
}
else if (celcius >24 && celcius <26)
{
 digitalWrite(heizer,LOW);
 digitalWrite(lufter,LOW);
 digitalWrite(redled,LOW);
 digitalWrite(blueled,LOW);
 digitalWrite(greenled,HIGH);
}

Leider schwankt die Temperatur gerade bei 25,9°C & 26,1°C so dass das Relais immer ein und wieder ausschaltet.
Könnt ihr mir bitte helfen?

Ich danke euch im Vorraus
Gruß Rene

Würde spezielle Variablen setzen wenn der untere oder der obere Bereich erreicht wird, damit kannst Du dann im mittleren Bereich feststellen aus welcher Richtung Du gerade kommst und entsprechende reagieren.

Was in der Richtung:

boolean heating;
boolean cooling;

void loop() {
if (celcius <=24)
  heating = true;
if (celcius <=25)
  cooling = false;
if (celcius >=25)
  heating = false;
if (celcius >=26)
  cooling = true;

if (heating) {
  digitalWrite(heizer,HIGH);
  digitalWrite(lufter,LOW);
  digitalWrite(redled,LOW);
  digitalWrite(blueled,HIGH);
  digitalWrite(greenled,LOW);
}
if (cooling)
{
  digitalWrite(heizer,LOW);
  digitalWrite(lufter,HIGH);
  digitalWrite(redled,HIGH);
  digitalWrite(blueled,LOW);
  digitalWrite(greenled,LOW);
}
if (!heating && !cooling)
{
  digitalWrite(heizer,LOW);
  digitalWrite(lufter,LOW);
  digitalWrite(redled,LOW);
  digitalWrite(blueled,LOW);
  digitalWrite(greenled,HIGH);
}

Mein Vorghaben: Heizung einschalten bei 24°C und ausschalten, wenn 25°C erreicht ist. Und Kühlung anschalten bei 26°C und ausschalten bei 25°C. (Als Kontrolle habe ich Leds)

else if (celcius >24 && celcius <26)
{
  digitalWrite(heizer,LOW);
  digitalWrite(lufter,LOW);

Mit dieser If-Anweisung
schaltest Du die Heizung bei 24,0 Grad ein und bei 24,1 Grad aus und
schaltest Du den Lüfter bei 26,0 Grad ein und bei 25,9 aus.

Richtig ist

else if (celcius >25 && celcius <25)

Grüße Uwe

uwefed:
Richtig ist

else if (celcius >25 && celcius <25)

Das wird nix, das wäre nie 'wahr'...

Hi ihr zwei,

vielen Dank für eure schnelle Antwort.
Joghurt; ich habe dein Beispiel übernommen und es hat sofort funktioniert. Ich habe es gerade ausprobiert.
Danke Danke Danke :slight_smile:

Joghurt:

uwefed:
Richtig ist

else if (celcius >25 && celcius <25)

Das wird nix, das wäre nie 'wahr'...

Das stimmt auch wieder.
Hab zwar den Fehler aufgezeigt aber gleich wieder einen neuen produziert.
Mit anderen grezwerten müßte es funktionieren, aber Joghurts Lösung ist die bessere.
Joghurt Danke für's verbessern
Grüße Uwe