Lüftersteuerung um Luftfeuchte im Keller zu regulieren

ElCaron:
Vielleicht fängst Du erstmal an zu massen und schaust, ob Du überhaupt in der Nähe eines Schimmelproblems bist? Wenn nicht, würde ich meine Außenwand nicht durchbohren.

Das habe ich auch nicht vor! (Um hier mal alle zu beruhigen... :wink: ) Ich habe eine recht alte Kellertüre, bei der ich gesehen habe, dass ich das Fenster darin recht einfach ausbauen kann. Wenn es alles nichts bringt, könnte ich das auch wieder rückgängig machen.

uwefed:
Ich bin immernoch der Meinung daß Du die absolute Luftfeuchtigkeit zur Lüftersteuerung heranziehen kannst ( ob die Luft draußen trockener ist als im Keller) aber mit der relativen Luftfeuchtigkeit im Keller arbeiten mußt um zu wissen ob Du ein mögliches Schimmelproblem oder ein feuchtes Klima im Keller hast.
Grüße Uwe

Ich habe mir deinen Beitrag noch mal durchgelesen und mit ausgedachten Temperaturen und dieser Tabelle vergleichen. Jetzt habe ich es auch verstanden. Du hast recht! Ich muss mich auf die relative Luftfeuchte als Trigger beziehen. Danke nochmal für deine Beharlichkeit! Manchmal steht man auf dem Schlauch... :smiley:

Scherheinz:
Mal ne Frage nebenher, was ist der Unterschied zwischen Be- und Entlüften? Oder willst du nur eine Bohrung machen?
Dann würdest wahrscheinlich entweder die feuchte Luft in die Wohnung drücken oder Luft aus der Wohnung ansaugen was auch nicht so gut wäre.

Also der Plan ist, wie gesagt, das Fenster einer Kellertüre gegen ein Brett zu ersetzten. Dort wollte ich zwei Lüfter, mit diesen beschriebenen "Rückschlagklappen" ?! einbauen. Eine Lüfter soll saugen, der andere pusten.
Von der Idee her, soll wenn wie gerade gelernt, die relHum im Keller sagen wir 60% erreicht, die Logik entscheiden ob es sinnig ist Luft von außen zu holen (weil sie trockener ist), oder Luft aus den Keller heraus zu saugen (weil die Aussenluft noch feuchter [absHum] ist)

Ich muss mir das noch mal im Baumarkt anschauen, aber ich glaube von der Logik her komme ich nicht umher diese Klappen mit Servos zu versehen. Klar, sie dienen als Rückschlagventil, aber da ich je eines in eine Richtung einbauen muss, ist ja immer eines offen...

Wenn du Luft aus dem Keller holst muss sie ja von irgendwoher nachströmen. Diese muss doch zwangsläufig aus dem Wohnbereich kommen wenn es keine Außenluft sein darf, oder steh ich total auf dem Schlauch? :o

Scherheinz:
Diese muss doch zwangsläufig aus dem Wohnbereich kommen wenn es keine Außenluft sein darf, oder steh ich total auf dem Schlauch? :o

Das stimmt. Die Luft aus dem Wohnbereich ist nicht zwangsläufig trockener als die Außenluft. Wenn der Wohnbereich geheizt ist, zieht man auch Wärme aus dem Wohnbereich ab und die Energieersparnis gegenüber einem Entfeuchter oder sparsamen Wäschetrockner verpufft.

Ja, die Luft kommt natürlich aus dem Haus, aber der Trockenkeller mit der Waschmaschine, ist nur ein Teil des Kellers. D.h. wenn Luft nachströmt, werden erst mal andere Kellerräume angezapft. Und selbst wenn, die Luft sollte ja immer noch weniger Wasser enthalten, als die des Raums, in dem nasse Wäsche aufgehangen wurde, oder?
Praktischer weise dürfen sich die Katzen im Keller frei bewegen. Daher haben die Türen Katzenklappen, was ein nachströmen von Luft erleichtern sollte...

Klar, enthält die Luft weniger Feuchtigkeit wie die aus dem Trockenkeller. Allerdings lädt die Luft aus dem Wohnbereich ihr Wasser dann in den anderen Kellerräumen ab. Du solltest auch die Feuchtigkeit in den anderen Kellerräumen im Auge behalten. Wäsche im Keller zu trocknen ist wegen der Feuchtigkeit problematisch.
Ich muss zugeben, ich bin da ziemlich empfindlich. Ein früherer Nachbar hat seine Wäsche im Keller getrocknet. Der Muff dadurch war kaum auszuhalten. Das war bei mir der Grund auf die elektrische Entfeuchtung zu setzen. Seitdem beobachte ich die Kellerfeuchtigkeit mit den jahreszeitlichen und Wettereinflüssen genau. Da zwischenzeitlich die Kellerfenster erneuert wurden, konnte ich auch beobachten, dass die Luft aus dem Treppenhaus/Wohnbereich nicht gerade ohne Feuchtigkeit ist.

Genau deshalb hab ich nachgefragt! Wenn du im Keller einen Unterdruck erzeugst der sich übers Haus erstreckt, wird zum Beispiel die feuchte Luft aus dem Bad nicht durchs Fenster verschwinden sondern quer durch die Wohnung bis in den Keller transportiert.

Kleines Update. Ich bin über das Breadboard hinaus... Hier einige Bilder:

Und hier der letzt Stand des Codes:

#include <DHT.h>     // DHT library
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display


#define DHTPIN_IN 13  // Pin to which the sensor is connected 
#define DHTPIN_OUT 12  // Pin to which the sensor is connected 
#define DHTTYPE DHT22   // Sensor pins = 1:5V, 2:Data, 3:Not connected, 4:GND  + 10kOhm from 1 -> 2
DHT dht_IN(DHTPIN_IN, DHTTYPE);
DHT dht_OUT(DHTPIN_OUT, DHTTYPE);

int relais_IN   = 7;    //Luft IN den Keller ziehen
int relais_OUT  = 8;    //Luft AUS dem Keller ziehen

const double UG = 8314.3;          // J/(kmol*K) (universelle Gaskonstante)
const double mw = 18.016;         // kg/kmol (Molekulargewicht des Wasserdampfes)
const double K  = 273.15;        // °K (Entspricht 0°K)
const double tp = 6.1078;         // hPa Triplettpunkt von Wasser bei 0,01°C
unsigned long temp_timestore;    // Variable for system time
unsigned long max_Fan_time;    // Variable for system time

void setup() {


  pinMode(relais_IN, OUTPUT);
  pinMode(relais_OUT, OUTPUT);
  digitalWrite(relais_IN, LOW);
  digitalWrite(relais_OUT, LOW);

  Serial.begin(9600);

  dht_IN.begin();   //Sensoren initialisieren
  dht_OUT.begin();

  lcd.init();           //Initialize the lcd
  lcd.backlight();      //Backlight on

  lcd.setCursor(7, 0);
  lcd.print("IN");
  lcd.setCursor(13, 0);
  lcd.print("OUT");
  lcd.setCursor(0, 1);
  lcd.print("TEMP :");
  lcd.setCursor(19, 1);
  lcd.print("C");
  lcd.setCursor(0, 2);
  lcd.print("relHU:");
  lcd.setCursor(19, 2);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("absHU:");
  lcd.setCursor(19, 3);
  lcd.print("g");

}

void loop() {

  //READ SENSOR


  if (millis() - temp_timestore > 2000 ) {      //Interval for readout

    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

    float relHum_IN     = dht_IN.readHumidity();
    double aktTemp_IN   = dht_IN.readTemperature(); // Read temperature as Celsius (the default)
    float relHum_OUT    = dht_OUT.readHumidity();
    double aktTemp_OUT  = dht_OUT.readTemperature(); // Read temperature as Celsius (the default)


    //CALCULATIONS

    double calcDewPoint_IN(double aktTemp_IN, float relHum_IN);
    double calcDewPoint_OUT(double aktTemp_OUT, float relHum_OUT);
    {
      double a, b;
      if (aktTemp_OUT >= 0)
      {
        a = 7.5;
        b = 237.3;
      }
      else
      {
        a = 7.6;
        b = 240.7;
      }

      // Berechnung des Sättigungsdampfdrucks in hPa
      double SDD_IN = tp * pow(10, ((a * aktTemp_IN) / (b + aktTemp_IN)));
      double SDD_OUT = tp * pow(10, ((a * aktTemp_OUT) / (b + aktTemp_OUT)));

      // Berechnung des Dampfdrucks in hPa
      double DD_IN = relHum_IN / 100 * SDD_IN;
      double DD_OUT = relHum_OUT / 100 * SDD_OUT;

      // Berechnung der Taupunkttemperatur in °C
      double v_IN = log(DD_IN / tp) / log(10);
      double v_OUT = log(DD_OUT / tp) / log(10);
      double dewPoint_IN = b * v_IN / (a - v_IN);
      double dewPoint_OUT = b * v_OUT / (a - v_OUT);


      //Calculate absolute Humidity (in g/m³)

      double absHum_IN = 100000 * mw / UG * relHum_IN / 100 * tp * pow(10, ((a * aktTemp_IN) / (b + aktTemp_IN))) / (aktTemp_IN + 273.15);
      double absHum_OUT = 100000 * mw / UG * relHum_OUT / 100 * tp * pow(10, ((a * aktTemp_OUT) / (b + aktTemp_OUT))) / (aktTemp_OUT + 273.15);




      //ACT FANS LOGIC

      if (aktTemp_IN <= 18)                                      //Indoor Temp <18°C => OFF
      {
        digitalWrite(relais_IN, LOW);
        digitalWrite(relais_OUT, LOW);
      }
      else
      {
        if (relHum_IN >= 65 && absHum_IN < absHum_OUT)

        {
          digitalWrite(relais_OUT, LOW);
          digitalWrite(relais_IN, HIGH);
        }

        else
        {
          if (relHum_IN >=  65 && absHum_IN > absHum_OUT)
          {
            digitalWrite(relais_OUT, HIGH);
            digitalWrite(relais_IN, LOW);
          }

          else
          {
            if (relHum_IN <=  55 || millis() - max_Fan_time >  900000)      //If IndoorHum < 55%rel or Fan act for > 15min => OFF
            {
              digitalWrite(relais_IN, LOW);
              digitalWrite(relais_OUT, LOW);
            }
          }
        }
      }




      //PRINT TO DISPLAY

      lcd.setCursor(7, 1);
      lcd.print(aktTemp_IN);
      lcd.setCursor(13, 1);
      lcd.print(aktTemp_OUT);

      lcd.setCursor(7, 2);
      lcd.print(relHum_IN);
      lcd.setCursor(13, 2);
      lcd.print(relHum_OUT);

      lcd.setCursor(7, 3);
      lcd.print(absHum_IN);
      lcd.setCursor(13, 3);
      lcd.print(absHum_OUT);





      //PRINT TO SERIAL MONITOR

      Serial.print("IN: ");
      Serial.print("relHum: ");
      Serial.print(relHum_IN);
      Serial.print("%\t");
      Serial.print("Temp: ");
      Serial.print(aktTemp_IN);
      Serial.print(" *C");
      Serial.print(" \t");
      Serial.print("DewPoint: ");
      Serial.print(dewPoint_IN);
      Serial.print(" *C");
      Serial.print(" \t");
      Serial.print("absHum: ");
      Serial.print(absHum_IN);
      Serial.println(" g/m3 ");

      Serial.print("OUT: ");
      Serial.print("relHum: ");
      Serial.print(relHum_OUT);
      Serial.print("%\t");
      Serial.print("Temp: ");
      Serial.print(aktTemp_OUT);
      Serial.print(" *C");
      Serial.print(" \t");
      Serial.print("DewPoint: ");
      Serial.print(dewPoint_OUT);
      Serial.print(" *C");
      Serial.print(" \t");
      Serial.print("absHum: ");
      Serial.print(absHum_OUT);
      Serial.println(" g/m3 ");
    }
    temp_timestore = millis();   //Save System time for next interval
    max_Fan_time = millis();   //Save System time for next interval
  }
}

Was nun noch fehlt ist, eine "Klappensteuerung" die die Lüfter verschließt, wenn sie nicht laufen. Außerdem hätte ich gerne, dass wenn die Lüfter 15min gelaufen sind, eine Pause von 5min folgt, damit sich die Messwerte stabilisieren können. Was das angeht, stehe ich aber gerade auf dem Schlauch...

drdrhase:
Außerdem hätte ich gerne, dass wenn die Lüfter 15min gelaufen sind, eine Pause von 5min folgt, damit sich die Messwerte stabilisieren können. Was das angeht, stehe ich aber gerade auf dem Schlauch...

Führe dazu noch eine Statusvariable ein, die zwischen zwei Zuständen (Lüfter läuft/Pause) wechselt. Du hast schon die Abschaltung nach 15min drin, dort setzt du sie. Wo der Lüfter eingeschaltet wird, wird geprüft, ob die Pause gesetzt ist und dann fügst du noch eine Abfrage ein, dass nach 5min die Abschaltung wieder erlaubt wird.

Ich bin gespannt,ob die Lüftung den erwünschten Erfolg bringt. Jetzt dürfte es mit der Außen-Luftfeuchtigkeit unkritisch sein. Spannend wird es nächstes Jahr, wenn der Sommer wieder kommt. Jetzt musst du dir eher die Wärme-Bilanz anschauen, damit du nicht zu viel geheizte Luft nach draußen bläst.