Open-source air-quality sensor board · concept, gauging demand

Air quality sensor board

Open-hardware true CO₂ in ppm + relative VOC and NOx indices, on a small host-controlled board.

400–5000 ppm
true CO₂
1–500
VOC index
1–500
NOx index
~34 µA
gas-channel idle (VOC/NOx)
The method

Real CO₂, measured photoacoustically

The SCD41 measures CO₂ optically: it pulses infrared light at CO₂'s absorption band inside a small sealed cavity and reads the pressure wave the gas produces — Sensirion's photoacoustic principle. You get a true CO₂ concentration in ppm across 400–5000 ppm, at a datasheet accuracy of ±(50 ppm + 5% of reading) at 25 °C / 1013 hPa — ambient-pressure compensated when the optional barometer is populated. Alongside it, the SGP41 adds a VOC index and a NOx/oxidizing-gas index (1–500 each): relative trends, not concentrations.

What it measures

  • CO₂ — true concentration, 400–5000 ppm (SCD41, photoacoustic)
  • ±(50 ppm + 5% of reading), pressure-compensated
  • VOC index + NOx index, 1–500 each (SGP41)

How you read it

  • One shared I²C bus — SCD41 @ 0x62, SGP41 @ 0x59
  • Your own host MCU; open Zephyr driver (Apache-2.0)
  • Gas Index Algorithm on your host (BSD-3)
The layout

What's on the board

A to-scale concept layout (pre-schematic), shown as the standalone build with the on-board XC6220 LDO populated. The SCD41 CO₂ sensor sits on a milled thermal-isolation island at the vent end, with the regulator and the SGP41 kept at the far end — so their self-heating can't bias the CO₂ reading.

thermal-relief slitSDASCLVDDGNDEN▸1SCD41CO₂SGP41BMP390LXC622016.0 mm34.0 mm
Top view · 16 × 34 mm
6.5 mmothers < 1 mm
Side · 6.5 mm tall
Specs

Specs you can check

CO₂ range400–5000 ppmTrue CO₂, Sensirion SCD41
CO₂ methodPhotoacousticOptical — not NDIR, not MOX/eCO₂
CO₂ accuracy±(50 ppm + 5%)At 25 °C / 1013 hPa; wants pressure compensation
VOC index1–500Relative index, not ppm (SGP41)
NOx index1–500Relative oxidizing-gas index — not NO₂ ppb
InterfaceI²C, one busSCD41 @ 0x62, SGP41 @ 0x59, BMP390L @ 0x76/0x77 (optional); no IRQ lines
HostI²C host MCU, 3.3 VNo on-board MCU — it's a sensor board
Supply3.4–5.5 V in → 3.3 VOn-board XC6220 low-noise LDO provides a clean ≤30 mV p-p power rail for the SCD41
CO₂ pulse~205 mA · ~0.7 WMax measurement pulse, sustained several seconds: ~205 mA at the 3.3 V rail (≈0.68 W); the on-board LDO passes it from your input — ≈1.0 W from a 5 V host
Board idle~0.2 mASGP41 ~34 µA + SCD41 ~150 µA + LDO ~25 µA, all idle; ~60 µA if the SCD41 is powered down between single-shot reads
Power controlEN pad (LDO CE)EN cuts the whole board — both sensors share the LDO rail. The SCD41 tolerates duty-cycling; the SGP41 needs continuous supply for accurate VOC/NOx (~3 mA @ 3.3 V)
Size (est.)~18 × 22 mm · 8 mm tall1.5 mm PCB + 6.5 mm SCD41 = 8.0 mm stack; footprint set by the SCD41 (10.1×10.1) + 5-pad header — pre-schematic estimate
SourcingLCSC / JLCPCBNo Mouser/DigiKey-only dependencies
Open-source host stack

Open-source software, open hardware

Everything that runs on your microcontroller is open and license-clean. You read the driver, the algorithm, and the schematic — and you can change all three.

Apache-2.0Zephyr driver
BSD-3Gas Index Algorithm

Sensirion's VOC/NOx index math runs on your host, not in a sealed blob. Permissive; audit and modify it.

Open-hardwareKiCad design files

Honest caveat: the Sensirion chips run proprietary on-chip firmware you can't open. You control the host stack — driver, algorithm, board — not the silicon. So: no closed blob on your MCU, not "fully open silicon."

Status · June 2026

Concept, pre-schematic — no board built or tested yet. This page just gauges demand: send a short note and it lands in the maker's Telegram. Leave a way to reach you for first dibs, the build log, and an honest go/no-go. Not a pre-order, not an email list, no ship date.

Questions

Is this another eCO₂ sensor?

No. eCO₂ modules heat a VOC plate and infer a CO₂-shaped number; they have no CO₂ sensor. Welkin uses the Sensirion SCD41, a photoacoustic sensor that measures actual CO₂ optically and reports ppm (400–5000).

Is the NOx index NO₂ in ppb?

No. The SGP41 outputs a relative NOx/oxidizing-gas index from 1 to 500. It is not a concentration and not NO₂ in ppb or ppm. Same for the VOC index — relative, 1–500. The reason an absolute ppb/ppm reading is hard here is physical: the SGP41 is a metal-oxide (MOX) element whose resistance shifts in response to a mixture of reducing and oxidizing gases rather than one species, so a single broadband element can't be inverted to an absolute ppb of NO₂ or of "VOCs" — and "VOC" isn't one compound but hundreds. That MOX baseline also drifts with humidity, temperature, and aging, so any fixed ppb calibration would walk off over time; instead Sensirion's Gas Index Algorithm (host-side, BSD-3) tracks each sensor's own recent baseline and emits a normalized index where ≈100 is your recent typical and higher means a rising deviation from it — robust precisely because it's relative. By contrast, CO₂ has a strong, isolated IR absorption band, so an optical NDIR/photoacoustic part (the SCD41 we use) maps that band directly to a real ppm concentration; a genuinely selective VOC or NO₂ concentration would instead need a bulky, comparatively short-lived electrochemical cell (for NO₂) or lab spectroscopy — neither of which fits a small, cheap, low-power board. So the honest, useful output is a trend index, and that's what Sensirion ships across its modern VOC/NOx line — the SGP40/SGP41 and the integrated SEN5x and SEN6x nodes, including the SEN63C — all reporting the 1–500 index by design rather than absolute concentration.

Is it actually open, or "open" with an asterisk?

The host stack is genuinely open: Apache-2.0 Zephyr driver, BSD-3 gas-index algorithm, open KiCad files. The asterisk we won't hide: the sensors run proprietary on-chip firmware Sensirion programs into the silicon at the factory — the SCD41's photoacoustic signal processing and calibration, for example. You never receive or flash it; it's part of the chip, not a blob in your build — the opposite of Bosch's BSEC, a closed binary you'd otherwise link into your own firmware. And since Welkin ships no firmware of its own, you read it from your host over I²C with Sensirion's portable, MCU-agnostic embedded-I²C drivers plus the open gas-index algorithm — so any host with an I²C controller works. The reference firmware targets Zephyr on nRF (the beacon platform).

Does it work on its own, or do I need a host?

It's a sensor board, so it needs a host MCU to read it over I²C — no processor of its own. An on-board XC6220 LDO lets it take a recommended 3.4–5.5 V supply (and an optional DNP barometer adds pressure comp), which makes it host-agnostic — any host, not just the beacon tracker — but never self-contained. Limits: 3.3 V I²C logic, and your supply sources the ~205 mA CO₂ pulse.

Can I duty-cycle it to save power?

Partly — and there's an EN pad (the LDO's chip-enable) so the host can cut all board power. The two sensors differ, though. The SCD41 (CO₂) is built for it: single-shot mode, ~0.5 µA powered down between reads. The SGP41 (VOC/NOx) wants to run continuously — its Gas Index Algorithm builds an adaptive baseline over hours, and the NOx channel needs ~10 s of conditioning after each power-up, so power-cycling it costs index quality until it re-converges. Keeping it live costs ~3 mA at 3.3 V (the hotplate). So: duty-cycle the CO₂ freely, keep the SGP41 running when VOC/NOx matter, and use EN for full-sleep modes where you can accept the warm-up.
Concept · pre-schematic · June 2026 — a demand check, not a pre-order

Want one? Tell me.

If enough makers say they'd want one, the batch gets built. Send a short note — it lands straight in my Telegram. Add a way to reach you and you get first dibs and the build log; if it's a no-go, I'll say so.

Goes straight to my Telegram — no list, no spam.