May 10, 2026
Description
A Professional-Grade, Edge-Intelligent Air Quality Monitoring Node
From the moment I saw Tom's air sensor, I wanted to build one. Along the way, I found some room for improvement in the design. A full PCB and firmware redesign later here we are.
Most DIY sensors dump raw data to the cloud and hope for the best. Airnode is designed like a commercial IoT product: it fuses 9+ sensor modalities into a real-time environmental intelligence platform that computes, calibrates, and visualizes everything on-device. An air flow chamber for the sensors with a fan that gently draws air over the sensors. Built on a custom ESP32-S2 PCB with a production-ready color GUI, it demonstrates end-to-end embedded systems skills: analog signal conditioning, sensor fusion, statistical calibration, fault-tolerant architecture, and polished human-machine interface design.
Capability | Why It Matters |
|---|---|
Autonomous Gas Calibration Engine | MOS gas sensors drift over time. Airnode runs a finite-state machine that detects clean-air baselines using CO₂, VOC, PM₂.₅, and HCHO cross-references, then statistically validates stability (CV < 5 %) before auto-updating calibration constants. |
Temperature & Humidity Compensation | All raw gas resistance values are corrected against live T/RH references before AQI calculation, eliminating seasonal skew. |
Multi-Modal AQI at the Edge | Instead of exposing confusing raw voltages, Airnode computes EPA-style AQI scales (0–500) for three gas domains and surfaces a Composite AQI (worst-case wins) so you never miss a hazard. |
Fault-Tolerant Architecture | A 1-minute health watchdog monitors sensor validity. If critical channels fail for >5 minutes, the device auto-reboots to recover bus communication. |
Five-Screen Color Dashboard | A responsive 240×320 IPS Screen. Utilitarian UI with contextual color coding (green → red), brightness control, and hardware button navigation. |
Production IoT Stack | Offline first. Native ESPHome: captive portal, web server, and instant Home Assistant integration, if desired. |
Parameter | Sensor | Notes |
|---|---|---|
PM₁ / PM₂.₅ / PM₄ / PM₁₀ | Sensirion SEN55 | Laser scattering + VOC & NOₓ indices |
CO₂ | Sensirion SCD40 | Photoacoustic NDIR, self-calibrating |
Formaldehyde | Sensirion SFA30 | ppb-level HCHO detection |
VOCs / Odor | Figaro TGS2602 | MOS broad-range organics |
Solvents / Ethanol | Figaro TGS2620 | MOS alcohol & vapor sensitivity |
Reducing Gases (CO, H₂, NH₃) | MiCS-5524 | MOS reducing gas detector |
Temp / Humidity | Sensirion SH3X/SH4x | Reference for compensation algorithms |
Pressure | Bosch BMP280 | Barometric |
System Health | Fan tachometer | PWM fan RPM monitoring |
The hardest problem in gas sensing is baseline drift. Airnode solves this with a custom C++ lambda state machine:
Clean Air Gate — Every minute, the system verifies that:
CO₂ < 450 ppm
VOC index < 120
PM₂.₅ < 5 µg/m³
HCHO < 30 ppb
Stability Analysis — When air is clean, Rs values are accumulated. After 5+ minutes, the Coefficient of Variation (CV) is computed.
Guarded Update — Only if CV < 5 % is the Ro baseline updated via an exponential moving average (70 % new / 30 % old), bounded by physical sensor limits to prevent runaway.
Manual Override — A hardware button trigger forces the same validation pipeline, or resets accumulators for a fresh start.
A 2.4" ILI9341 TFT renders five contextual screens:
Screen 0: Overview — At-a-glance grid of Temp, Humidity, Pressure, CO₂, VOC, HCHO, PM1/2.5/10 with live color-coded thresholds.
Screen 1: Gas AQI Detail — Composite AQI bar, individual sensor AQIs, estimated PPM for CO, VOC, and Ethanol, and live Rs/Ro ratios.
Screen 2: Calibration — State machine status (warmup / clean-air countdown / last cal time), current Ro constants, and live Rs values.
Screen 3: Quick Guide — On-device reference for interpreting AQI scales and comfort ranges.
Screen 4: System Status — WiFi SSID/IP/signal, ESPHome version, MAC, uptime, free heap, and fan RPM.
Hardware Controls
Button 1 (Short Press): Cycle 6 PWM backlight levels (100 % → 12 %).
Button 1 (Long Press): Toggle backlight on/off.
Button 2: Cycle through the five screens.
Navigation Dots: Bottom-of-screen indicators show active page.
BOM / Instructions coming soon
License:
Creative Commons — Attribution — Noncommercial
8