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

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von FUEL4EP » 21.01.2020, 06:58

Hi Jérôme,

lass mich bitte zuerst versuchen, die Konflikte meinerseits zu beheben.
Zuletzt geändert von FUEL4EP am 26.01.2020, 21:39, insgesamt 1-mal geändert.
Grüße

Ewald

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von FUEL4EP » 21.01.2020, 20:23

Hi Jérôme,

der neue Pull Request ist gemacht. Dieses Mal gab es keine Merge Konflikte :D

Vielen Dank!
Zuletzt geändert von FUEL4EP am 26.01.2020, 21:39, insgesamt 1-mal geändert.
Grüße

Ewald

jp112sdl
Beiträge: 4491
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 130 Mal
Danksagung erhalten: 287 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von jp112sdl » 21.01.2020, 22:43

Gemerged.
Machst du den anderen PR zu?

VG,
Jérôme

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von FUEL4EP » 26.01.2020, 17:42

Der PR ist zugemacht.
Zuletzt geändert von FUEL4EP am 26.01.2020, 21:40, insgesamt 1-mal geändert.
Grüße

Ewald

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von FUEL4EP » 26.01.2020, 17:44

Hier für diejenigen, die neu einsteigen, eine Aufbau-, Programmier- und Kalibrieranleitung für die HB-UNI-Sen-IAQ - Luftgütemessung mit BME680.

1. Hardware

Eine schnelle Möglichkeit, die benötigte Hardware zu bauen, bietet der Bausatz von Technikkram.
Der Aufbau ist unter

https://technikkram.net/2018/05/homemat ... genbau
beschrieben. Alle Bauteile und ein geeignetes Gehäuse können im Technikkram Shop bestellt werden:

https://smartkram.de/diy-bausatze/#hydr ... er-bausatz

Ein Selbstbau ist selbstverständlich auch möglich.

Der dort verwendete BME280 Sensor ist durch einen BME680 Sensor zu ersetzen. Der BME680 Breakout - Air Quality, Temperature, Pressure, Humidity Sensor von Pimoroni wird von mir eingesetzt.
Dieser Sensor passt perfekt zu der Platine von Technikkram und läuft mit einer Batteriespannung bis 1,8 Volt.

2. Gegenmaßnahmen zum Babbling Idiot

Nach dem Aufbau der Basisplatine und vor dem Anlöten des BME680 Sensors wird die so genannte Brown-Out-Detection (BOD) bei 2.7V deaktiviert.
Dazu wird am Besten ein ISP Programmer, z.B. ein Diamex ISP USB Programmer, verwandt. Der Programmer muss auf 3.3V Ausgangspegel einstellbar sein!
Ohne diese Gegenmaßnahme schaltet sich der Arduino bei Batteriebetrieb nach wenigen Wochen ab.

Details sind unter

https://asksinpp.de/Grundlagen/FAQ/babb ... ss-des-isp

beschieben.

Unter Linux werden die Fuses für den Diamex ISP USB Programmer mit

Code: Alles auswählen

sudo avrdude -v -pm328p -P usb -c stk500v2  -b 9200 -Ulfuse:w:0xFF:m -Uhfuse:w:0xD2:m -Uefuse:w:0xFF:m

geflasht. Auf stabile Verbindungen zwischen Arduino und ISP ist zu achten.


3. Verringerung der Stromaufnahme bei Batteriebetrieb

Wie in der oben referenzierten Technikkram Aufbauanleitung beschrieben, werden nach der erfolgreichen Erstprogrammierung und Inbetriebnahme 3 Bauteile auf der Arduino Platine entfernt:
a) rote SMD-LED (siehe Beschreibung von Technikkram)
b) gruene SMD-LED (siehe Beschreibung von Technikkram)
Zusätzlich wird wie unter z.B. https://www.bjoerns-techblog.de/2017/10 ... power-mod/ beschrieben
c) der LDO-Spannungsregler
entfernt.


4. Programmieren des Arduinos

