Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BME 680 vs SGP30 for Arduino Nano project

    BME 680 vs SGP30 for Arduino Nano project

    NickXML
    Member

    Hello,

    I have a networked sensor project built around the Arduino Nano. The project is at the large end of "hobby" projects. We'll eventually run up to 100 sensor units on the network (if our patience and soldering skills keep up). I am looking to record indoor temperature, relative humidity, pressure and VoC level. For temperature, relative humidity and pressure, I need reasonably precise values. For VoC level, I just need trends i.e. show when VoC is increasing or decreasing across the network, not absolute values.

    The sensor unit is designed to run on batteries and report data every minute or so. In other words, the unit loops through waking up, taking some readings, broadcasting them, setting a delay and sleeping.

    To date, we've been using a Bosch BME280 for temp/humidity/pressure, and a Sensirion SGP30 to measure tVoC. Since this is a hobby project, we've been using modules rather than raw ICs (like the Adafruit/Sparkfun modules).

    We have started to prepare to make 50 units, which of course means getting short-run PCBs made in China.  I reached out to Sensirion to find out which Chinese suppliers they might work with and they were very unhelpful. They insisted that I would have to buy from one US-based supplier that was charging 2x the price of other suppliers I found online. They also refused to disclose any approved Chinese manufacturers or verify if any of the links I sent were likely to be offering genuine parts.

    So I'm now looking at replacing the SGP30 with an alternative sensor.

    I had previously rejected the BME680 for several reasons, but I realize I may have misread or misinterpreted what I read.

    Here are my questions:

    1. The SGP30 seemed to detect a wider range of VoC levels. Is that the case?
    2. Since I am using an Arduino Nano, we cannot use the BSEC library. We would therefore be outputting the resistance value. How much variation is there likely to be in resistance between sensors? e.g. if I expose two BME680s to the same quantity of VoC, how similar are the two resistance readings likely to be?
    3. I have read multiple "how to use BME680" articles that mention needing to run the sensor for 30 minutes before taking a reading. Is this correct? My concern is power consumption. Do I need to leave the sensor powered up at all times in order to get accurate readings?
    4. I'm guessing this comes up a lot, but any comments on this article? https://www.jaredwolff.com/finding-the-best-tvoc-sensor-ccs811-vs-bme680-vs-sgp30/ 
    5. Do you have any approved BME680 module suppliers on Alibaba/Aliexpress/similar?

    I'd welcome any information you can provide. I've worked with Bosch MEMS sensors before on commercial projects and always been happy with the quality of the products and support...

    Also, for the sake of fairness, this paper is much less negative than the Wolff article: https://www.mdpi.com/2227-9040/7/3/40/htm

    4 REPLIES 4

    Vincent
    Community Moderator
    Community Moderator

    Thanks for the questions,  let me try to answer some of your questions:

    1. Both BME680 and SGP30 are measuring total VOC components,  we don't expect SGP30 detect wide range of VOC than BME680.    Based on our experience,   BME680 is more sensitivy in TVOC range

    2.  if BSEC is not able to run on the Arduino NANO directly, you can try to trasmit all required data of running lib to host,  then let host MCU to run the BSEC lib.  In recently lib release,  we already support multi instance of BSEC which able to support your secenario. 

    3.  BME680 is a relative TVOC sensor,   so the gas registers value from two different sensor will not same even exposed to the same quantity of VoC.  There is no comparison here.

    4.  BSEC lib are trying to fix the bugs and provide different working modes.  the tested working mode of current BSEC lib is LP mode (3 seconds interval,average power consumption 0.9mA) and ULP mode (300 seconds interval, average power consumption 0.09mA).  Other modes are not supported yet.  One mixture is measuring temperature, humidity and pressure in LP mode but TVOC in ULP mode. 

    5. Yes, to use BME680, you need a run in time.  it is depending on the different mode selection from BSEC,  then this run in time will also vary.  But you can always try to get the BSEC lib output with accuracy indicator to understand how good the output value is.  After first run in,  you can also store all the parameters, to speed up the next run in time when power off / on the sensor.  So the power should not be a concern here.

    6. we have reference design as following from our website which might be able to fulfill your requirement directly.

    https://www.bosch-sensortec.com/software-tools/tools/reference-designs/adafruit.html

    7.  we are offically cooperate with DigiKey and Mouser.  

    Hi Vincent,

    Thanks for the quick and helpful reply -- you are already well ahead of Sensirion's support!

    I have a couple of follow on questions, based on your answers:

    2. if BSEC is not able to run on the Arduino NANO directly, you can try to trasmit all required data of running lib to host, then let host MCU to run the BSEC lib. In recently lib release, we already support multi instance of BSEC which able to support your secenario.

    Our plan is for all of the sensors to connect to a host, most likely a Raspberry Pi 4. If I have 100 sensors reporting to one host, and I run BSEC on that host, should I be concerned about the processing load? Could it be too much for the host to handle?

    3. BME680 is a relative TVOC sensor, so the gas registers value from two different sensor will not same even exposed to the same quantity of VoC. There is no comparison here.

    Understood. So if we did use raw resistance values instead of BSEC, we should compare the sensor to itself i.e. if sensor A reads 200 and then subsequently reads 100 we can imply that tVoC has changed (the tVoC level increased if I understand things correctly). Is that correct?

    4. BSEC lib are trying to fix the bugs and provide different working modes. the tested working mode of current BSEC lib is LP mode (3 seconds interval,average power consumption 0.9mA) and ULP mode (300 seconds interval, average power consumption 0.09mA). Other modes are not supported yet. One mixture is measuring temperature, humidity and pressure in LP mode but TVOC in ULP mode.

    Understood. I believe I read somewhere that for Arduino, you can set / force LP and ULP mode without using BSEC. Is that correct?

    5. Yes, to use BME680, you need a run in time. it is depending on the different mode selection from BSEC, then this run in time will also vary. But you can always try to get the BSEC lib output with accuracy indicator to understand how good the output value is. After first run in, you can also store all the parameters, to speed up the next run in time when power off / on the sensor. So the power should not be a concern here.

    So the run in time only applies the first time the sensor is run. I do not need a 30 minute run time every time I want to get a new reading. I just want to be sure of this as it was very confusingly worded on Adafruit's site and elsewhere.

    7. we are offically cooperate with DigiKey and Mouser.

    Understood. Since we are having boards made and assembled in China, it would be better if we could find a supplier based there. We will probably use a module rather than the IC so we can update if a newer sensor comes along later. I appreciate that you may not be able to name suppliers in a public forum, but do you have any guidance on how to detect counterfeit BME680s? I've found several different BME680 modules that range in price from ~$6 to ~$15. Given the economics of production in China, this doesn't seem outrageously low. All suggestions welcome.

    Thanks again for the help.

    -Nick

    Vincent
    Community Moderator
    Community Moderator

    Hello Nick

    Please see my following comments to your questions:

    1. You can use ULP mode,  then time interval is 300s.  100 sensor data can be run in pipe line.  each execution of IAQ will not take up to 1s.  this means within 300s interval,  you are able to calculate the IAQ value based on each sensor inputs.

    2. Yes, your understanding is patially correct.  the GAS register value changes means the VOC level is changing.   small register value means clean air which means low VOC level.

    3. Sensor have Force mode which are used in our BSEC.  And latest BSEC lib support a force trigger measurement while you are using ULP mode. 

    4. if you stored all parameters,  then you don't need 30 minutes run in time every time you power on device.  The run in process still needed but will be speed up via the stored parameters.

    5. BME680 have its own chip id.  you can try to read from register 0xD0 for the chip id.  it it matches our datasheet value,  then it should be correct BME680 sensor. 

    Thank you!

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist