Day 22: Climate Guard

The door of day 21 reveals again a sensor, which we will use to measure the humidity level present. With the following circuit we will build a comprehensive indoor climate monitor.

Die Schaltung des Raumklimawächters

The indoor climate monitor circuit

Our experiment today uses three sensors: the temperature sensor (NTC), the light sensor (photo transistor) and the humidity sensor. Altogether they deliver a real good impression of the current climate situation in a room. Let’s start the program of today.

The program measures all of the values e very 30 seconds and sends them via MQTT, and you will receive something like this:

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

Copy the flow of today into your Node-RED environment, but remember that you need to adjust your personal topic and disable previous flows. Then on the GUI page you can view the measured values. A function node will also today convert the temperature values accordingly so that you are able to read them. The two potentiometers are used to achieve a more precise calibration, because today you can adjust temperature and ambient brightness values.

Der Flow zur Langzeitmessung

The flow for the long-term measurement

But we also have an additional feature. Every five minutes, the program saves the currently measured values  into a file. This is called climadata.txt and you will find it usually in the directory where Node-RED runs. In my case, this was:

C:\Users\[USERNAME]

[USERNAME] is your Windows user name. But you could also customize the file path in the node. Data is stored in CSV  (comma separated values) format, whereby all values  are separated by a comma. It is thus very easy to import the data into Excel and evaluate the spreadsheet. The evaluation of the longterm measurement is very easy.

31 Comments

  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;

    Reply
  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;

    Reply
  3. Thorsten

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

    Reply
    1. Thorsten

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

      Reply
  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.

    Reply
  5. Jan Jacob

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

    Reply
  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.

    Reply
    1. paulaner

      Geil der Trend.
      Will ich auch haben.
      Danke

      Reply
    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

      Reply
      1. paulaner

        Bild

        Reply
        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.

          Reply
  7. paulaner

    Hallo,

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

    Reply
  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.

    Reply
  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!

    Reply
  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.

    Reply
    1. Martin Klein

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

      Reply
      1. Bernd
        1. paulaner

          Genau daher

          Reply
        2. Martin Klein

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

          Reply
  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…

    Reply
    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

      Reply
    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.

      Reply
      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?

        Reply
  12. paulaner

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

    Reply
    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!

      Reply
      1. paulaner

        und dem Datum/Zeiteintrag

        Reply
  13. paulaner

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

    Reply
  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

    Reply
  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;

    Reply
  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

    Reply
    1. paulaner

      steht doch da!!!

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

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

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.