LoopStringLoopString
All Posts
CO₂ sensors compared, hobby NDIR module to industrial CARBOCAP probe
Buyer's Guides6 min read1,172 words

CO₂ Sensors: From MH-Z19 to Vaisala — The Complete Quality-Tier Buyer's Guide

By LoopString Team


Quick picks by tier. Avoid → any "eCO₂" sensor (CCS811, SGP30, ENS160) — they don't measure CO₂. Hobby → Winsen MH-Z19C (true NDIR). Maker/Prosumer → Sensirion SCD41 (or SCD30 for tighter accuracy). Commercial → a Senseair / NDIR Modbus probe. Hardened industrial / audited → Vaisala GMP252 (CARBOCAP). Why each wins is below — but if you just need a name, start there.

The thing that actually bites you: "eCO₂" isn't CO₂

The single most expensive mistake in CO₂ sensing is buying a sensor that never measures CO₂ at all. Cheap metal-oxide (MOX) parts like the CCS811, SGP30, and ENS160 output a number labelled "eCO₂"equivalent CO₂. They measure volatile organic compounds and then estimate a CO₂-like figure from a model. In a room full of people that correlation roughly holds; in a greenhouse, a fermentation cellar, or anywhere you're actually dosing CO₂, it's meaningless. If your decision depends on the number — enrichment, ventilation control, IAQ compliance — eCO₂ is not an option.

The second thing that bites you is Automatic Baseline Calibration (ABC/ASC). Almost every low-cost true-NDIR sensor assumes the space returns to fresh-air (~400–420 ppm) regularly, and silently re-zeros itself to that floor every few days. In a sealed grow room or an enriched space that never drops to ambient, ABC "learns" your elevated baseline as 400 ppm and your readings walk steadily low. Growers lose whole cycles to this. Every enrichment deployment must disable ABC and rely on periodic manual calibration instead.

So the real question isn't "how many ppm?" — it's "is this a true CO₂ measurement, and will it still be true after the sensor has been running unattended in my environment for a month?"

The decision axes

  • Measurement principle — MOX-estimated eCO₂ (avoid) vs true NDIR (infrared absorption) vs photoacoustic NDIR (Sensirion's miniaturised variant). Only the latter two measure real CO₂.
  • Accuracy — quoted as ±(fixed ppm + % of reading), e.g. ±(50 ppm + 5%). The fixed term dominates at low ppm; the percentage dominates during enrichment.
  • Range — 0–5000 ppm covers IAQ and most grows; enrichment to 1500 ppm is fine, but some applications need 0–10000 ppm or percent-level.
  • Baseline behaviour (ABC/ASC) — can you disable it? Mandatory for sealed/enriched spaces.
  • Drift & recalibration — how far it wanders per year and how you re-zero it (fresh air vs reference gas).
  • Compensation — good sensors compensate for temperature, humidity, and barometric pressure; altitude matters for NDIR.
  • Enclosure / interface — bare module on a header vs IP-rated probe on RS-485 or 4-20 mA for long, noisy runs.
  • Traceable calibration — the audit requirement; only industrial instruments ship a certificate.

Tier

Sensor

Principle

Accuracy

Range

Baseline (ABC)

Interface

Price (USD)

Best for

Avoid

CCS811 / SGP30 / ENS160

MOX — "eCO₂" estimate

Not real CO₂

n/a

I²C

$5–20

VOC/IAQ trend ONLY — not CO₂

Hobby

Winsen MH-Z19C

NDIR

±(50 ppm + 5%)

0–5000 ppm

ABC on (disable for enrichment)

UART / PWM

$20–35

Hobby grows, room awareness

Prosumer

Sensirion SCD41

Photoacoustic NDIR

±(40 ppm + 5%)

0–5000 ppm

ASC (disable-able)

I²C

$25–50

Standardize-on default

Prosumer

Sensirion SCD30

NDIR (+RH/temp)

±(30 ppm + 3%)

0–10000 ppm

ASC (disable-able)

I²C / UART

$50–60

Tighter accuracy

Commercial

Senseair / NDIR Modbus probe

NDIR, IP-rated

±(30–50 ppm + 3%)

0–5000 ppm

field cal

RS-485 Modbus

$120–400

Multi-zone, dusty/harsh

Industrial

Vaisala GMP252

CARBOCAP NDIR

±(40 ppm + 2%)

0–10000 ppm

traceable cal

Analog / Modbus

$600–1000+

Audited / GxP / research

Walking up the ladder

Avoid — eCO₂ MOX sensors (CCS811 / SGP30 / ENS160, $5–20). These are fine VOC/air-quality sensors and genuinely useful for trend IAQ. They are not CO₂ sensors. Don't use them for enrichment, ventilation setpoints, or anything you'll defend to a customer.

Hobby — Winsen MH-Z19B/C ($20–35). The cheapest true NDIR sensor and the floor for trustworthy CO₂. ±(50 ppm + 5% of reading), 0–5000 ppm, UART or PWM output. ABC is on by default — fine for an office or a hobby tent that breathes fresh air daily. Stop here if you want room-level CO₂ awareness and nothing critical rides on the exact number.

Maker/Prosumer — Sensirion SCD41 / SCD30 ($25–60). The SCD41 is a photoacoustic NDIR part the size of a fingernail with onboard humidity and temperature, ±(40 ppm + 5%), true I²C — the part to standardise on. The older SCD30 is physically larger but tighter at ±(30 ppm + 3%). Both let you disable automatic self-calibration and set pressure/altitude compensation. Stop here if you run a real grow op, a meeting-room sensor fleet, or a small enrichment setup and keep informal records.

Commercial — Senseair / NDIR Modbus probe ($120–400). Now you're buying the enclosure and interface: an IP-rated probe, RS-485 Modbus RTU so you can multi-drop several across a facility on one cable run, field calibration against reference gas, and better temperature stability. Stop here if you have multiple zones, long runs, or a wash-down/dusty environment.

Hardened industrial — Vaisala GMP252 (CARBOCAP, $600–1000+). ±(40 ppm + 2%), excellent long-term stability, single-beam dual-wavelength compensation, analog and Modbus options, and the reason people pay for it: traceable calibration certificates that satisfy research, GxP, and metrology auditors. You need this tier if a regulator or customer will ask to see the cal cert.

Interface & wiring notes (per tier)

  • MH-Z19 (UART / PWM): 5 V supply, 3.3 V logic on TX; read at 9600 baud over a Pi UART, or decode the PWM duty cycle on a GPIO. Give it a 3-minute warm-up and disable ABC for enrichment.
  • SCD41 / SCD30 (I²C): SDA/SCL + pull-ups; SCD30 is a current-hungry part, so don't starve the bus supply. Write the ambient-pressure compensation register for your altitude, and call stopPeriodicMeasurement before disabling ASC.
  • Modbus RS-485 probe: A/B differential pair + ground, 120 Ω termination at the ends, multi-drop up to 32 nodes; needs a USB-RS485 or HAT on the Pi.
  • Vaisala / analog 4-20 mA: loop-powered and immune to voltage drop over long runs; read through an ADC or a 4-20 mA HAT. Probe heads are field-swappable with pre-stored calibration.

A note on fakes: marketplace clones of the SCD30/SCD41 are common and routinely miss spec. Buy genuine Sensirion, Winsen, or Vaisala from authorised distributors (DigiKey, Mouser, Adafruit, Sensirion direct) when the number matters.

How LoopString reads every tier — in one dashboard

Here's the part that makes the whole ladder moot from a software standpoint: a Raspberry Pi running LoopString's Node-RED templates reads a $25 MH-Z19 over UART and a $700 Vaisala probe over Modbus into the exact same dashboard — same live telemetry, same threshold alerts, same compliance log. You can prototype enrichment control on an SCD41 and swap in an industrial probe for production without touching your dashboards, alerts, or history. Pick the sensor tier your job actually needs using the table above, wire it to a Pi, and see it live in minutes at app.loopstring.io.

Useful next reads: the greenhouse monitoring use case, the Raspberry Pi automation guide, and the MQTT sensor dashboard overview.