HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 18.04.2020, 02:13

Hallo Michael,

meine Anleitung referenzierte leider auf den falschen Branch (Anleitung ist bereits korrigiert):

Der richtige Branch ist: implement_Bosch_datasheet_integer_formulas

https://github.com/FUEL4EP/ClosedCube_B ... r_formulas

Weitere Fixes für die Druckmessung werden bald folgen.
Zuletzt geändert von FUEL4EP am 29.04.2020, 10:19, insgesamt 1-mal geändert.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 19.04.2020, 15:44

Hi Jérôme,

ich habe einen neuen Pull Request https://github.com/jp112sdl/HB-UNI-Sen-IAQ/pull/4 gemacht.
Die wesentlichen Änderungen sind:

1. Die Mittelvertbildung über 5 Abtastwerte ist nun korrekt. Die Gas Widerstandswerte steigen von der ersten bis fünften Messung eines Quintupels an, so wie das zu erwarten ist, wenn die Temperatur des 'Hot Plates' des Sensors nach jedem der fünf aufeinanderfolgenden Aufheizvorgänge ansteigt.
2. Die Zieltemperatur des 'Hot Plates' des Sensors wurde auf 310 Grad erhöht.
3. Die Einstellung der I2C Adresse wurde entsprechend Deiner Anregung angepasst.
4. Die Oversampling Raten wurden angepasst und sollten nach dem Fix der Closed Cube BME680 Library auch korrekt funktionieren.
5. Fixes von Typos.

Wichtige Fehlerbehebungen wurden auf in der Closed Cube BME680 Library gemacht. Diese sind als Branch

https://github.com/FUEL4EP/ClosedCube_B ... r_formulas

verfügbar und Closed Cube als Pull Request zur Verfügung gestellt. Dort sind auch zwei neue Issues aufgemcht, die die behobenen Fehler beschreiben.

Im Wesentlichen wurden falsche Register Maps für die IIR Filterung und die Überabtastung behoben. Auch die sporadischen Sprünge bei hohen Luftdruckwerten sollten mit einem Fix behoben sein, der sich an die Python Implementierung der Druckberechnung von Pimoroni anlehnt.
Zuletzt geändert von FUEL4EP am 29.04.2020, 10:20, insgesamt 1-mal geändert.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 19.04.2020, 15:47

Hallo Bernd,

darf ich Dich bitten zu prüfen, ob Dein Sensor nun mit den neuen Pull Requests

https://github.com/jp112sdl/HB-UNI-Sen-IAQ/pull/4
https://github.com/FUEL4EP/ClosedCube_B ... r_formulas

funktioniert?
Zuletzt geändert von FUEL4EP am 29.04.2020, 10:21, insgesamt 1-mal geändert.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 19.04.2020, 16:04

Hallo Stephan,

stark Temperatur induzierte Peaks der Luftdruckmessung kann ich bei meinem Sensor und Software nicht feststellen. Woran machst Du die starke Temperaturabhängigkeit fest?
Leider kann ich die Achsenbeschriftung Deines beigefügten Graphen nicht lesen.

Welche Bibliothek verwendest Du zum Auslesen des BME680 Sensors? Closed Cube?
Bitte beachte, dass ich heute 3 weitere Fehler in dieser Bibliothek gefixt habe:

https://github.com/FUEL4EP/ClosedCube_B ... r_formulas

Meine Peaks der Druckmessung waren eindeutig auf Wind, der direkt in die Öffnung des Sensors blies, zurückzuführen, als ich quer lüftete.
Temperaturabhängige Peaks kann ich nicht beobachten (oder sind mir noch nicht aufgefallen).

Die Peaks oder Sprünge waren immer durch eine fehlerhafte Implementierung des Bosch Datenblatts in der Closed Cube Bibliothek zu erklären und dann auch zu fixen. Leider ist diese Bibliothek nicht sehr genau implementiert worden (um das mal nett auszudrücken).

Wenn ich mit etwas unzufrieden bin, dann nicht mit dem Sensor selbst, sondern mit den handwerklichen Fehlern der Closed Cube Bibliothek. Da sind einfach zu viele Fehler drin und ich bin mir nicht sicher, ob da nicht noch mehr drin sind (=Champignon Prinzip).

Mein Rat an Dich: Bitte nehme meinen heute freigegebenen Pull Request

https://github.com/FUEL4EP/ClosedCube_B ... r_formulas

und berichte über Deine Erkenntnisse.

Der Bosch Sensor selbst mag kompliziert zu programmieren sein und Bosch mag auch nicht alle Tricks im Datenblatt publizieren. Der Sensor selbst ist m.E. State of the Art was mit MOX Sensoren heute darstellbar ist. Sensirion, IDT oder andere Gassensorhersteller haben eine ähnliche Technologie.
Immer entscheidend ist die Firmware der Bibliotheken.
Zuletzt geändert von FUEL4EP am 29.04.2020, 10:22, insgesamt 1-mal geändert.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

