Skip to the content
PCBKitNew board
2 layers45 × 95 mmAirquality, the printed circuit board in 3D

A battery-powered indoor air quality monitor. Real CO₂ from a photoacoustic sensor, VOC and NOx, temperature, humidity and ambient light, shown on a 2.13" e-paper display and sent over Bluetooth LE.

Size
45 × 95 mm
Copper layers
2
Thickness
1.6 mm
Parts
78
Nets
94
Pads
327
Tracks, vias
739, 117
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
24 Aug 2026
Updated
24 Aug 2026

Overview

Airquality is an open-source printed circuit board by MorgenWebDigital, from the MorgenWebDigital/airquality repository on GitHub. It is a 2-layer board of 45 × 95 mm with 78 parts on 94 nets, routed with 739 tracks and 117 vias.

It is built around the ESP32-C3-WROOM-02-N4, BH1750FVI-TR and CH224K, with the SCD40-D-R1, SGP41-D-R4 and SHT41-AD1B-R2 among its other parts. Its parts include 36 capacitors, 15 ICs, 14 resistors, 3 diodes and 2 transistors. It belongs with the sensors and measurement boards and the ESP32 and RISC-V boards of this library.

Main components

12

README

README.md

AirQuality

A battery-powered indoor air quality monitor. Real CO₂ from a photoacoustic sensor, VOC and NOx, temperature, humidity and ambient light, shown on a 2.13" e-paper display and sent over Bluetooth LE.

Two layers, 45 × 95 mm, 76 electrical components, one 21700 lithium cell.

frontback
frontback

1. What it measures

SensorMeasuresAccuracyI²C
SCD40CO₂, photoacoustic, a real measurement rather than an estimate±(50 ppm + 5 % of reading)0x62
SGP41VOC and NOx indexindex, not a concentration0x59
SHT41humidity and temperature±1.8 %RH, ±0.2 °C0x44
T117Ztemperature, the precision channel±0.1 °C, 16 bit0x48
BH1750ambient light1 lx resolution, 1–65535 lx0x23
MAX17048state of charge of the cell±1 %, no shunt needed0x36
BQ25895charger status and control-0x6A

Everything shares one I²C bus. The addresses do not collide.

The SCD40 is the only sensor that measures CO₂ directly. The SGP41 reports a VOC and a NOx index derived from a heated metal-oxide cell. That reads as "the air is getting stale", and is not comparable to a ppm figure.

schematic

The full schematic as a PDF is in docs/schematic.pdf.


2. How the power works

text
   USB-C ──▶ CH224K ──▶ VBUS ──▶ BQ25895 ──▶ SYS ──▶ XC6222 ──▶ 3.3 V
             requests            charger            LDO         MCU, sensors,
             9 V over PD                                        display
                                    │
                                    ▼
                                  21700 cell
                                    │
                              DW01A + FS8205A
                              cell protection

The CH224K negotiates 9 V over USB Power Delivery. At 9 V the charger draws about half the current it would at 5 V for the same charging power. Less loss in the cable, less heat. A 6.8 kΩ resistor on CFG1 selects the voltage; the value comes straight from the table in the CH224K datasheet.

The BQ25895 is a switching charger, not a linear one. It can deliver up to 5 A; the input current limit is set by a 250 Ω resistor to about 2.1 A. It also provides the power path, so the device runs from USB while charging.

The cell is a Molicel INR21700-P45B, which ships unprotected. DW01A with an FS8205A dual MOSFET adds over-charge, over-discharge and over-current protection. A 1 kΩ resistor sits between the DW01A's VM pin and the pack negative, as the datasheet's application circuit requires. Without it, plugging in a charger while the protection has tripped puts the full charger voltage on that pin with nothing to limit the current.

The XC6222 drops SYS to 3.3 V. Its CE pin is tied to SYS: the regulator is always on while the cell has charge. It cannot be switched off from the ESP32, because the ESP32 hangs on that same rail and could never switch it back on.


3. The display

A 2.13" e-paper panel (GDEY0213B74, SSD1680 controller) on a 24-pin 0.5 mm FPC connector. Bistable: it holds the image with no power at all, and only draws current while updating.

The panel needs gate and source rails well beyond 3.3 V. They are generated on the board, following the reference circuit in the panel's datasheet:

  • a boost converter produces VGH: a 47 µH inductor and an SI1308 MOSFET, driven by the panel's own GDR output with a 2.2 Ω sense resistor on RESE
  • a charge pump off the same switching node produces the negative VGL
  • the other rails (VSH1, VSH2, VSL, VCOM) come from the panel's internal regulators and only need decoupling

All seven capacitors on these rails are rated 25 V. That is not decoration: VGH runs above 20 V, and a standard 1 µF 0603 from the shelf is often a 6.3 or 16 V part.

BS1 is tied low, which selects 4-wire SPI, matching the SDA/SCL/CS/DC/RES wiring used here.

Update budget. The panel is rated for one million updates or five years, whichever comes first. At one update per minute the update budget is gone in under two years; at three minutes and longer, the five-year limit is reached first. Redrawing no more often than every three minutes, and only when a value actually changes, keeps the panel inside both limits.


4. Board details

Size45 × 95 mm
Layers2, 35 µm copper
Groundpour on the back, 3306 mm²
Minimum clearance0.2 mm
Minimum track0.2 mm
Vias0.6 mm pad, 0.3 mm drill

The ESP32 antenna sits at the board edge with a keep-out on both copper layers. Nothing is routed through it: no track, no via, no pour.

ESD protection on the USB data lines: a USBLC6-2SC6 sits 1.9 mm from the connector pads, with the signal routed through the device rather than branched off it, and a ground via right at its ground pad. Both matter more than they look: an ESD pulse rises in under a nanosecond, and every millimetre of track between the connector and the clamp adds roughly 35 V of overshoot that the ESP32 then sees.

U12 (SGP41) is marked do-not-populate. The footprint and routing are there; the part is left off in the current build. Fitting it later needs no board change.


5. Building one

Everything needed is in this repository.

Boards. production/AirQuality-gerber.zip goes straight to a fab house. Two layers, 1.6 mm, 35 µm copper, any standard process. The zip holds the Gerbers and the Excellon drill files.

Parts. production/AirQuality-bom.csv lists every component with its LCSC number where one exists. production/AirQuality-positions.csv is the pick-and-place file.

Datasheets for every active part are in datasheets/, named by LCSC part number.

Opening the design. KiCad 9. Open hardware/AirQuality.kicad_pro. All symbols, footprints and 3D models live in hardware/libraries/ and are referenced relatively, so the project opens from any location.

Mechanical. docs/AirQuality.step is the full board with all components, for enclosure design.


6. Design notes

Longer notes on why things are the way they are:


7. Verification

The board passes with no electrical findings:

text
   ERC                      0 errors, 0 warnings
   Unconnected pads         0
   Shorts                   0
   Clearance violations     0
   Schematic parity         0

Every integrated circuit has been checked pin by pin against its datasheet. Not against memory or a symbol's label, but against the document in datasheets/.

Remaining DRC output is silkscreen only: reference designators over copper and part outlines crossing the board edge at the connectors. Neither affects manufacture.


8. License

PolyForm Noncommercial 1.0.0. Any use is permitted except a commercial one.

Parts

