The SCD30 from Sensirion is a high quality Nondispersive Infrared (NDIR) based CO₂ sensor capable of detecting 400 to 10000ppm with an accuracy of ±(30ppm+3%). In order to improve accuracy the SCD30 has temperature and humidity sensing built-in, as well as commands to set the current altitude. For additional accuracy the SCD30 also accepts ambient pressure readings!
We've written an Arduino library to make reading the CO₂, humidity, and temperature very easy. It can be downloaded through the Arduino Library manager: search for 'SparkFun SCD30' or it can be found in the Documents tab above.
Note: The SCD30 has an automatic self-calibration routine. Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete.
This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.
Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels
If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.
Skill Level: Competent - The toolchain for programming is a bit more complex and will examples may not be explicitly provided for you. You will be required to have a fundamental knowledge of programming and be required to provide your own code. You may need to modify existing libraries or code to work with your specific hardware. Sensor and hardware interfaces will be SPI or I2C.
See all skill levels
If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.
Skill Level: Competent - You will be required to reference a datasheet or schematic to know how to use a component. Your knowledge of a datasheet will only require basic features like power requirements, pinouts, or communications type. Also, you may need a power supply that?s greater than 12V or more than 1A worth of current.
See all skill levels
Based on 4 ratings:
1 of 1 found this helpful:
Used sparkfun's available software and QWIC Red Board which was a great help in getting this device up and running. It would be helpful to have a pins added version. For my application needing to expose the sensor to 1 hour of fresh air each 24 hour period was a problem. If you are using this to sample and store continuous reading inside a closed area, then taking it out to provide "fresh" air can be a problem. 7 day calibration worked perfectly. Used two built up sensors two compare outputs which after calibration was within stated accuracy between the two sensors. I did not have a alternate calibration source to test the sensor against which would have helped.
I wrote some Python code to use this with a Beaglebone (because I knew the beaglebone hardware supported I2C clock stretching). It was a very enjoyable experience because the Sensirion documentation covered the interface very well, above and beyond what I've ever seen before. Maybe it mentioned it somewhere but I would add that the returned CO2 values are encoded as a 32-bit float. The sensor seems quite responsive, I could open a window, and see the CO2 ppm levels change as the room ventilated. I didn't go thru all the details for the calibration process; I was getting about 530ppm for outside air, when I expected something like 405 ppm.
Only sensor I've tried that gives remotely reasonable readings. Most other sensors need some kind of calibration (usually using "fresh air" as a proxy for 400ppm CO2) and even then they're bouncing around all over the place .
Downsides: Library compatibility is mostly Arduino-centric; originally was planning on using a Raspberry Pi but between drivers for other sensors and the clock stretching shenanigans the SCD30 pulls, using an Arduino dumping data over UART to the Pi wound up being easier. Also had to downclock i2c on the Arduino pretty heavily to get it all to play nicely over a qwiic bus (but it did work somewhat reliably then, plus or minus some resetting the Arduino when it gets locked up for reasons I'm not clear on).
One last unexpected upside: much smaller than I was expecting! Which means I might actually be able to fit it in a portable sensing platform, esp since it has on board humidity sensing. (Would be near perfect if it included a barometer!)
 The MH-Z14A's analog output is apparently unbuffered, which doesn't play nice with the Ardunio's ADC. See http://www.doctormonk.com/2018/03/review-and-test-of-mh-z14a-ndir-co2.html
I played around with several eCO2 sensors which require calibration and other things, and eventually came upon this sensor which gives true CO2 concentration numbers. It is reasonably accurate, and outputs the values directly over i2c unlike many other sensors. I had good luck interfacing with this sensor using i2c on the Raspberry Pi and Arduino. It also handles temperaure/humidity compensation etc internally which makes it much easier to use than many other sensors. The output data looks really nice and I was able to determine that my college dorm room was exceeding 2000ppm co2 regularly.