Shop Learn
Air Quality Monitor (CO2, Temp, RH) — Parallax Forums

Air Quality Monitor (CO2, Temp, RH)

For the past few years, I've been engaged with CO2 sensors of one sort or another. I recently tried the Sensirion SCD30 and came away impressed by it. So I decided to make a small desktop air quality monitor. It uses the Sensirion module, along with an AdaFruit ST7735 color TFT breakout board, and a Propeller FLiP module.

I hand wired the unit on a 2" x 3" Vector board. The FLiP is mounted on the rear side using reverse receptacle strips. I did this both to reduce the overall thickness of the assembly and also so that the the pins from all three modules would come through on the same side so I could wire it. Here's my sloppy wiring work:

On the front side, the display and sensor are socketed in receptacle strips:

The software includes my revamped ST7735 driver that uses the Propeller font in various sizes. You can see the results here:

The temperature sensor in the SCD30 is subject to the unit's self heating and always registers high. There a way to correct this in the unit's EEPROM, but I decided not to, since I want the unit's actual temperature to correct the CO2 readings for the temperature of its air cavity -- not the ambient temperature. As a consequence, I'll be adding a One-Wire temperature sensor to my assembly to measure ambient temperature.

I actually made two of these and set them next to each other to see if their readings agreed. They did, tracking each other up and down as conditions changed.

I won't be hand-wiring another, though. Even though only 12 wires were necessary, thanks to the FLiP having all the complicated stuff on board, I don't enjoy the process. I will be designing a PCB for it, though, and may even offer it for sale if there's enough interest.



  • Very nice.

  • Phil Pilgrim (PhiPi)Phil Pilgrim (PhiPi) Posts: 23,173
    edited 2021-12-24 07:25

    I got the 1-Wire temp sensors today (DS18B20) and wired one into one of the units. It didn't help much, as it also needed correction for the internal enclosure heating. So I opted not to use the 1-Wire sensor and, instead, to make the temperature correction for the SCD30's temperature a constant in the program. That way, I can still use the SCD30's internal temperature to correct the CO2 reading and still display a corrected temperature that fairly well follows the external ambient temperature.


  • There is the new kid on the Sensirion block too, SCD41, which uses the photoacoustic principle rather than NDIR.. It's only 10mm square by 6.5mm high, but apparently competitive in accuracy and stability. I'm curious to try that.

    My current go to is the EE894, which is dual wavelength NDIR like the SCD30. It needs 5V power though, a disadvantage with the Prop running on a LiPo cell. I've had to provide a boost supply.

  • Thanks, Tracy! The SCD40 and SCD41 both look interesting for a volume commercial app, and their prices look good; but the soldering requirements are a bit unapproachable for hobbyist use.

    The EE494 and EE495 are both more approachable for soldering and have a built-in baro sensor -- a big plus. They're not sold through distribution, though, and I wasn't able to connect with someone in the company about pricing. Do you know what these run in small quantities?


  • Tracy AllenTracy Allen Posts: 6,593
    edited 2021-12-28 21:53

    Mouser has the SEK-SCD41 evaluation kit for $56, which is less than the cost of the SCD30. Easy to connect. Granted, the SMT version would be hard to hand solder, a pity, because most of the pins are do-not-connect.

    The EE894 came to $116 each in 2019 directly from the Chicago branch of the company. Higher cost than the SCD30. So I'm interested in your experience. The baro is a plus, but probably not that much of a big deal. I see that the Sensirion command set includes an altitude correction. The thing that gets me about all of these is the self-calibration algorithm, which depends on frequent exposure to 400ppm CO2. That is a stretch in many or most locations.
    The E+E Elektronik Corporation
    333 E. State Parkway |Schaumburg, IL 60173 | USA
    Main Office: 847-490-0520
    Direct: 847-755-5589
    Cell: 847-217-7507 <-- contact Adam Spore

  • Mouser has the SEK-SCD41 evaluation kit for $56, which is less than the cost of the SCD30.

    Good to know. Thanks! I'll check it out and include pads for it in my PCB layout.

    The thing that gets me about all of these is the self-calibration algorithm, which depends on frequent exposure to 400ppm CO2. That is a stretch in many or most locations.

    I always disable auto-calibration in the 20% COZIR units incorporated into one of my products and in the SCD30. It's hard to imagine a situation where auto-calibration would be useful, except perhaps in an air plenum.

    I've found the SCD30 to be extremely reliable and consistent. The two AQ monitors I built, placed side-to-side, tracked each other almost perfectly. The temp sensor does suffer from self-heating, but I see that as a plus, since you really want to know the temperature of its air chamber to apply a correction to the CO2 PPMs. For ambient temperature, I just have a constant in my program for correction, although I'm not sure a simple additive constant is entirely adequate. Plus it overcorrects the ambient temp as the SCD30 is warming up.


  • I've completed the design for the PCB:

    It will accommodate either the SCD30 or SEK-SCD41, along with a FLiP module (mounted on the rear, and an ST7735 TFT display. There are also three 3-pin accessory headers available on the left side for ... whatever. Power is through the USB connector only.

    BTW, the yellow text doesn't get printed on the board; it's only for my reference while doing the layout.


  • That looks great Phil.

    I'm curious about the SCD30 power profile. I attach data from the EE894. It fires a visible red lamp that draws a peak current over 300mA, but the average is 3.5mA when sampled at 15 second intervals.

  • Phil Pilgrim (PhiPi)Phil Pilgrim (PhiPi) Posts: 23,173
    edited 2021-12-30 22:03

    Tracy, here's a scope trace for the voltage measured across a 10-ohm resistor in the SCD30's ground lead. I had the sampling interval set at 2 seconds. So divide the screen voltages by 10 to get the current:

    BTW, the IR source in this module appears to be incandescent. The glow is visible through a little window at the base of the sensor. That seems consistent with the current dropping somewhat as the source warms up (i.e. its resistance rising).


  • I've made a couple mods to the PCB:

    I realized that the pads on the left could also be used to accommodate a push-button switch. This might be used for switching between °F and °C, for example. Or for switching between text and graphical history modes. So I added a couple pull-ups: R1 for a vertical switch; R2, for a horizontal switch.

    Here's an example datasheet for the switches:

    I also corrected a routing error for SCL and SDA on the SCD41. I had them switched.


Sign In or Register to comment.