Skip to the content
PCBKitNew board
2 layers99.8 × 65 mmHandheldAerosolSensor, the printed circuit board in 3D

HandheldAerosolSensor

mrWheel/handheldAerosolSensor

This project describes a battery-powered, low-power air quality monitor

Size
99.8 × 65 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
45
Pads
131
Tracks, vias
279, 31
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
1 Feb 2026
Updated
13 Mar 2026

Overview

HandheldAerosolSensor is an open-source printed circuit board by mrWheel, from the mrWheel/handheldAerosolSensor repository on GitHub. It is a 2-layer board of 99.8 × 65 mm with 35 parts on 45 nets, routed with 279 tracks and 31 vias.

It is built around the PMS5003, SPS30 and BSS138, with the AO3401A and BH-18650-PC among its other parts. Its parts include 11 resistors, 6 connectors, 3 ICs, 3 transistors and 2 capacitors. It belongs with the ESP32 boards of this library.

Main components

5

README

README.md

Low-Power Air Quality Monitor (SPS30 + E-Paper)

Disclaimer

This software is developed incrementally. That means I have no clear idea how it works (though it mostly does).

If you have questions about this software, it will probably take you just as long to figure things out as it would take me. So I’d prefer that you investigate it yourself.

Having said that Don’t Even Think About Using It

Seriously. Don’t.

Building this design may injure or kill you during construction, burn your house down while in use, and then—just to be thorough—explode afterward.

This is not a joke. This project involves lethal voltages. If you are not a qualified electronics engineer, close this repository, step away from the soldering iron, and make yourself a cup of tea.

If you decide to ignore all of the above and build it anyway, you do so entirely at your own risk. You are fully responsible for taking proper safety precautions. I take zero responsibility for anything that happens—electrically, mechanically, chemically, spiritually, or otherwise.

Also, full disclosure: I am not a qualified electrical engineer. I provide no guarantees, no warranties, and absolutely no assurance that this design is correct, safe, or suitable for any purpose whatsoever.

What it is

This project is a battery-powered, low-power air quality monitor based on:

  • ESP32 DEVKIT V1
  • Sensirion SPS30 particulate matter sensor (I²C)
  • 1.54" black/white e‑paper display (200×200)
  • High-side power latch using a P‑channel MOSFET + 2N7000 or BSS138
  • Single-cell Li‑ion (18650) battery with DC/DC boost to 5 V

The system powers itself on with a button, performs a measurement cycle, updates the e‑paper display, and then fully powers itself off to achieve near-zero standby current.


Features

  • True hardware power-off (no sleep leakage)
  • SPS30 warm-up with countdown on e‑paper
  • Configurable number of measurement attempts
  • Only valid sensor samples are averaged
  • PM1.0 / PM2.5 / PM10 display
  • Simple air-quality classification (PM2.5 based)
  • Battery voltage and percentage display

Measurement Flow

  1. User presses power button
  2. Power latch engages
  3. E‑paper resets and shows status
  4. SPS30 starts measurement
  5. Warm-up delay (default: 15 s)
  6. Up to maxMetingen measurement attempts
    • Only valid samples are accumulated
  7. Average values are calculated
  8. Results are shown on the e‑paper
  9. SPS30 is stopped
  10. Power latch is released (device turns fully off)

Hardware Connections

ESP32 DevKit V1 - Pin mapping for AerosolSensor

ESP32 pinDEVKIT V1Standaard functieAerosolSensorOpmerking
25D25GPIO / DAC1GPIO_PIN_LATCHLatch control (OUTPUT)
33D33GPIO / ADC1_CH5 / TouchGPIO_PIN_SWITCHSwitch input (INPUT_PULLUP), non-strapping
34D34ADC1_CH6 (input-only)GPIO_PIN_BAT_ADCBattery ADC (input-only), ADC1 recommended
21D21I2C SDA (typical)GPIO_PIN_SPS30_SDASPS30 SDA
22D22I2C SCL (typical)GPIO_PIN_SPS30_SCLSPS30 SCL
16RX2Future Ext.GPIO_PIN_SPS_UART_RXSerial SPS module
17TX2Future Ext.GPIO_PIN_SPS_UART_TXSerial SPS module
23D23VSPI MOSI (typical)GPIO_PIN_EPD_MOSIE-paper DIN (MOSI)
-1n.c.n.v.t.GPIO_PIN_EPD_MISONot connected on display
18D18VSPI SCK (typical)GPIO_PIN_EPD_SCKE-paper CLK (SCK)
27D27GPIOGPIO_PIN_EPD_CSE-paper CS
19D19e-Paper DCGPIO_PIN_EPD_DCE-paper DC
13D13e-Paper RSTGPIO_PIN_EPD_RSTE-paper RST
32D32GPIO / ADC1_CH4 / TouchGPIO_PIN_EPD_BUSYE-paper BUSY (INPUT_PULLUP), non-strapping
14D14GPIO PWM TouchGPIO_PIN_BUZZER_PWMBuzzer

Battery Measurement

  • 100 kΩ / 100 kΩ divider from battery to D34
  • Optional 100 nF capacitor from D34 to GND

Software Stack

  • PlatformIO
  • Arduino framework
  • Libraries
    • GxEPD2
    • Adafruit GFX
    • Adafruit BMP280 Library
    • Adafruit Unified Sensor
    • Sensirion SPS30 (GitHub)
    • safeTimers

PlatformIO Configuration

ini
; platformio.ini
;
;— ESP32 + Arduino framework
;— Pin choices avoid ESP32 strapping pins (GPIO0,2,4,5,12,15) and flash pins (GPIO6–11).
;— Battery ADC uses ADC1 (GPIO34) so it keeps working even if WiFi were enabled.
;— SPI uses VSPI defaults for ESP32: MOSI=23, MISO=19, SCK=18.

[platformio]
workspace_dir = .pio.nosync
default_envs = esp32dev

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino

monitor_speed = 115200
upload_speed = 921600

;-- do NOT use 0, 2, 4, 5, 12, 15 (Strapping pins) or 6–11 (Flash pins)
build_flags =
  ;==================== Power & user input ====================
  ;— Power latch control (OUTPUT)
  -D GPIO_PIN_LATCH=25

Power Latch Notes

  • Upload firmware with stable power (USB directly)
  • During normal operation the latch cuts power completely
  • GPIO D25 must be set HIGH early in setup() to hold power

Customization

You can easily adjust:

  • warmupSeconds (e.g. 15 → 30)
  • maxMetingen (e.g. 5 → 10)
  • PM2.5 thresholds for status classification
  • Display layout and fonts

License

This project is intended for personal and educational use. You are free to modify and adapt it for your own hardware.


Notes

This design prioritizes:

  • Measurement correctness
  • Ultra-low standby power
  • Robust behavior on battery power

It is well suited for portable or infrequently-used air quality measurements where long battery life matters.

Parts

35
QtyValueFootprintReferences
6100kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR1, R3, R4, R5, R8, R9
5MountingHoleMountingHole:MountingHole_2.7mmH1, H2, H3, H4, H5
210R-220RResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR2, R6
210kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR10, R11
21N4148Diode_SMD:D_1206_3216Metric_Pad1.42x1.75mm_HandSolderD1, D2
2BSS138MyNewLibrary:BSS138Q102, Q103
10.1uFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC2
110uFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC1
11kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR7
1AO3401AMyNewLibrary:AO3401Q101
1BH-18650-PCMyNewLibrary:BAT_BH-18650-PCBT1
1BME/P280Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ4
1ESP32-DEVKIT-V1 30pinMyNewLibrary:MODULE_ESP32_DEVKIT_V1_30pinU3
1Ext.SwConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ5
1I2C 3v3Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ1
1Mini DC-DC ConvertorMyNewLibrary:Mini DC-DC Boost ConvertorU2
1PIEZOMyNewLibrary:XDCR_CPI-148-24-90T-67LS1
1PMS5003Connector_JST:JST_XH_B8B-XH-A_1x08_P2.50mm_VerticalJ6
1PWRButton_Switch_THT:SW_PUSH_6mm_H4.3mmSW1
1SPS30Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ3
1ePaperConnector_JST:JST_XH_B8B-XH-A_1x08_P2.50mm_VerticalJ2
1~MyNewLibrary:TP4056_USB-Charger_BoardU1

Questions

How big is the HandheldAerosolSensor PCB?

It measures 99.8 × 65 mm and has 2 copper layers, 1.6 mm thick.

What parts does the HandheldAerosolSensor use?

35 parts, built around the PMS5003, SPS30, BSS138 and AO3401A. 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 HandheldAerosolSensor KiCad files?

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

Can I use the HandheldAerosolSensor design in my own project?

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

Similar boards

  • 2 layers96 × 44 mmSoftPowerLatch, the printed circuit board in 3D

    SoftPowerLatch

    mrWheel/softPowerLatch

    A simple and efficient soft power latch circuit that allows a device to be switched on and off using a single push button, with ultra-low standby current.

    19 partsMIT
  • 2 layers112.9 × 49.1 mmBluetooth board, the printed circuit board in 3D

    Bluetooth board

    SirBramble/The-Macruwu-2.0

    The Macro universal word-typing unit

    45 parts1
  • 2 layers100 × 100 mmAir Quality Sensor, the printed circuit board in 3D

    Air Quality Sensor

    willem-pennings/Air-Quality-Sensor

    Design files for a Home Assistant-compatible air quality sensor/monitor

    17 parts12
  • 4 layers43.4 × 69 mmRespira fiware, the printed circuit board in 3D

    Respira fiware

    panStamp/respira_fiware

    Open FIWARE air monitoring device for urban applications

    12 parts7GPL-3.0
  • 2 layers80 × 60 mmKNX2HovalGateway, the printed circuit board in 3D

    KNX2HovalGateway

    Blizzard26/OAM-KNX2HovalGateway

    OpenKNX Application to connect KNX Bus to Hoval TopTronic Bus

    41 parts1
  • 2 layers152.4 × 63.5 mmHitteStress2023 pcb, the printed circuit board in 3D

    HitteStress2023 pcb

    TTNApeldoorn/aid-hittestress-2023

    Hittestres sensor for project Homerusstraat

    11 partsCC0-1.0
  • 2 layers92.5 × 86.5 mmSecondcansat, the printed circuit board in 3D

    Secondcansat

    UAH-Cansat2020-Valkyrie/PCB

    61 parts