Das Programmieren des Arduinos kann z.B. mit einem FTDI Adapter USB zu TTL Serial für 3,3V und 5V für Arduino gemacht werden,
der z.B. auch bei Technikkram bestellbar ist. Der Prgrammer muss auf 3,3V Programmierspannung eingestellt werden!


5. Gehäuse
Wenn ein Gehäuse verwandt wird, darf es nicht (mehr) nach Plastik riechen sonst werden die Messungen mit dem Gassensor verfälscht.
Also gegebenenfalls das Gehäuse mehrere Wochen an frischer Luft 'ausstinken' lassen.

6. Benötigte Bibliotheken für das Arduino IDE

a) EnableInterrupt https://github.com/GreyGnome/EnableInterrupt
b) LowPower https://github.com/rocketscream/Low-Power
c) ClosedCube_BME680_Arduino https://github.com/closedcube/ClosedCube_BME680_Arduino
Diese Bibliothek hat leider viele Fehler, die in den Issues #12 und #15 beschrieben sind. Dafür habe ich Fixes in PullRequests zur Verfügung gestellt.
Leider führt der 'Maintainer' dieser Bibliothek meine Pull-Requests nicht durch. Es gibt seit Wochen keine Rückmeldung. Solange dort die Pull-requests #13, #14 und #16 nicht eingeplegt sind sind, bitte meinen Fork nehmen:
https://github.com/FUEL4EP/ClosedCube_BME680_Arduino branch fixes_and_editions unbedingt nehmen!

7. Arduino Sketch

a) https://github.com/jp112sdl/HB-UNI-Sen-IAQ mindestens commit 4072941. Unbedingt auch das Unterverzeichnis 'sensors' mitkopieren!

Den Sketch 'HB-UNI-Sen-IAQ.ino' in das Arduino IDE laden. Dann eine persönliche Device ID und Device Serial eintragen:

Code: Alles auswählen

  // define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0xf1, 0xd1, 0x01},     // Device ID
  "JPIAQ00001",           // Device Serial
  {0xf1, 0xd1},           // Device Model Indoor
  0x10,                   // Firmware Version
  as::DeviceType::THSensor, // Device Type
  {0x01, 0x00}            // Info Bytes
};
zu z.B.

Code: Alles auswählen

 // define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0xf1, 0xd1, 0x03},     // Device ID
  "JPIAQ00045",           // Device Serial
  {0xf1, 0xd1},           // Device Model Indoor
  0x10,                   // Firmware Version
  as::DeviceType::THSensor, // Device Type
  {0x01, 0x00}            // Info Bytes
};
Das Device Serial muss aus exakt 10 Zeichen bestehen.

Dann den Sketch in den Arduino hochladen.


8. Einbrennen des BME680 Sensors

Ein neuer BME680 Sensor altert die ersten Wochen stark. Daher sind die Messwerte erst nach ein paar Wochen Betriebs verlässlich.
Eine erneute Kalibrierung sollte mindestens nach 4 Wochen ununterbrochenen Betriebs vorgenommen werden.

9. Offsetkompensation Temperatur und relative Luftfeuchtigkeit

Bedingt durch das interne Heizelement des BME680 ist die gemessene temperatur typischweise 1,0 .. 2,0 Grad Kelvin zu hoch.
Dies kann im Sketch 'HB-UNI-Sen-IAQ.ino' korrigiert werden:

Code: Alles auswählen

//-----------------------------------------------------------------------------------------

//Korrektur von Temperatur und Luftfeuchte
//Einstellbarer OFFSET für Temperatur -> gemessene Temp +/- Offset = Angezeigte Temp.
#define OFFSETtemp 0 //z.B -50 ≙ -5°C / 50 ≙ +5°C
Auch eventuelle Abweichungen der gemessenen relative Luftfeuchtigkeit können dort korrigiert werden:

Code: Alles auswählen

//Einstellbarer OFFSET für Luftfeuchte -> gemessene Luftf. +/- Offset = Angezeigte Luftf.
#define OFFSEThumi 0 //z.B -10 ≙ -10%RF / 10 ≙ +10%RF