HMSteve
Beiträge: 539
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von HMSteve » 20.04.2020, 00:49

Hallo Ewald,

der von mir gepostete Graph stellt den Luftdruck des BME680 im Vergleich zum BMP280 dar, man sieht hier den Zusammenhang mit der Temperatur nicht, jedoch treten peaks von vielen hPa insb. beim Lueften auf, wie ich im Vergleich zu anderen loggings feststellte. Zu den Zeiten sank auch die Temperatur schlagartig. Derartig hohe Durckaenderungen durch Luftzug scheinen mir nicht plausibel?
Um das besser zu untersuchen, habe ich heute begonnen, ein Testdevice zu basteln, siehe https://github.com/HMSteve/HB-UNI-Sen-IAQ-Test, bin zwar noch nicht fertig geworden, aber vielleicht ist es ja fuer Dich oder andere schon nuetzlich.

Ich habe zudem Deine Version der lib von heute verwendet und sehe nun leider ebenfalls Luftdruckwerte in unplausibler Groessenordnung (<700hPa), muss ich bei Gelegenheit weiter untersuchen, oder hast Du schon eine Idee zur Ursache?

Viele Gruesse,
Stephan

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 20.04.2020, 08:08

Hallo Stephan,

ja, Du hast Recht mit Deiner Beobachtung einer starken Temperaturabhängigkeit des auf Meereshöhe umgerechneten Luftdrucks. Die Durchsicht meiner Historian Aufzeichnungen zeigt dasselbe frappierende Bild. Danke nochmals für Deinen Hinweis.

Ich machte bereits ein erstes Experiment mit einem Ventilator direkt vor dem Sensor: Nur minimale Druckänderung! Damit ist meine ursprüngliche These als falsch widerlegt. Rind Luftzug ist also nicht die Ursache.

Ein Experiment mit einer Infrarotlampe steht noch aus.

Ich glaube, die Ursache gefunden zu haben:

In der Funktion EqivalentSeaLevelPressure wird mit ‘temp’ eine Temperaturkompensation vorgenommen.

Ich werde später diese Kompensation mal zu Null setzen und dann messen.

Den Hintergrund der Temperaturkompensation bei der Berechnung des äquivalenten Luftdrucks auf Meereshöhe muss ich erst noch recherchieren.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 20.04.2020, 08:31

Hallo Stephan,

die Temperaturabhängigkeit des auf Meereshöhe bezogenen Luftdrucks ist durch die Physik bedingt: Die barometrische Höhenformel. Eine gute Darstellung zum Hintergrund der barometrischen Höhenformel ist in

https://www.rahner-edu.de/mikrocontrol ... estimmung/

zu finden.

Die barometrische Höhenformel gilt nur für quasi stationäre, i.e. sich langsam verändernde Temperaturen. Für unseren Fall des Querlüftens mit einem Temperatursturz muss der Ansatz sein, den errechneten Temperatursturz mittels Tiefpassfilterung auf dem Sensor (IIR Filter und höchstes Oversampling für die Temperaturmessung) so klein wie möglich zu halten.
Zuletzt geändert von FUEL4EP am 20.04.2020, 16:27, insgesamt 1-mal geändert.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 20.04.2020, 08:50

Hallo Stephan,

als Erstes werde ich mal die IIR Filterung auf 63 und das Oversampling für die Temperatur auf 16x erhöhen.
Das macht beides die Reaktionszeit der gemessenen Temperatur langsamer. Dann sollte die Temperaturabhängigkeit des Luftdrucks geringer ausfallen.

Der Test läuft und morgen früh sollten erste Ergebnisse vorliegen.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 21.04.2020, 17:52

Hallo Stephan et al,

die Sketchgröße (Flash) ist mit eingeschalteter Debugfunktion inzwischen um ca 200 Bytes zu groß für eine Arduino Pro Mini ATmega328P MCU.
Daher ist es wichtig, die Debugfunktion vorerst auszuschalten:

Code: Alles auswählen

#define NDEBUG   // disable all serial debug messages
Mit eingeschalteter Debugfunktion führt das Verifizieren des Flashinhalts zu Fehlern bei der Adresse 0x7000. Das könnte vielleicht die unplausiblen Druckwerte, die Stephan und Bernd sehen, verursachen.

Hilfe bei der Reduktion der Codegröße ist willkommen.

Hier die ersten Ergebnisse des Tiefpassfilterexperiments der errechneten Sensortemperatur:

1. Moderate Tiefpassfilterung:

Code: Alles auswählen

   // oversampling: humidity = x1, temperature = x2, pressure = x16
    _bme680.setOversampling(BME680_OVERSAMPLING_X4, BME680_OVERSAMPLING_X4, BME680_OVERSAMPLING_X8);
moderate_low_pass_filtering.png
Der Druckpeak beträgt ca. 14 hPa. Oben ist die Druckverlauf und unten der verlauf der errechneten Sensortemperatur dargestellt.
Wir sehen, dass der Druckverlauf invers mit dem Temperaturverlauf korreliert bedingt durch die implementierte barometrische Höhenformel.

2. Starke Tiefpassfilterung:

Code: Alles auswählen

    // oversampling: humidity = x2, temperature = x16, pressure = x4
    _bme680.setOversampling(BME680_OVERSAMPLING_X2, BME680_OVERSAMPLING_X16, BME680_OVERSAMPLING_X4);
strong_low_pass_filtering.png
Der Druckpeak beträgt ca. 6 hPa.

Wir sind mit der stärkeren Filterung der Temperatur auf dem richtigen Weg, nur es muss noch viel stärker Tiefpass gefiltert werden. Die internen Hardwarefilter des BME680 sind weitgehend ausgereizt. Das IIR Filter könnte von 63 auf 127 hochgesetzt werden.

Dass die internen Filter des BME680 nicht ausreichen, liegt u.a. auch an der Mittelwertsbildung über je 5 Messwerte in schneller Abfolge gefolgt von ca 240 Sekunden Pause. Daher habe ich nun testweise ein Software IIR Filter in sens_bme680.h eingebaut:

Code: Alles auswählen

[#define TEMPERATURE_IIR_FILTER_COEFFICIENT 0.99   // IIR filter coefficient for additional low pass filtering of the measured temperature in order to get rid of spikes in case of cross ventilation with open windows
                                                  // This minimizes pressure peaks according the barometric formula below 'EquivalentSeaLevelPressure'
#define INITIAL_FILTERED_TEMPERATURE 20.0         // initializazion value of IIR filtered temperature

 // additional IIR filter (in addition to the IIR filter build into the BME680 sensor itsself)
      
      _temperature_filtered = _temperature_filtered * TEMPERATURE_IIR_FILTER_COEFFICIENT;
      _temperature_filtered = _temperature_filtered + (1 - TEMPERATURE_IIR_FILTER_COEFFICIENT) * temp;
      
      _pressureNN  = (uint16_t)(EquivalentSeaLevelPressure(float(height), _temperature_filtered, pres)*10.0);
      

Der Luftdruck über NN '_pressureNN' wird mit dem besonders stark tiefpassgefilteren Temperaturwert '_temperature_filtered' berechnet.

Ergebnisse gibt es dann wieder morgen im Lauf des Tages. Kommentare und Anregungen sind willkommen.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

HMSteve
Beiträge: 539
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von HMSteve » 21.04.2020, 22:12

Hallo Ewald,

ja, (praktikable) Ideen zur deutlichen Reduktion der Codegroesse waeren hoch willkommen, sehe selbst leider keine. Leider fehlt mir auch die Zeit, mal eben ein 1284p Board zum Testen zu machen, denn mit dem 328p konnte ich fuer mein Testdevice zwar den SHT31 zusaetzlich einbinden, den BMP280 schon nicht mehr, auch wenn ich schon die ca 2k durch Abschalten der Debug-Funktion einspare.
Allerdings verhindert meine Arduino-IDE schon das erfolgreiche Kompilieren, vom Hochladen gar nicht zu reden, wenn das Ergebnis groesser als die Grenze gem. Boardeinstellung wird. Daher bin ich noch unsicher, wie dies die Ursache des von Dir beobachteten Fehler beim Verifizieren des Uploads sein koennte. Nutzt Du auch die Arduino-IDE und den Arduino-Bootloader?

Zur Temperaraturabhaengigkeit: Nach meinem Verstaendnis sollte der mittels der 10 Kalibrierungsparameter im Datenblatt ermittelte atmosphaerische Druck eigentlich bereits unabhaengig von der Temperatur sein. Die kommt erst spaeter wieder-zumindest theoretisch- ueber die barometrische Hoehenformel bei Umrechnung auf NN ins Spiel. Praktisch wuerde ich die barometrische Hoehenformel mit Standardatmosphaerenparametern nutzen (15degC), dann stoeren Aenderungen der Umgebungstemperatur nicht mehr und die Umrechnungsgenauigkeit sollte voellig ausreichend sein.
Da fuer den Semsor ein sleep mode spezifiziert ist, sollte er fuer die genutzte Intervallmessung geeignet und die Messwerte inkl Kalibrierungsparameter dann auch stabil sein.
Mache ich da einen Denkfehler?

Noch kurz zu meinem laufenden SHT31-Vergleich mit dem Testdevice: Optisch sehen Abweichungen in Temperatur- und Feuchteverlauf sehr gut aus, der Fehler scheint tatsaechlich weitestgehend additiv. Werde dennoch noch etwas mehr Daten sammeln.

Viele Gruesse,
Stephan

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“