Hallo Zusammen,
Jérômes Ratschlag folgend wandte ich mich an 'funkleuchtturm' im Forum, um Erfahrungen bezüglich der Variation zwischen verschiedenen BME680 Sensoren auszutauschen, siehe auch
viewtopic.php?f=31&t=60671#p603732.
Eugen gab ein paar gute grundsätzliche Hinweise, Details und Erfahrungswerte seiner AirSniffer Lösung teilte er leider nicht.
Drum habe ich meine alten Statistikkenntnisse ausgegraben und zuerst mal mit Python viel Statistik betrieben.
Ziel war es herauszufinden,
1. ob für den BME680 Sensor eine Korrektur der Luftfeuchtigkeit notwendig und möglich ist
2. ob für den BME680 Sensor eine Korrektur der Temperatur notwendig und möglich ist
3. ob eine logarithmische Umrechnung der Luftgüte zu einer verständlicheren Darstellung führt
Alle drei Punkte sind von 'funkleuchtturm' als notwendig postuliert worden. Ergebnis ist, dass diese drei Punkte Sinn machen.
Für die beiden Punkte 1. und 2. wende ich die Methode der multiplen lineare Regression an:
https://de.wikipedia.org/wiki/Multiple_ ... Regression
In Python gibt es dazu sehr mächtige Analysewerkzeuge im Modul 'sklearn'. Falls ihr in Details interessiert seid, fragt bitte.
Nun ein wenig Mathematik und Statistik:
Für die Estimierung des BME680 Gaswiderstands Rprediction wird ein linearer Zusammenhang von der absoluten Luftfeuchtigkeit aH und der Temperatur Temp angenommen:
Der korrigierte Gaswiderstand ergibt sich als Differenz des gemessenen Rohgaswiderstands und der Estimierung.
Danach wird der korrigierte Gaswiderstand normalisiert auf den Wertebereich 0..100.
Schließlich wird die Luftgüte (air quality level) durch Logarithmusbildung aus dem normalisierten korrigierten Gaswiderstand berechnet.
Nun zu den Ergebnissen:
Bisher hat der Sketch 'HB-UNI-Sen-IAQ' nur normalisierte Rohgaswiderstände ohne Korrektur des Einflusses der Luftfeuchtigkeit und der Temperatur ausgegeben:
Nach der Korrektur der Einflüsse von der absoluten Luftfeuchtigkeit und der Temperatur und logarithmischer Berechnung ergeben sich Luftgüten (air quality level) mit dem kontinuierlichen Wertebereich 0..4:
Dadurch dass die Korrektur der Einflüsse von der absoluten Luftfeuchtigkeit und der Temperatur für jeden BME680 Sensor individuell gemacht wird, liegen die Kurven für die logarithmischen Luftgüten viel besser aufeinander als die nicht korrigierten bisherigen Kurven. Die hier gezeigten Kurven sind von Messwerten über 48 Stunden abgeleitet.
Die Analysen und Berechnungen mit Python wurden in einem interaktiven JupyterLab Notebook
https://jupyterlab.readthedocs.io/en/stable/
durchgeführt.
Hier der Bildschirmabzug davon als PDF:
Die verwendete Jupyter Notebook Datei ist hier (Suffix txt bitte entfernen)
Die absolute Luftfeuchtigkeit läßt sich innerhalb eines Arduino Sketches aus Temperatur und relativer Luftfeuchtigkeit berechnen.
Damit haben wir alles zusammen, um die oben beschriebenen Korrekturberechnungen in der Arduino MCU durchzuführen.
Ich werde die Statistiken noch ein paar Tage verfolgen und auf Konsistenz prüfen.
Dann werde ich den bisherigen Sketch HB-UNI-Sen-IAQ nur für eine ATMega1284P MCU mit den obigen Formeln anpassen und dann Euch zum Test zur Verfügung stellen. Wie bereits mehrfach diskutiert, hat die 328P Lösung zu wenig Speicherplatz. Daher verwende ich den Tindie Pro Mini XL - v2 - ATmega 1284p
https://www.tindie.com/products/promini ... ega-1284p/
Fragen, Anregungen und konstruktive Rückmeldungen sind willkommen.