Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BME680 Compensation not working on sIAQ output

    BME680 Compensation not working on sIAQ output

    Established Member

    We have checked the sIAQ behavior on different temperature and humidity levels inside a calibrated environmental chamber. The sIAQ output is very unstable (not compensating temperature and humiditiy) which causes de sensor to self calibrate quite often.

    The code used is the "basic_config_state" included in the Examples, with this configuration:


    STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000)

    The code was modified only enable PWM outputs on Arduino Mega for temperature, humidity and sIAQ in order to register the signals in a external logger.

    Before the test the sensor had been exposed to both clean and very polluted environment, the state 3 had been reached and saved into Arduino Mega 2560 EEPROM. 

    The sequence of the chamber sitting was this:

    20 ºC / 60% RH

    30 ºC / 60% RH

    40 ºC / 60% RH

    50 ºC / 60% RH

    20 ºC / 60% RH

    10 ºC / 60% RH

    0 ºC /  RH not controlled

    20 ºC / 70% RH

    20 ºC / 80% RH


    This is the result (sIAQ is a 0 to 5 V signal mapping 0 to 1000 sIAQ BSEC output):


    As you can see every change in temperature causes a change in humidity, as expected, but also in sIAQ, with values from 0 to 380 and undergoing frequent calibration (2) states.

    My questions:

    - Can the sIAQ behaviour be explained by BSEC algorith not responding fast enough to the sudden changes in enviromental conditions?

    - The period was set to 28 days because I read in this forum this is recommended for sIAQ output, but the sensor history did not reach 28 days yet. May changing the setting to 4 days can improve the sIAQ stability in this case?

    Thank you.





    8 REPLIES 8

    Hi PicoPiedra,

    Firstly, I would like you to read the following posts:

    I explained the function of BSEC in a bit more details in this post:
    Also make sure to read the following Q&A:

    OK now that you are back here. The static IAQ as you've learned has a fixed sensitivity scaling, however the the part itself is a chemical sensor that will slowly stabilize over time. We have tuned the sIAQ output to best match the sensitivity we characterized with hundreds of parts using accelerated aging. We have now over 4 years of real-life data in in field to support that claim. Note however that with chemical sensors, the aging will depend on the environment it is exposed to.

    Back to your use-case. The sensitivity change is most prominent in the early life of the sensor, in the first days or weeks. For LP mode I would recommend to wait 1 week before performing these kinds of tests. In ULP mode, 2 weeks. (the longer the better, all our data suggests that this sensitivity decrease stabilizes over time).

    As you can probably see from the raw data, humidity impact the raw gas resistance. For rapidly changing environmental conditions, the output is affected by the different time constants of each internal sensor (temp, humidity, gas). Latest BSEC releases include some compensation for this.

    Question: Is your application really expecting such rapid environmental changes ? I would recommend to test the sensor with a profile that would be expected in the real world, so you do not have to solve problems that do not exist.

    Always happy to give advice, if you want to share a bit more about your application, we can make recommendations.


    Established Member

    Thank you.

    BSEC version was 1.5.1474.

    We still need to characterize our application environment but I think you are right, it will not probably be so agressive. I will repeat next week with a less agresssive temperature profile. When you say to wait for one week do you mean to have the device power on for one week or can we switch it off as long as we save the config state in th EEPROM ? I mean can we still accumulate time to improve stability while cycling power during the process?

    Also, from the post you linked:

     "(Static) IAQ value of 25 roughly translates to "the cleanest air it has seen so far"   

    "So far" means the cleanes air in 4 days or 28 day  time window depending on cofiguration?


    I just noticed that the "iaqSensor.setConfig(bsec_config_iaq);" was missing in my code, so it was working in default mode.  Not sure if this could have caused the sIAQ instability.

    Sorry BSEC library version is