//-----------------------------------------------------------------------------------------

9. Kalibrierung

Eine Kalibrierung sollte vorgenommen werden, wenn

1. Eine Programmierung des Arduinos vorgenommen wurde
2. Die Batterien ersetzt wurden
3. 4 Wochen nach der ersten Inbetriebnahme
4. Danach alle 3..6 Monate oder nach Bedarf, anfangs eher alle 3 Monate bis sich die Alterung verringert

Die Empfehlung ist vor der Kalibrierung zuerst die Offsetkompensation nach Punkt 9. zu machen.
Sonst gehen die Kalibrierwerte bei der Programmierung der Offsetkompensation verloren.

a) Kalibrierung in der Software HB-UNI-Sen-IAQ/sensors/sens_bme680.h:

In sens_bme680.h sind die Startwerte des oberen und unteren Grenzwerts für den gemessenen Gaswiderstand definiert:

Code: Alles auswählen

  #define GAS_LOWER_LIMIT 4000.0   // Initial setting for bad  air quality lower limit; will automatically adjusted when sensor exposed to a bad smell e.g. parmesan cheese, mustard, clementine or orange peel, disinfectant solution, etc. 
  #define GAS_UPPER_LIMIT 16000.0  // Initial setting for good air quality upper limit; will automatically adjusted when sensor is put to outdoor for few hours                
Diese werden in die aktuellen Grenzwerte

Code: Alles auswählen

  uint32_t  _gas_lower_limit;     // adaptive lower resistance level for bad air quality
  uint32_t  _gas_upper_limit;     // adaptive upper resistance level for good air quality

übernommen und dann über die Maximum- und Minimumfilter dynamisch nachgeführt:

Code: Alles auswählen

//peak detector for _gas_upper_limit 
      if ( gas > _gas_upper_limit )
      {
        _gas_upper_limit = gas;
      }
      else
      {
        _gas_upper_limit = _gas_upper_limit * IIR_FILTER_COEFFICIENT; // decay each sample by IIR_FILTER_COEFFICIENT
        if ( _gas_upper_limit < GAS_UPPER_LIMIT )
          _gas_upper_limit = GAS_UPPER_LIMIT; // lower limit for _gas_upper_limit
      }
      
      //peak detector for _gas_lower_limit 
      if ( gas < _gas_lower_limit )
      {
        _gas_lower_limit = gas;
      }
      else
      {
        _gas_lower_limit = _gas_lower_limit / IIR_FILTER_COEFFICIENT; // increase each sample by 1.0/IIR_FILTER_COEFFICIENT
        if ( _gas_lower_limit > GAS_LOWER_LIMIT )
          _gas_lower_limit = GAS_LOWER_LIMIT; // upper limit for _gas_lower_limit
      }
   
   
In die Spitzenwertfilter ist ein 'Infinite Impulse Response'-Abklingfaktor eingebaut (IIR_FILTER_COEFFICIENT), der gemessene Spitzenwerte innerhalb einer Woche um den Faktor 0.71 reduziert:

Code: Alles auswählen

 #define IIR_FILTER_COEFFICIENT 0.9998641  // Decay to 0.71 in about one week for a 4 min sampling period (in 2520 sampling periods)

Damit wird auch bei anfänglicher Alterung ein automatisches Kalibrieren möglich.


b) Kalibrierung mit Gasen:

Dazu wird der Sensor sowohl frischer Luft (gemessene Luftgüte 100%) als auch stark riechenden Gasen, z.B. Käse, (gemessene Luftgüte 0% .. 15%) ausgesetzt.

i) Plaziere den Sensor mehrere Stunden draußen an die frische Luft, z.B. auf eine Fensterbank.
Der oben beschrieben obere Spitzendetektor führt die Variable _gas_upper_limit nach. Die Variable repräsentiert den maximal gemessenen Gaswiderstand.

