Pages: [1]   Go Down
Author Topic: etwas ausführen nur wenn ein analoger value ca 10 sek einen bestimmten wert hat  (Read 411 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 0
Posts: 696
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
ich habe gerade keine idee, wie ich das hinbekomme, vielleicht denke ich auch zu kompliziert  smiley-eek-blue
Ich möchte, dass meine Lüfter nur dann loslaufen, wenn eine bestimmte Temperatur überschritten wird. Läuft soweit auch ganz gut, allerdings nervt es, wenn die Temperatur zwischen 25.4 und 25.6 grad schwankt, dann geht der lüfter immer an und sofort wieder aus.
Daher möchte ich ne bedinung einbauen, das der lüfter nur anspringen soll, wenn die temperatur mind. 10 sek über 25.5 grad lag (sobald sie einmal wieder unter 25.5 fällt sollen die 10 sek wieder von vorne loszählen.

Steh grad aufm schlauch, hoffe jemand hat ne idee,
Gruß

HIer der code:
Code:
void getWind() {
if (windstille==true) {
  if (Celsius0<25.5) {
    digitalWrite(luefter1, LOW);
    digitalWrite(luefter2, LOW);
    anlauf=true;
    windphase="windstill";
  }
  else if (Celsius0>=27.5) {
    digitalWrite(luefter1, HIGH);
    digitalWrite(luefter2, HIGH);
    anlauf=false;
    windphase="STURM";
  }
  else if (Celsius0>=25.5 && Celsius0<27.5) {
    if (anlauf==true) {
      digitalWrite(luefter1, HIGH);
      digitalWrite(luefter2, HIGH);
      delay(2000);
      anlauf=false;
    }
    else if (anlauf==false) {
      if (Celsius0>=25.5 && Celsius0<26) {
        w=50;
      }
      else if (Celsius0>=26 && Celsius0<26.5) {
        w=100;
      }
      else if (Celsius0>=26.5 && Celsius0<27) {
        w=150;
      }
      else if (Celsius0>=27 && Celsius0<27.5) {
        w=200;
      }
      analogWrite(luefter1, w);
      analogWrite(luefter2, w);
  }
 }
}

Logged

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

Da ist es einfacher eine Hysterese einbauen:
Anschalten bei 25,5Grad und ausschalten bei 24,5Grad.
Grüße Uwe
Logged

Offline Offline
God Member
*****
Karma: 0
Posts: 696
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Was genau ist eine Hysterese?
eigentlich mach ich das doch so:
bei 25.5° schaltet der lüfter ein, unter 25.5° aus.


Logged

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

Nein, das ist keine Hysterese.

Hysteresse ist ein Bereich in dem kein Wechsel stattfindet. Dies genau wegen Deines Problems, daß der Ausgang dauert ein-aus-schaltet, weil die Temperatur etwas instabil ist.

Ich schlug vor bei 25,5 einschalten
und bei 24,5 ausschalten.
So hast Du einen Bereich von 1 Grad bei dem nichts passiert und darum haben Störungen von fast einem Grad keine Auswirkungen.   

Grüße Uwe
Logged

Offline Offline
God Member
*****
Karma: 0
Posts: 696
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alles klar, werd mal ein wenig damit rumspielen. danke
Logged

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

Viel Glück.
Wenn die Temperaturregelung darum zu ungenau wird dann brauchst Du eine Proportionalregelung des Ventilators (PWM).
Grüße Uwe
« Last Edit: April 25, 2011, 04:43:04 pm by uwefed » Logged

Offline Offline
God Member
*****
Karma: 0
Posts: 696
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

der lüfter läuft über pwm und ich habe den jetzt auch proportional eingestellt.
muss nur noch einwenig an den richtigen werten spielen, normalwert der temperatur in einem aqua sollte 25° sein.
Code:
if (windstille==true) {
  if (Celsius0<=25.5) {
    digitalWrite(luefter1, LOW);
    digitalWrite(luefter2, LOW);
    anlauf=true;
    w=0;
    anlaufdelay=millis();
  }
  else if (Celsius0>=26.0) {
    if (anlauf==true) {
      if (millis()-anlaufdelay<5000) {
            digitalWrite(luefter1, HIGH);
            digitalWrite(luefter2, HIGH);
      }
      else if (millis()-anlaufdelay>5000) {
            anlauf=false;
      }
    }
    else if (anlauf==false) {
      w=(Celsius0-25.5)*100;
      if (w>255) w=255;
      analogWrite(luefter1, w);
      analogWrite(luefter2, w);
    }
 }
Logged

Pages: [1]   Go Up
Jump to: