Tag 22: Klimawächter

Hinter dem Türchen des 22. Tages befindet sich ein neuer Sensor, der die aktuelle Luftfeuchtigkeit messen kann. Wir benutzen ihn, um einen vollständigen Raumklimawächter zu realisieren. Dazu benötigen wir die folgende Schaltung.

Die Schaltung des Raumklimawächters

Die Schaltung des Raumklimawächters

Der Versuch des heutigen Tages vereint drei Sensoren: den Temperatursensor (NTC), den Lichtsensor (Fototransistor) und den Luftfeuchtesensor. Zusammen können sie einen recht guten Eindruck der aktuellen Klimalage in einem Zimmer abgeben. Dazu müssen Sie aber zunächst das Programm des heutigen Tages starten.

Das Programm misst alle 30 Sekunden alle Werte und überträgt sie über MQTT, was beispielsweise so aussieht:

{"cmd”:”get_hum_state”,”Light”:3903,”Temp”:368,”HUMIDITY”:45}

Wenn Sie den Flow des heutigen Tages in Ihre Node-RED-Umgebung kopieren, natürlich nicht, ohne das persönliche Topic anzupassen und die vorherigen Flows zu deaktivieren, können Sie auf der GUI-Seite die gemessenen Werte einsehen. Ein Function-Node hat auch heute die Temperatur auf einen passenden Wert umgerechnet. Zur genaueren Kalibrierung sind die beiden Potis da, mit denen Sie die Werte Temperatur und Umgebungshelligkeit anpassen können.

Der Flow zur Langzeitmessung

Der Flow zur Langzeitmessung

Es gibt aber noch ein Zusatz-Feature. Alle fünf Minuten speichert das Programm nämlich die aktuell gemessenen Werte in eine Datei. Diese trägt den Namen climadata.txt und befindet sich in der Regel in dem Verzeichnis, in dem Node-RED arbeitet. Bei mir war dies:

C:\Users\[USERNAME]

[USERNAME] steht für den eigenen Windows-Benutzernamen. Sie können den Dateipfad aber auch in dem Node anpassen. Gespeichert wird übrigens in einem CSV-Format (Comma Separated Values), bei dem alle Werte durch ein Komma getrennt sind. Somit können Sie die Daten auch einfach in eine Excel-Tabelle einfügen und dort auswerten. Die Auswertung der Langzeitmessung wird dadurch kinderleicht.

31 Kommentare

  1. Gerhard

    Da hat sich noch ein Fehler eingeschlichen.
    So ist es richtig

    Temp = 298.15 / (1 + Math.log(Temp) * 298.15/3420) – 273.15;
    oder
    Temp = 298.15 / (1 – Math.log(1 / Temp) * 298.15/3420) – 273.15;

    Antworten
  2. Gerhard

    Meine Berechnung sieht so aus:

    Zuerst wird aus dem ADC-Wert der Widerstand Berechnet. Da es sich um einen NTC mit 10 kOhm bei 25°C handelt und der Vorwiderstand auch 10 kOhm ist, ist die Berechung recht einfach.

    var RawADC = msg.payload;
    var Temp = (RawADC /(4096 – RawADC)); // Erst mal das Widerstandsverhältnis

    // Die Allgemeine Formel ist: Rt = Rv * ADC-Wert /(4096 – ADC_Wert)
    // Und dann noch Temp = Rt/R25; Einfügen
    Temp = 298.15 / (1 – Math.log(Temp) * 298.15/3420) – 273.15;
    // Der wert 3420 ist so ein Mittelwert, der meistens passt.

    Temp = Math.round(Temp*10);
    Temp = Temp/ 10;

    msg.payload = Temp;
    return msg;

    Antworten
  3. Thorsten

    Hallo, bei mir geht trotz mehrmaligen Überprüfung der Schaltung mal wieder garnichts,wie bei manchen Tagen !

    Antworten
    1. Thorsten

      Ich habe den Flow nochmal neu angelegt, und jetzt funktioniert es endlich

      Antworten
  4. paulaner

    Hallo,

    ich muss mich mal hier für fk. ins Zeug legen ;).

    Ich denke 'jeder' hat 2x 10kOhm Trimmer/Potentiometer drin.
    Wer mit Fritzing schon gearbeitet hat wird feststellen das es nur eine Grafik für den Trimmer gibt!
    Egal ob 10 oder 100 Ohm, kOhm oder MOhm gewählt werden, man wird nur das Bildchen mit den 104 darauf sehen.

    Alles klar.

    Antworten
  5. Jan Jacob

    Beim ir steht bei Brightness immer 0.
    Ich kann die Temperatur trotz änderung nicht richtig kallibrieren.

    Antworten
  6. Bernd

    Bei mir hat auch alles funktioniert. Ich habe kalibriert und noch Longtime-Charts mit Reset-Buttons hinzugefügt. Die Klimadaten werden wie bei paulaner mit einem Timestamp in die Datei geschrieben.

    Antworten
    1. paulaner

      Geil der Trend.
      Will ich auch haben.
      Danke

      Antworten
    2. paulaner

      Hallo Bernd,

      kannst du den Flow einstellen und die gemachten Einstellung?
      Ich hab es noch nicht gemeiselt mit dem Reset des Charts.

      Ok. ich habe nicht 3 Gruppen wie du.

      Danke

      Antworten
      1. paulaner

        Bild

        Antworten
        1. Bernd

          War gestern nicht mehr online, aber wie ich sehe, hast Du es selbst hinbekommen. Ja, mann muss ein leeres Array an den Chart senden. Ich habe 3 neue Gruppen angelegt und da jeweils alles reingepackt.

          Antworten
  7. paulaner

    Hallo,

    noch ein bischen Erklärung zum ADC, Anleihen bei Eric Bartmann, danke.

    Antworten
  8. paulaner

    Hallo,
    Du bist der Dritter der sich geäußert hat, das 2x 103 (10k) Trimmer im Kalender sind.OK..
    Muß man halt was anpassen, für ’sture' Nachbauer' ist es nichts.

    Zitat:
    Dies erklärt möglicherweise die Vorzeichendiskussion: Temp-273 oder umgekehrt.
    Die Formel im Originalnode ist zwar physikalisch nicht intuitiv, aber für den Aufbau richtig.

    Wieso sollte die Formel nicht 'intuitiv' sein?

    Alles andere hab ich doch erklärt.

    Antworten
  9. Otto

    Hallo allerseits,

    Zur Frage der Temperaturmessung:
    In meinem Kalender war ein 10k Poti (genauer: 2 davon).
    Das reicht nicht aus, um das Thermometer zu kalibrieren.
    Mit einem 100k Poti geht es. Gemessen habe ich 68k nach Kalibrierung.
    In der Skizze der Anleitung steht 104; das bedeutet 10 * 10**4, also 100k.

    Dies erklärt möglicherweise die Vorzeichendiskussion: Temp-273 oder umgekehrt.
    Die Formel im Originalnode ist zwar physikalisch nicht intuitiv, aber für den Aufbau richtig.
    Wenn man das Vorzeichen wechselt, kann man zwar das Thermometer kalibrieren (auf z.B. 20 C), dann geht es aber bei Wärmezufuhr abwärts.

    Grüße und weiterhin einen schönen Advent!

    Antworten
  10. paulaner

    Hallo,
    ich denke dieses Node bringt in die Auswertung etwas Klarkeit.
    Beim schreiben der Werte wird das aktuelle Datum und die Zeit mit gespeichert.

    Antworten
    1. Martin Klein

      Bitte verrate mir noch was du in den neuen Node "now aktuelles Datum" genau eingetragen hast.
      Vielen Dank
      Martin Klein

      Antworten
      1. Bernd
        1. paulaner

          Genau daher

          Antworten
        2. Martin Klein

          Vielen Dank Bernd für den Hinweis !
          Alles Perfekt !
          Viele Grüße
          Martin Klein

          Antworten
  11. jue

    Wie gewohnt ist die Bateilbeschreibung etwas spartanisch: "ein neuer Sensor, der die aktuelle Luftfeuchtigkeit messen kann" – das Ding hat doch einen Namen und für alle, die damit nach dem Advent weiterbasteln wollen, wäre der interessant.
    Rund wird die Sache dann, wenn wir auch den Quellcode sehen können, mit dem der ESP den Sensor anspricht. Die Sourcen sind ja bis jetzt ein gut gehütetes Geheimnis, die bekommen wir am 24. bestimmt geschenkt…

    Antworten
    1. paulaner

      ja da steh ich voll hinter dir.
      Da gibt esfür die verschiedenen Anwendungen ebensoviele Fühler.

      Ein paar Daten tuen Not.
      Feuchtebereich von bis?
      in welchem Bereich?
      Welcher Art?

      mal ein Beispiel:

      Kategorie: Feuchte-Sensor
      Typ: SHS A3
      Anschluss: Print
      Messbereich (min.): 0 % rF
      Messbereich (max.): 100 % rF
      Messbereich: 0 – 100 % rF
      Min. Temperatur: 0 °C
      Max. Temperatur: +60 °C
      Temperaturbereich: 0 bis +60 °C
      Breite: 10 mm
      Marke: B+B Thermo-Technik

      Antworten
    2. paulaner

      Hallo,

      ich habe die anderen Begleithefte zu diversen Bausätzen durchgeschaut bis 2015, es wird auch da nur vom 'Feuchtesensor' gesprochen.
      Auch bei vorhandenen 'Einkaufs-/Inhaltslisten ist der Fühler nicht mal aufgeführt.

      Antworten
      1. abutux

        Jo, wäre schön, wenn die Bauteile genauer beschrieben wären. Sollte man von einem "CONRAD"-Kalender eigtl auch erwarten. Verstehe auch nicht, warum so ein billger(?) Feuchte-Sensor verwendet wird, der so schlecht misst, wie ein DHT11. Dabei kostet ein DHT22/AM2302 auch nicht die Welt u. misst deutlich besser. Und die Weiterverwendung ist auch einfacher, da es dazu zig Anleitungen gibt.
        Weiß jemand, ob es sich bei dem Feuchte-Sensor um den HCZ-J3 (od. HCZ-H8) handelt?

        Antworten
  12. paulaner

    Hallo,
    wer das File auswerten will, sollte den Haken setzen, sonst wird der nächste Wert 'hinten dran geklatscht'.

    Antworten
    1. paulaner

      Zitat:
      Somit können Sie die Daten auch einfach in eine Excel-Tabelle einfügen und dort auswerten. Die Auswertung der Langzeitmessung wird dadurch kinderleicht.

      erst dadurch!

      Antworten
      1. paulaner

        und dem Datum/Zeiteintrag

        Antworten
  13. paulaner

    Bild, kalibriert mit einem anderen Meßgerät und Offsets programmiert.

    Antworten
  14. Moritz

    also Temp = Temp-273.15; ist richtig
    Such einfach mal nach dem selben Aufbau den gibt es zu Hauf mit Arduino und co. Nur das der Arduino eine kleinere Auflösung bei der Spannungsmessung hat.

    Alle nehmen
    Temp = Temp-273.15;
    nicht anders herum

    Antworten
  15. paulaner

    var RawADC = msg.payload;
    var Temp = Math.log(10000.0 * ((4095.0 / RawADC )));

    Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
    Temp = 273.15-Temp; // Convert Kelvin to Celcius
    // Temp = (Temp * 9.0)/ 4.7 + 32.0; // Convert Celcius to Fahrenheit

    Temp = Math.round(Temp*10);
    Temp = Temp/ 10;

    msg.payload = Temp;
    return msg;

    Antworten
  16. Moritz

    Hi,

    Bei mir kommen immer komische Werte raus, könnte es sein das die Umrechnung zwischen Kelvin und Celsius nicht ganz richtig läuft?
    Müsste es nicht
    Temp = Temp-273.15;
    heissen?
    Celsius = Kelvin – 273.15 ?

    Grüße
    Moritz

    Antworten
    1. paulaner

      steht doch da!!!

      Temp = 273.15-Temp; // Convert Kelvin to Celcius

      vorher werden die 'Stufen' eines ADC’s 4096 (12bit) verrechnet.

      Antworten

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.