ii) Setze den Sensor für ca. 20..30 Minuten stark riechenden Gasen bzw. Gerüchen aus:
a) Platziere Käse wie Gouda, Parmesan oder Roquefort in die unmittelbare Nähe des Sensors. Achte darauf, dass dort keine Rückstände davon bleiben.
b) Den stärksten Effekt erhalten wir mit Isopropanol (2-propanol), z.B. medizinische Desinfektionslösung, das auf ein Papiertaschentuch getropft wird und dann
direkt neben den BME680 Sensor gelegt wird. Die gemessene Luftgüte geht dann auf 0% zurück.

Der oben beschrieben untere Spitzendetektor führt die Variable _gas_lower_limit nach. Die Variable repräsentiert den minimal gemessenen Gaswiderstand.

c) Auslesen von Zwischenwerten

Mittels des Werkzeugs 'serieller Monitor' vom Arduino IDE können Zwischenwerte ausgelesen werden:
Dazu im Sketch 'HB-UNI-Sen-IAQ.ino' das Define NDEBUG

Code: Alles auswählen

//#define NDEBUG   // disable all serial debug messages

auskommentieren.

Im seriellen Monitor wird für jeden Messzyklus (alle 4 Minuten ein Messzyklus) Folgendes ausgegeben:

13:24:22.994 -> Gas heat_stab_r = 1
13:24:22.994 -> Gas gas_valid_r = 1
13:24:22.994 -> gas: 1205
13:24:22.994 -> ....Gas heat_stab_r = 1
13:24:23.426 -> Gas gas_valid_r = 1
13:24:23.426 -> gas: 669
13:24:23.426 -> ...Gas heat_stab_r = 1
13:24:23.725 -> Gas gas_valid_r = 1
13:24:23.725 -> gas: 754
13:24:23.725 -> ...Gas heat_stab_r = 1
13:24:24.024 -> Gas gas_valid_r = 1
13:24:24.024 -> gas: 770
13:24:24.024 -> ...Gas heat_stab_r = 1
13:24:24.389 -> Gas gas_valid_r = 1
13:24:24.389 -> gas: 786
13:24:24.389 -> avg gas: 836
13:24:24.389 -> Gas UPPER LIMIT = 20785
13:24:24.389 -> Gas LOWER LIMIT = 836
13:24:24.389 -> T = 238
13:24:24.389 -> P = 1009.9699707031
13:24:24.389 -> PNN = 10139
13:24:24.389 -> Hum = 40
13:24:24.389 -> Gas = 836
13:24:24.389 -> Gas FACTOR = 1.0000000000
13:24:24.389 -> AQ = 0% (H: 0% + G: 0%)
13:24:24.389 -> corrected T/H = 238/40
13:24:24.389 -> <- 11 03 86 70 F1D101 000000 00 EE 27 9B 28 00 C8 21 - 6373



Das ist eine Messung mit Isopropanol zu Bestimmung des unteren _gas_lower_limit Kalibrierwerts. Die Variable _gas_lower_limit nimmt den Minimalwert von 836 Ohn an (-> Gas LOWER LIMIT = 836).

Hier eine Messung nach der Kalibrierung an der frischen Luft zur Bestimmung des oberen _gas_upper_limit Kalibrierwerts:

15:04:40.116 -> Gas heat_stab_r = 1
15:04:40.116 -> Gas gas_valid_r = 1
15:04:40.150 -> gas: 43245
15:04:40.150 -> ....Gas heat_stab_r = 1
15:04:40.547 -> Gas gas_valid_r = 1
15:04:40.547 -> gas: 17116
15:04:40.547 -> ...Gas heat_stab_r = 1
15:04:40.879 -> Gas gas_valid_r = 1
15:04:40.879 -> gas: 21193
15:04:40.879 -> ...Gas heat_stab_r = 1
15:04:41.177 -> Gas gas_valid_r = 1
15:04:41.177 -> gas: 24705
15:04:41.177 -> ...Gas heat_stab_r = 1
15:04:41.475 -> Gas gas_valid_r = 1
15:04:41.475 -> gas: 26499
15:04:41.541 -> avg gas: 26551
15:04:41.541 -> Gas UPPER LIMIT = 35125
15:04:41.541 -> Gas LOWER LIMIT = 836
15:04:41.541 -> T = 106
15:04:41.541 -> P = 1037.2199707031
15:04:41.541 -> PNN = 10414
15:04:41.541 -> Hum = 69
15:04:41.541 -> Gas = 26551
15:04:41.541 -> Gas FACTOR = 1.0000000000
15:04:41.541 -> AQ = 74% (H: 0% + G: 74%)
15:04:41.541 -> corrected T/H = 106/69
15:04:41.541 -> <- 11 1C 86 70 F1D101 000000 00 6A 28 AE 45 4A 20 20 - 42211

