Pages: [1]   Go Down
Author Topic: Hysterese programmieren  (Read 1895 times)
0 Members and 1 Guest are viewing this topic.
Rosrath
Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Heute ist die gute alte Zeit von Morgen ;-)

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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);
}
« Last Edit: November 01, 2011, 05:22:19 am by Joghurt » Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Grüße Uwe
Logged

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Richtig ist
Code:
else if (celcius >25 && celcius <25)
Das wird nix, das wäre nie 'wahr'...
Logged

Rosrath
Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Heute ist die gute alte Zeit von Morgen ;-)

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Richtig ist
Code:
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
Logged

Pages: [1]   Go Up
Jump to: