I’m using the Sparkfun Arduino library to read the SGP30 sensor, with the sample program provided by the library. The sensor always shows a CO2 reading of around 400 PPM, sitting on my office desk. I have a standalone meter that is sitting right next to the SGP30 and it is currently showing 695 PPM while the SGP30 is showing around 420. If I breath on the SGP30, the reading goes up as expected but then it reverts to around 400. I’m pretty sure that’s incorrect.
Anyone got any idea why I seem to be getting bogus readings?
It could be a bad sensor, but have you tried letting the board run for a few minutes to see if thing stabilize after that?
If they don’t and you purchased the board off the SparkFun website, fill in the [form on this page and we can get you a replacement.
In the “Why do you want an RMA?” box, just put in the URL to this forum post and that will be sufficient.](Return Policy - SparkFun Electronics)
Thanks for the reply! I left the thing running overnight and was surprised to find that this morning it was outputting values in the 600 range, which more or less matched my other meter. Then I restarted the Arduino, and it reverted to 400-ish. It’s still 400-ish after running for several hours.
Have a look at section 6.3 of the SGP30 datasheet. The chip has an internal “baseline compensation” algorithm that is updated with each sample and, apparently, must run for some time before giving accurate readings. There are commands to get the baseline values from the compensation algorithm periodically, save it externally, and restore it on power-up. I don’t think the Arduino library does this, but I don’t use Arduino code so I don’t know for certain. If the baseline is not saved and restored on each power-up, I’d expect the chip to behave the same on each power-cycle.