Die Variable _gas_upper_limit nimmt den Maximalwert von 35125 Ohn an (-> Gas UPPER LIMIT = 35125). Der aktuell gemessene Gaswiderstandswert kann schon wieder geringer sein (-> Gas = 26551 oder -> avg gas: 26551).

Es werden pro Messzyklus 5

Code: Alles auswählen

#define AVG_COUNT       5
schnell aufeinander folgende Messungen gemacht und daraus der Mittelwert gebildet:

15:04:40.116 -> Gas heat_stab_r = 1
15:04:40.116 -> Gas gas_valid_r = 1
15:04:40.150 -> gas: 43245
15:04:40.150 -> ....Gas heat_stab_r = 1
15:04:40.547 -> Gas gas_valid_r = 1
15:04:40.547 -> gas: 17116
15:04:40.547 -> ...Gas heat_stab_r = 1
15:04:40.879 -> Gas gas_valid_r = 1
15:04:40.879 -> gas: 21193
15:04:40.879 -> ...Gas heat_stab_r = 1
15:04:41.177 -> Gas gas_valid_r = 1
15:04:41.177 -> gas: 24705
15:04:41.177 -> ...Gas heat_stab_r = 1
15:04:41.475 -> Gas gas_valid_r = 1
15:04:41.475 -> gas: 26499
15:04:41.541 -> avg gas: 26551

Zur Zeit ist noch ein Fehler in der Messerfassung drin: Der erste der 5 Messwerte stammt noch vom vorausgegangenen Messzyklus. Daher kann er stärker von den darauffolgenden vier Messungen abweichen.
Das wird zu einem späteren Zeitpunkt korrigiert. Üblicherweise steigen die gemessenen Gaswiderstände von den Messungen 2..5 an, da die Sensortemperatur noch ansteigt.

-> Gas heat_stab_r = 1 zeigt an, dass die Solltemperatur erreicht worden ist.
-> Gas gas_valid_r = 1 zeigt an, dass ein gültiger Messwert im BME680 vorliegt.
-> gas: <int> zeigt den Gaswiderstand der aktuellen Messung an
-> avg gas: <int> zeigt den Mittelwert der 5 Messungen eines Zyklus an


Ein Messzyklus dauert 4 Minuten = 240 Sekunden:

Code: Alles auswählen

#define SAMPLINGINTERVALL_IN_SECONDS 240

Als Heizzieltemperatur sind zur Zeit 300 Grad eingestellt:

Code: Alles auswählen

 _bme680.setGasOn(300, 300); // 300 degree Celsius and 500 milliseconds; please check in debug mode whether '-> Gas heat_stab_r   = 1' is achieved. If '-> Gas heat_stab_r   = 0' then the heating time is to short or the temp target too high

Die Heizdauer beträgt 300 ms. Wird sie kürzer gewählt, wird die Solltemperatur nicht mehr erreicht, erkennbar an > Gas heat_stab_r = 0. Die Heizzieltemperatur sollte 320 Grad nicht überschreiten.

Die Luftgüte wird gewichtet aus der relativen Luftfeuchtigkeit und dem gemessenen Gaswiderstand berechnet.
In 'sens_bme680.h' können die Gewichtungsfaktoren definiert werden. Zur Zeit ist der Gewichtungsfaktor fuer die releative Luftfeuchtigkeit auf Null gesetzt:

