Go Down

Topic: Hysterese programmieren (Read 2290 times) previous topic - next topic

riiin

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
Heute ist die gute alte Zeit von Morgen ;-)

Joghurt

#1
Nov 01, 2011, 11:17 am Last Edit: Nov 01, 2011, 11:22 am by Joghurt Reason: 1
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:
Code: [Select]

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);
}

uwefed

Quote
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)


Code: [Select]
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
Code: [Select]
else if (celcius >25 && celcius <25)

Grüße Uwe

Joghurt


Richtig ist
Code: [Select]
else if (celcius >25 && celcius <25)

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

riiin

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 :-)

Heute ist die gute alte Zeit von Morgen ;-)

uwefed



Richtig ist
Code: [Select]
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

Go Up