78
QtyValueFootprintReferences
9100nFCapacitor_SMD:C_0603_1608MetricC14, C15, C17, C19, C20, C21, C22, C34, C35
610uFCapacitor_SMD:C_0603_1608MetricC7, C8, C9, C13, C18, C23
61uF/25VCapacitor_SMD:C_0603_1608MetricC24, C30, C31, C32, C33, C36
410kResistor_SMD:R_0603_1608MetricR3, R4, R7, R14
41uFCapacitor_SMD:C_0603_1608MetricC16, C25, C26, C27
31uCapacitor_SMD:C_0603_1608MetricC2, C11, C12
3MBR0530AirQuality:SOD-123_L2.8-W1.8-LS3.7-RDD1, D2, D3
2330Resistor_SMD:R_0603_1608MetricR5, R12
24,7uFCapacitor_SMD:C_0603_1608MetricC6, C29
24.7kResistor_SMD:R_0603_1608MetricR8, R9
2SK6812MINI-HSAirQuality:LED-SMD_4P-L3.5-W3.5-BR_SK6812MINI-HSU13, U14
2SW_PushAirQuality:SW-SMD_2P-TS24CASW1, SW2
10,1uFCapacitor_SMD:C_0603_1608MetricC10
11.5uHAirQuality:IND-SMD_L5.0-W5.0_SWPA5040SL1
110KResistor_SMD:R_0603_1608MetricR6
110uCapacitor_SMD:C_0603_1608MetricC1
110uF/16VCapacitor_SMD:C_0603_1608MetricC4
11MResistor_SMD:R_0603_1608MetricR10
11kResistor_SMD:R_0402_1005MetricR13
11uF/16VCapacitor_SMD:C_0603_1608MetricC3
12,2Resistor_SMD:R_0603_1608MetricR11
1250Resistor_SMD:R_0603_1608MetricR2
14,7uF/25VCapacitor_SMD:C_0603_1608MetricC28
147nFCapacitor_SMD:C_0603_1608MetricC5
147uHAirQuality:IND-SMD_L5.8-W5.2L2
16.8kResistor_SMD:R_0603_1608MetricR1
1AFC01-S24FCA-00AirQuality:FPC-SMD_24P-P0.50_AFC01-S24FCA-00FPC1
1BH-21700-B1BJ001AirQuality:BAT-SMD_L82.5.5-W25-BH-21700-B1BJ001U4
1BH1750FVI-TRAirQuality:WSOF-6_L2.6-W1.6-P0.50-TL-EPU11
1BQ25895RTWRAirQuality:QFN-24_L4.0-W4.0-P0.50-TL-EP2.7U2
1CH224KAirQuality:ESSOP-10_L4.9-W3.9-P1.0-LS6.0-TL-EPU1
1DW01A_C351410AirQuality:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLU3
1ESP32-C3-WROOM-02-N4AirQuality:BULETM-SMD_ESPRESSIF_ESP32-C3-WROOM-02-N4-4MBU6
1FS8205A_C908265AirQuality:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BRQ1
1MAX17048G+T10AirQuality:TDFN-8_L2.0-W2.0-P0.50-BL-EP1.2U7
1MWD_LogoAirQuality:MWD_LogoLOGO
1SCD40-D-R1AirQuality:LGA-20_L10.1-W10.1-P1.25-TLU8
1SGP41-D-R4AirQuality:DFN-6_L2.4-W2.4-P0.80-TL-EPU12
1SHT41-AD1B-R2AirQuality:DFN-4_L1.5-W1.5-SHT41-AD1B-R2U9
1SI1308EDL-T1-GE3AirQuality:SOT-323_L2.0-W1.3-P1.30-LS2.1-BRQ2
1T117ZAirQuality:TDFN-6_L2.0-W2.0-P0.65-TL-EPU10
1TYPE-C-2.0-16PIN-SMT-3AirQuality:TYPE-C-SMD_TYPE-CF3.1USB1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U15
1XC6222A331MR-GAirQuality:SOT-25-5_L2.9-W1.6-P0.95-LS2.8-BRU5
1https://github.com/MorgenWebDigitalMWD_QR_GitHubQR

Questions

How big is the Airquality PCB?

It measures 45 × 95 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Airquality use?

78 parts, built around the ESP32-C3-WROOM-02-N4, BH1750FVI-TR, CH224K and SCD40-D-R1. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Airquality KiCad files?

From the MorgenWebDigital/airquality repository on GitHub, at the commit this page was made from: the board is hardware/AirQuality.kicad_pcb and its schematic hardware/AirQuality.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Airquality design in my own project?

Its repository states no licence, so its author keeps all rights: ask MorgenWebDigital before reusing the design.

Similar boards

  • 2 layers40 × 40 mmAirqualitymini, the printed circuit board in 3D

    Airqualitymini

    MorgenWebDigital/airqualitymini

    A stationary indoor air quality sensor. Real CO₂, VOC and NOx, temperature and humidity. No display, no battery. Powered from USB-C, read out over Bluetooth LE.

    32 parts
  • 2 layers82 × 36.5 mmRoomSensor, the printed circuit board in 3D

    RoomSensor

    enwi/RoomSensor

    75 parts2
  • 4 layers60 × 60 mmUmmon, the printed circuit board in 3D

    Ummon

    JonaWe/ummon

    ummon (from German Umgebungsmonitor, "environment monitor") is an ESP32-C6 based environmental sensor board with USB-C power.

    95 parts
  • 2 layers88 × 82 mmTL Node Rev.0, the printed circuit board in 3D

    TL Node Rev.0

    00TLalu/TL-Node-Hardware

    PCB for OpenTANI

    72 parts
  • 4 layers60 × 130 mmParsnip, the printed circuit board in 3D

    Parsnip

    LimesKey/parsnip-node

    A portable LoRa communicator. Custom 4-layer PCB (ESP32-S3 + E22P-915M30S LoRa + NEO-M9N GNSS), designed in KiCad for 915 MHz.

    481 parts6
  • 4 layers122.3 × 96.1 mmCyclops, the printed circuit board in 3D

    Cyclops

    furbrain/Cyclops

    Photogrammetry with sensor fusion

    68 parts2