Code: Alles auswählen

#define HUM_WEIGHTING   0.00      // so hum effect is 0% of the total air quality score, default is 25%
  #define GAS_WEIGHTING   (1.00-(HUM_WEIGHTING))      // so gas effect is 100% of the total air quality score, default is 75%; sum of HUM_WEIGHTING and GAS_WEIGHTING is 1.0

Im seriellen Monitor wird das so ausgegeben:

15:44:58.017 -> AQ = 91% (H: 0% + G: 91%)

Der Luftgüteindex ist hier 91%, das sich zusammensetzt aus 0% von der relativen Luftfeuchtigkeit und 91% von dem gemessenen Gaswiderstand herrührend.

Wird der Sensor im Außenbereich eingesetzt, sollte der Faktor GAS_FACTOR auf 1.0 gesetzt werden.

Code: Alles auswählen

#define GAS_FACTOR      1.0      // for calclulating the _gas_score the upper gas limit is scaled by this factor in order to get more meaningful results for indoor sensors
                                 // GAS_FACTOR should be set to 1.0 for an outdoor sensor

Wird der Sensor im Innenbereich eingesetzt, sollte der Faktor GAS_FACTOR so gesetzt werden (GAS_FACTOR < 1.0), dass der Luftgüteindex IAQ bei Querlüftung mit geöffneten Fenstern ca. 90..95% betraegt.
Die genaue Einstellung ist Ermessenssache, was als gute Luft angesehen wird.

d) Einstellen der oberen und unteren Grenze der Gaswiderstandswerte

Nach einer erfolgreicher ersten Kalibrierung die gemessenen Maximal- und Minimalgaswiderstände als neue Startwerte definiert werden:

Code: Alles auswählen

#define GAS_LOWER_LIMIT 4000.0   // Initial setting for bad  air quality lower limit; will automatically adjusted when sensor exposed to a bad smell e.g. parmesan cheese, mustard, clementine or orange peel, disinfectant solution, etc. 
  #define GAS_UPPER_LIMIT 16000.0  // Initial setting for good air quality upper limit; will automatically adjusted when sensor is put to outdoor for few hours 

GAS_LOWER_LIMIT sollte auf ca. 1,3 * (-> Gas LOWER LIMIT im Debugmode) gesetzt werden (siehe oben).
GAS_UPPER_LIMIT sollte auf ca. 0,8 * (-> Gas UPPER LIMIT im Debugmode) gesetzt werden (siehe oben).

Danach den Sketch mit den neu gesetzten Defines auf den Arduino hochladen. Danach muß die Kaibrierung leider nochmals wiederholt werden, da das Programmieren die Grenzwerte GAS_LOWER_LIMIT und GAS_UPPER_LIMIT auf die neuen Initialwerte setzt.


10. Raspberrymatic
Um den Sensor bei einer Raspberrymatic anmelden zu können, muss auf der Raspberrymatic das JP-HB-Devices-addon Addon für 'Homebrew'
Devices von Jérôme installiert werden:

https://github.com/jp112sdl/JP-HB-Devices-addon


Von dort bitte das letzte Addon Release installieren. Danach kann der Sensor auf der Raspberrymatic angelernt werden.

11. Batterielebensdauer

Eine 5-fach Messung eines Messzyklus braucht ca. 13mA * 0,3 Sekunden * 5 = 0.0195 As. Eine AA Batterie fasst ca. 1500mAh. Damit sollte ein
Batteriesatz ca 1 Jahr halten. Der konkrete Nachweis steht noch aus.




Rückmeldungen und Erfahrungen sind willkommen.

Viel Erfolg und Spaß mit dem Gassensor BME680 wünscht

Ewald
Zuletzt geändert von FUEL4EP am 27.01.2020, 13:14, insgesamt 3-mal geändert.
Grüße

Ewald

jp112sdl
Beiträge: 4491
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 130 Mal
Danksagung erhalten: 287 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von jp112sdl » 26.01.2020, 19:04

Ganz großen Dank für die ausführliche Anleitung.
Du solltest einen neuen Thread erstellen, damit deine Mühen nicht auf Seite 8 untergehen...
Ich hatte es zwar über die "Melden"-Funktion versucht, aber das hat scheinbar nicht geklappt.

VG,
Jérôme

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von FUEL4EP » 26.01.2020, 21:01

Hi Jérôme,

danke für Deine Rückmeldung. Gerne mache ich einen neuen Threat auf. Mein Vorschlag ist, in diesem Threat zuerst mal das ‚[temporarily discontinued]‘ im Titel zu entfernen.

Der Sensor geht ja jetzt :D
Grüße

Ewald

guny74
Beiträge: 23
Registriert: 22.01.2017, 18:08
Hat sich bedankt: 1 Mal

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

Beitrag von guny74 » 29.01.2020, 12:51

Hallo,

vielen Dank für die Beschreibung. Ich habe drei dieser Sensoren schon seit einiger Zeit mit dem alten Sketch an laufen.
Jetzt werde ich updaten....

Jetzt meine Frage zu den aktuellen Änderungen:

FUEL4EP hat geschrieben:
26.01.2020, 17:44

Die Luftgüte wird gewichtet aus der relativen Luftfeuchtigkeit und dem gemessenen Gaswiderstand berechnet.
In 'sens_bme680.h' können die Gewichtungsfaktoren definiert werden. Zur Zeit ist der Gewichtungsfaktor fuer die releative Luftfeuchtigkeit auf Null gesetzt:

Code: Alles auswählen

#define HUM_WEIGHTING   0.00      // so hum effect is 0% of the total air quality score, default is 25%
  #define GAS_WEIGHTING   (1.00-(HUM_WEIGHTING))      // so gas effect is 100% of the total air quality score, default is 75%; sum of HUM_WEIGHTING and GAS_WEIGHTING is 1.0

Warum wird die HUM_WEIGHTING auf 0 gesetzt, wenn default = 25% ist? Gibt es hier einen Grund ?

Vielen Dank.

Gruss
Thorsten

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

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

Beitrag von FUEL4EP » 29.01.2020, 14:50

Hallo Thorsten,

HUM_WEIGHTING wird auf Null gesetzt, um ausschliesslich die VOC Luftguete als Messwert zu bekommen. Ansonsten kann nicht differenziert werden zwischen dem Einfluss von VOC und der relativen Luftfeuchtigkeit. Der Code erlaubt, eine nutzerspezifische Gewichtung einzufuehren. Meine Empfehlung ist es, zuerst mal eine reine VOC Gasmessung zu machen und erst spaeter auf eine gemischte Messerfassung von VOC und relativer Luftfeuchtigkeit ueberzugehen.

Bei den Updates bitte die ClosedCube Bibliotheken mitnehmen (von meinem oben angegebenen Repository und Branch).

Viel Erfolg!

Gruss

Ewald
Grüße

Ewald

guny74
Beiträge: 23
Registriert: 22.01.2017, 18:08
Hat sich bedankt: 1 Mal

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

Beitrag von guny74 » 08.02.2020, 10:39

Hallo Ewald,

vielen Dank für die Info.
FUEL4EP hat geschrieben:
29.01.2020, 14:50

Bei den Updates bitte die ClosedCube Bibliotheken mitnehmen (von meinem oben angegebenen Repository und Branch).
Ich habe ja schon drei Sensoren mit einem einer Älteren Version des Sketches + original ClosedCube Bibliotheken laufen.
Aber ich würde sehr gerne die aktuellen Verbesserungen übernehmen.

Wenn ich allerdings den neuen Sketch und Deine modifizierten Bibliotheken "fixes_and_additions" verwende erhalte ich
dann von Sensor (serial Monitor) nur "BME680 ERR".
Gut ich habe auch einen anderen Sensor "Joy-it bme680" (auch mit BOSCH Sensor), aber läuft ja mit der vorherigen Variante auch.

Eine Idee was hier falsch sein könnte ?

Danke.

Gruss
Thorsten

Antworten

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