juergs / BME680-Arduino-Library-with_TVOC-

Library with TVOC output
3 stars 0 forks source link

Wrong results ? #1

Open choller opened 3 years ago

choller commented 3 years ago

I tried this library with my BME680 and I am 100% sure it gives wrong results in warmer rooms. The formula used to calculate tvoc is definitely not properly accounting for temperature. In a room with 28/29 °C the library gave a reading of 150-180 ppm in contrast to fresh (cold) air where it immediately went up to 240 before I closed the window.

Bottom line: Do not rely on the values produced here.

juergs commented 3 years ago

Hello choller, thanks for giving a try this lib. Your bottom line ",,,do not rely on the values produced here." seems not yet proven enough!

  1. Can you please describe how to reproduce this behavior.?

  2. Log-Output?

  3. What means "fresh (cold) air"?

  4. Specially how long, after having indoor, the assumed "wrong" reading stays.?

You can compare this lib against BSEC : https://github.com/juergs/BME680_TFT_Monitor or https://github.com/juergs/ESPEasy_BME680_TVOC ESPEasy-Version for 8266.

A factor is also the correct setting of the sensors baseline. The baseline (~" lowest TVOC reading") when sensor is switched on. This value will be taken for further TVOC calculation.

My home conditions are: generally 21 Degrees Celsius as normal room temperature. I open the window for fresh air inlet, switch the sensor on. after some minutes i shut the window. Then, as normal behavior the sensor shows some 100 units increase as peak response behavior and then after a short time shows units from 30 to 40, as expected.

Knowing that an absorbtion TVOC sensor-type as the BME680, may have some restrictions to be known: The library has no saving of the actual baseline. Reason (see also here https://forum.fhem.de/index.php/topic,78619.msg1110033.html#msg1110033 in german language): Seems that setting the baseline from saved parameters will not be sucessful. Because the realtion between TVOC and CO2 is not conventional true value due to a exponential times higer sensitivity to H2O. There are also memory and heat aging effects on the MOX-sensor. Another effect you can see having beneath the sensor, after baselined, a dish with very hot water. You will see an immediately rise of the TVOC value because of massive rise of absolute air humidity. (Similar to your conditions! => warm air has a higher absolute air humidity)

Therefore, for more accurate measeurement results, the use of NDIR-CO2-Sensors would be indicated.

There is also an improved algoritm available: see https://github.com/herrmannj/airq-mqtt

Tomorrow i'll be able to show you a Grafana-plot of this behavior with the ESP8266. https://github.com/juergs/ESPEasy_BME680_TVOC/blob/master/Alle%20Werte%20-%20Grafana.png

juergs commented 3 years ago

Consider, with a really great temperature difference, having humidity condensation effects on the sensor, too! See also: https://forum.fhem.de/index.php/topic,29773.msg224962.html#msg224962 for some hints regarding air humidtiy.

juergs commented 3 years ago

Hello choller, sorry but my tests didn't affirm your detection of wrong values having a great delta-T.

My steps:

  1. Fresh air environment in our kitchen (Open window, about 4 °C outside).
  2. Putting the sensor in the fridge, let him cool down for some minutes (>5).
  3. Bringing back the sensor to my office room (about 21°C), having set a new baseline now (!).

See the measurements, approving what i 've said in the above comment (using my ESPEasy-Version!). Pay attention also to the huge increase of air humidity and the curve of the second sensor "BME680_CS_06 - IAQ" !

BME680_TVOC__Delta-T-Test

juergs commented 3 years ago

2nd test (sample period 5 minutes):

  1. sensor outside window @ approx. 4°C => baseline set outside, fresh cool air!
  2. set sensor inside @ approx. 21° C

I am not seeing any of your reported behavior!

2nd_BME680_Test

juergs commented 3 years ago

2nd_BME680_Test_longterm

juergs commented 3 years ago

But, regarding a shorter sample rate, reveals probably your mentioned short peaks. This "overshoot" seems to be a normal behavior, depending on the curve flattening algorithm, sample rate used and the high sensitivity to humidity of the sensor. :-)

Note that heavy raise of air humidity and fall after accommodating to room temperature! But this seems to be an acceptable behavior, Thinking on not having to use BSEC static libraries ... ;-)

BME680_shorter sample period

choller commented 3 years ago

@juergs Thanks for the in-depth analysis. My current guess is that the problem is rather with the absolute temperature in that room (29°C) and not the differential. I had the sensor in that room for about an hour and the results did not change. It could well be that the algorithm somewhat works under more "normal" circumstances, but produces these results only in rather extreme conditions. I am going to try this again at some point with an esp32 and the BSEC library and compare the results under different conditions, but it could well take a while for me to be able to try again here.

juergs commented 3 years ago

@choller: in summer we reached here also temperatures > 35°C . For shure with room-temps. >= 29°C and i didn't notice any major influence. Are you using a new sensor? Burn-In phase done (at least 4 Days)?

Take also a look here: https://forum.fhem.de/index.php/topic,96241.msg903324.html#msg903324. and here: https://forum.fhem.de/index.php/topic,78619.msg978356.html#msg978356

MOX = Metalloxidsensor, varies resistance on presence of target gases. ABC = Automatic Baseline Correction, corrects manufacturing tolerances and drift.

Give a try for ESPEasy: https://forum.fhem.de/index.php/topic,78619.msg974355.html#msg974355. (Sorry, you must register there to view added screenshots and files.) There is also an option to use the Arduino ide plotting facility for further analysis. :-)