Drucküberwachung mit BME280, ESP und RPi und MQTT+iobroker

  • Hi,


    ich wollte euch nur mal mein kleines Projekt vorstellen. Es geht um der Vergleich von 2 Drücken vor und nach einer Filtermatte. Es gibt dafür ja Druckmessgeräte mit Rohren. Das wollte aber keiner bezahlen bzw. war demjenigen bzw. mir auch nicht bekannt. Am ESP hängen 2 BME280 Sensoren. der eine mit Adresse 0x77, der andere mit 0x76. Bei dem einen wurde sozusagen die Leiterbahn mit einem Cuttermesser gekappt und mit dem Lötkolben eine Brücke eingelötet. Die Daten werden dann an den ioBroker gesendet und da von MQTT empfangen. Mit einem Script im ioBroker prüfe ich die Differenz der 2 Drücke und sende entsprechend eine Mail. Im unten aufgeführten Code gibt es noch einen Abschnitt mit der Lampe. Dieser sollte ursprünglich dazu dienen ein Relais zu schalten eine Lampe zu steuern, wenn der Druckunterschied zu groß wird. Ist jetzt per Mail umgesetzt. Des WEiteren kann der ESP auch per Web abgerufen werden, der MQTT dient vor allem der Visualsierung mittels Graphen.

    WICHTIG:

    Leider kann ich noch nicht sagen ob das System seinen Zweck erfüllt. Der Code läuft, aber die Matte wurde generell alle 4 Wochen getauscht. Egal ob es eine Mail gibt oder nicht. Sprich ich weiß nicht, ob die Sensoren genau genug bzw. feinfühlig genug sind um einen Druckunterschied zu erkennen, falls die Filtermatte wirklich einmal verstopft ist. Bzw. wir groß der Druckunterschied eigentlich sein kann, wenn die Matte mal dicht ist. Dies wird erst in den nächsten Wochen/Monaten ermittelt werden können, da die Arbeiter erst vor kurzen darauf hingewiesen wurden, die Matte nicht zu wechseln.

    Weiter unten findet ihr noch das Script für die Mail. Es enthält eine Endlosschliefe und wird 1x/Tag ausgeführt.

    Ich bin kein Programmierer und ich denke den Code könnte man bestimmt noch vereinfachen/kürzen. Aber er macht was er soll. Falls ihr Tipps habt oder Fehler findet lasst es mich wissen. Eventuell hilft dieser Code auch jemanden.


    Bis dahin


    Burnz





  • Moin Burnz84,


    du solltest dir deinen Code nochmal durchsehen. Nur mal ein paar Beispiele.

    Warum hast du eine Funktion setup_wifi und nutzt sie nicht. Stattdessen machst du das nochmal im Setup()?

    Was soll readReducedPress?

    Warum wertest du status nicht aus?


    Was für Druckunterschiede erwartest du wenn der Filter zu ist? Ev. sollte man den Messmodus des BME280 ändern.


    Aber ich will deinen Code nicht neu schreiben.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Es sind noch ein "paar" Codeschnipsel enthalten, die ich nicht verwende. Ich dachte ich hätte alles entfernt was nicht benötigt wird. Das Gleiche in grün mit dem "Status". Brauch ich nicht, kann weg. Hab ich gerade auch in meinem Code entfernt.


    Oder:


    foat readReducedPress(int hoehe)


    "Funktion: Liest die gemessenen Rohwerte aus dem Sensor aus, berechnet mit Hilfe der Kalibrierungskoeffizienten Temperatur und Druck (für die Berechnung des Drucks wird auch die Temperaturberechnung benötigt) und berechnet anschließend daraus den - auf Meereshöhe - reduzierten Luftdruck

    Parameter: hoehe: Höhe des Standortes über Meeresspiegel [m]

    Rückgabe: Reduzierter Luftdruck [hPa] (Hektopascal) bzw. [mbar] (Millibar)

    Mehr Infos: https://arduino-projekte.webno…sensor-bme280/funktionen/"


    Ich habe mich dann für einen anderen Weg entschieden. Teilweise, weil etwas nicht funktioniert hat oder ich eben mit der Funktion nicht zurechtgekommen bin.

    Aus diesem Grund gibt es diese Leichen und ich freue mich über die Antworten und Anmerkungen von euch. Der Code Läuft wie gesagt und durch deine Fragen, konnte ich ihn schon wieder etwas einkürzen :)


    Zur Frage, welchen Druckunterschied ich erwarte.....ich weiß es nicht. Überhaupt nicht. Ein Haustechniker meine es sind nur ein paar Millibar.

    Thema Messmodus: Gibt es da noch etwas zu beachten bzw. welche Modi gibt es? Ist der BME überhaupt für den Einsatzzweck geeignet? Ich habe dazu nur das Thema Oversampling gefunden und Betriebsmodus:


    void setMode(byte mode)

    Funktion: Setzen des Betriebsmodus des Sensors


    Parameter: mode: BME280_NORMAL_MODE

    BME280_FORCED_MODE -> SLEEP MODUS

    BME280_SLEEP_MODE

    Mehr Infos: https://arduino-projekte.webno…sensor-bme280/funktionen/


    Hast du eine Idee wie ich den BME "genauer" machen kann? Oder ob man diesen Kalibrieren muss? Genaue Aussagen dazu hab ich nicht gefunden oder ich steh auf dem Schlauch.


    BG


    Burnz :)

  • Zum Thema Genauigkeit:

    Steht die Anlage ab und zu? D.h kein Luftstrom? Dann könntest du einen Offset raus rechnen, da dann die Drücke gleich sein müssten.

    Die Läuft die ganze Zeit. Das ist ein riesiger Raum wo in der Mitte eine Filtermatte hängt. Ich denke so 6m Breit, 10m lang und keine Ahnung wie hoch ^^ Da wird dann Luft von draußen angesaugt.

    Derzeit gibt es einen Druckunterschied von ca. 1,3hPa.

  • EDIT:

    Wenn ich das richtig Verstanden habe, nutzt man im "Normalfall" eigentlich so etwas: LINK (kannte ich nicht, muss ich auch nicht, da ich IT Admin bin ^^)

    Macht natürlich nicht so viel Spaß und man lernt nicht so viel dabei. Aber falls alle Stricke reisen, hätte man noch etwas im Petto.


    BG


    Burnz

  • Hallo Burnz,


    bist Du sicher, dass der BME280 der richtige Sensor dafür ist. Ich hatte irgendwo was von einer Genauigkeit von +-1hPa gelesen (Arbeitsbereich 300-1100 hPa). Die Differenzdrücke bei Filtern für Lüftungsanlagen beginnen normalerweise in sauberen Zustand bei 50 Pa und bei 200 Pa sind die normalerweise zu.

    Wenn die Genauigkeit dann bei 100 Pa liegt, ist das glaube ich nicht so geeignet.

  • Hallo!

    Ich habe in meiner Firma für solche Zwecke das klassische "U-Rohr" Manometer aus

    vorhandenen Materialien improvisiert. Einfach ein Stück Rohr als "U", daran zwei durchsichtige

    Schläuche, Wasser hinein und die Schläuche an die jeweiligen Seiten des Filters angeschlossen.

    Das Ganze auf eine PVC-Platte mit einem 5mm Strichraster zum einfachen Ablesen montiert.

    Damit kann man zunächst feststellen in welchem Bereich man sich bewegt.

    Bei mir war es 5mm Differenz bei sauberen Filtermatten und ca. 65mm nach einiger Betriebszeit.

  • Das kenne ich auch. Das "Problem" war aber, das wir automatisiert eine Nachricht oder visuelle Darstellung haben wollten. Deswegen auch der Teil mit der Lampe. Filter zu = Lampe an. Auch wenn das jetzt einfach per Mail gelöst wurde.

  • Hallo Burnz,


    bist Du sicher, dass der BME280 der richtige Sensor dafür ist. Ich hatte irgendwo was von einer Genauigkeit von +-1hPa gelesen (Arbeitsbereich 300-1100 hPa). Die Differenzdrücke bei Filtern für Lüftungsanlagen beginnen normalerweise in sauberen Zustand bei 50 Pa und bei 200 Pa sind die normalerweise zu.

    Wenn die Genauigkeit dann bei 100 Pa liegt, ist das glaube ich nicht so geeignet.

    Das Frage ich mich auch. Es waren +/- 1hPA zwischen 300 und 1000hPa laut Datenblatt. Ich kann wie eingangs erläutert auch nicht sagen, ob das Reicht. Deswegen soll die Matte jetzt nicht alle 4 Wochen getauscht werden.


    BG

  • Das kenne ich auch. Das "Problem" war aber, das wir automatisiert eine Nachricht oder visuelle Darstellung haben wollten. Deswegen auch der Teil mit der Lampe. Filter zu = Lampe an. Auch wenn das jetzt einfach per Mail gelöst wurde.

    Schon klar. Ich wollte in meinem Fall zuerst wissen wie die Hausnummer ist bevor teures elektronisches Gerät

    gekauft wird. Ein Kollege hatte schon was gekauft und montiert...Allerdings wird es nie eine Differenz von 1kPa

    über diesem Filter geben. Meine Bastelei war aus einigem Schrott aus unserer Werkstatt und somit deutlich

    günstiger...

  • Bei der von Dir erwähnten Größe der Kammer, wieviel m³/h hat denn die Anlage, nur mal Interesse halber.


    Vielleicht steht in der Doku der Anlage mit welchen Differenzdrücken am Filter zu rechnen ist.


    Bei Anbietern wie z.B. Reichelt gibt es passende Differenzdrucksensoren, wenn man den Arbeitsbereich kennt. Ich hatte jetzt welche so um die 30 € gefunden.

  • Moin Burnz84,



    "Status". Brauch ich nicht, kann weg. Hab ich gerade auch in meinem Code entfernt.

    Mhm, ob das so klug war.

    Die Funktion bme.begin() hat einen Rückgabewert, der aussagt ob der BME280 erreichbar ist oder auch nicht. In meinen Augen macht es keinen Sinn ein Programm fortzuführen, wenn die wichtigste Komponente nicht da ist.

    foat readReducedPress(int hoehe)

    Du verweist dann auf eine Seite. Da hat jemand sich eine eigene Bibliothek (myBME280) geschrieben. Die nutzt du aber nicht!


    Warum berechnest du Werte?

    Adafruit_BME.h liefert dir alle Werte richtig berechnet.


    Und so weiter...

    Hast du eine Idee wie ich den BME "genauer" machen kann? Oder ob man diesen Kalibrieren muss? Genaue Aussagen dazu hab ich nicht gefunden oder ich steh auf dem Schlauch.


    Der BME280 kann auch für Ortung in Gebäuden eingesetzt werden. Dann sind schon geringe Druckunterschiede wichtig.

    Das Datenblatt der Firma Bosch ist da sehr ergiebig.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Mahlzeit,


    ob ein Sensor da ist oder nicht, bekomme ich über die Visualisierung mit bzw. könnte ich das auch berechnen. Das werde ich wohl noch mal einfügen.


    "Du verweist dann auf eine Seite. Da hat jemand sich eine eigene Bibliothek (myBME280) geschrieben. Die nutzt du aber nicht!"


    Ja, das ist so ein Schnipsel, den ich noch drin hatte. Ich hab gestern einfach ein paar Zeilen gelöscht (auchBibliotheken), die ich zu 100% nicht mehr gebraucht habe. Da hab ich dann aber wohl was stehen lassen. Ist mir aber auch erst heute aufgefallen.


    Bei den BME280 weiß ich leider nicht ob das originale Bosch sind oder Chinaimporte. Diese sollen nicht so genau sein.


    Welche Werte Berechne ich denn? Meinst du die Formel wegen dem Druck? Soweit ich weiß, brauch ich die barometrische Höhenformel, damit ich den Druck auf meiner Höhe richtig angebe.


    BG