Skip to the content
4 layers66 × 36 mmGas sensor, the printed circuit board in 3D

A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the…

Size
66 × 36 mm
Copper layers
4
Thickness
1.6 mm
Parts
81
Nets
74
Pads
321
Tracks, vias
729, 148
Pours
6
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
2 Jun 2026
Updated
22 Oct 2026

Overview

Gas sensor is an open-source printed circuit board by JamesTwallin, from the JamesTwallin/gas_sensor repository on GitHub, published under the MIT licence. It is a 4-layer board of 66 × 36 mm with 81 parts on 74 nets, routed with 729 tracks and 148 vias.

It is built around the ESP32-S3-MINI-1-N8, ADS1115IDGSR and SHT40-AD1B-R2, with the AP2112K-3.3, BQ24073RGTR and USBLC6-2SC6 among its other parts. Its parts include 31 resistors, 23 capacitors, 8 ICs, 5 switches and 4 connectors. It belongs with the sensors and measurement boards and the ESP32 boards of this library.

Main components

10

README

archive/air_blade_first_batch/README.md

Air blade (rev A)

A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the outside air level with the gas sensors' caps. It carries:

  • an outside-air temperature/humidity sensor (SHT40-CD1B, I²C address 0x46; an SHT40-BD1B at 0x45 works too, but never an -AD1B, which clashes with rev E's own). Rev E's own SHT40 (0x44) sits inside the case and reads the case air, warmed by the gas sensors' heaters; this one reads the street;
  • the heated airflow thermistor (a 1 kΩ NTC). Moving air cools it; the firmware turns that into an airflow index for the gas detector (docs/HARDWARE.md section 1). The SHT40 beside it gives it the air temperature it needs.

top

Status: designed, not built. The board passes KiCad's checks (no design-rule errors, nothing unconnected, schematic and board in agreement).

Shape

5.7 × 14.9 mm, 2 layers, 1.0 mm thick.

  • Tip: two prongs, 1 mm apart. The SHT40 and its capacitor are on one, the heated thermistor on the other, so the thermistor's warmth (2.7 mW) does not reach the SHT40. The gap runs down to just below the case face.
  • Foot: five pads on the front face, just above two small shoulders. The shoulders rest on rev E's top surface; below them a tab drops into rev E's notch.
  • No copper pours, and thin (0.15 mm) tracks: copper would carry the thermistor's heat away and blunt the airflow signal.
Foot padNetRev E J3 pad
1heated thermistor1
2GND2
33.3 V3
4SCL4
5SDA5

Parts

All three are assembled by JLC (LCSC numbers in production/bom.csv):

RefPartLCSCWhat it does
U1Sensirion SHT40-CD1B-R3C7461852outside-air temperature and humidity, I²C 0x46
C1100 nF 0402C1525U1's supply decoupling
RT1Murata NCP18XQ102J03RB, 1 kΩ NTC, 0603, B 3650 KC152577heated airflow thermistor, fed 2.7 mW through rev E's R28 (1 kΩ)

Ordering from JLCPCB

The blade is too small for JLC to assemble on its own, and JLC's own panel option ("Panel by JLCPCB") only does V-cut, which can't follow the forked tip or the shoulders. So order the ready-made panel in production/panel/: 6 blades in a 35 × 46 mm frame, with tooling holes and alignment marks for the assembly machine.

panel

  1. PCB: upload production/panel/gerbers.zip. 2 layers, 1.0 mm thick. Leave Delivery Format at "Single PCB": the file already is the panel, so the quantity counts panels (minimum 5 = 30 blades of bare board). 0.15 mm track and clearance, 0.45 mm vias with a 0.2 mm drill. Two of the vias sit in C1's pads: choose JLC's filled and capped via-in-pad option, as for rev E.
  2. Assembly: top side only, production/panel/bom.csv and production/panel/cpl.csv. Assemble 2 panels (JLC's minimum) = 12 blades. Look over JLC's placement preview, especially each U1's pin-1 corner (positions matched to LCSC's footprints by gen/jlc_align.py).
  3. Breaking out: each blade hangs on two small tabs of drilled holes on its long sides, below the fork. Bend each blade out with pliers, then file the two nubs flush so the blade slides through the case slot. The tips, the slot and the foot have no tabs, so they need no filing.

production/gerbers.zip, bom.csv and cpl.csv (one blade) are kept for reference.

Fitting it to rev E

  1. Tin rev E's J3 pads (the five pads beside the notch between the cans, labelled BLADE) and the blade's five foot pads.
  2. Put the blade's tab into the notch, parts facing the middle of rev E (the foot pads facing J3), with the shoulders flat on the board.
  3. Check it stands square, then solder each foot pad to its J3 pad with a fillet of solder across the corner. Pad 1 is the one nearest the CH4 can.
  4. Fit the board into the rev E front shell (hardware/enclosure, stl/reve_v2_front.stl) straight down, not tilted: the blade slides into a guide on the inside of the face and out through the slot between the sensor collars. The guide holds it over 5.8 mm, so knocks on the tip go into the case, not the solder joint.

Firmware

Nothing to set: the rev E firmware (pio run -d firmware/phone_board -e phone_board_reve) looks for an SHT40 at 0x45, then 0x46, at start-up. When it finds one, that supplies the temperature and humidity (to the phone and to the gas detector), the on-board SHT40 is logged as case_temp_c / case_rh_pct on USB serial, and the Info JSON says "t_src":2. Then run the still-air calibration (docs/HARDWARE.md section 1.6).

The design is generated

As for rev E: edit gen/design.py, then

StepCommand
schematicpython gen/build_sch.py
board (placed and routed: every track is in design.py)"C:\Program Files\KiCad\9.0\bin\python.exe" gen/build_pcb.py
JLC placement...\python.exe gen/jlc_align.py
fab files + renderspython gen/export.py
6-up panel for ordering (needs pip install kikit in KiCad's python)...\python.exe gen/build_panel.py

Checks: kicad-cli pcb drc --schematic-parity air_blade.kicad_pcb and kicad-cli sch erc air_blade.kicad_sch. Last run (2026-10-10): 0 violations, 0 unconnected, 0 parity issues; ERC 0 errors, 0 warnings.

Not known yet

  • How much the thermistor self-heats on the blade (an estimate is about 1 °C: some of its heat goes into the blade, not the air), and how strongly its reading follows airflow. The still-air calibration and the airflow survey in docs/PROTOCOL.md measure both.
  • Whether the right-angle solder joint is strong enough for a fleet (the case guide takes side loads; a dab of epoxy along the shoulders would add more).

Parts

81
QtyValueFootprintReferences
11100nFCapacitor_SMD:C_0402_1005MetricC9, C11, C12, C13, C14, C15, C20, C23, C24, C26, C27
7100kResistor_SMD:R_0402_1005MetricR9, R10, R15, R16, R26, R33, R34
610kResistor_SMD:R_0402_1005MetricR3, R6, R7, R11, R12, R19
510uFCapacitor_SMD:C_0603_1608MetricC2, C3, C4, C5, C8
420kResistor_SMD:R_0402_1005MetricR20, R21, R23, R24
422uFCapacitor_SMD:C_0805_2012MetricC6, C7, C28, C29
31MResistor_SMD:R_0402_1005MetricR13, R14, R27
20.5Resistor_SMD:R_0603_1608MetricR22, R25
21kResistor_SMD:R_0402_1005MetricR28, R30
21uFCapacitor_SMD:C_0402_1005MetricC10, C16
24.7kResistor_SMD:R_0402_1005MetricR17, R18
25.1kResistor_SMD:R_0402_1005MetricR1, R2
2ADS1115IDGSRPackage_SO:MSOP-10_3x3mm_P0.5mmU6, U8
2M2MountingHole:MountingHole_2.2mm_M2H1, H2
1+3V3TestPoint:TestPoint_Pad_D1.0mmTP4
11.5kResistor_SMD:R_0402_1005MetricR4
11.8kResistor_SMD:R_0402_1005MetricR5
110uFCapacitor_SMD:C_0805_2012MetricC1
11uHInductor_SMD:L_Sunlord_SWPA4030SL1
1732kResistor_SMD:R_0402_1005MetricR8
1AIR BLADEphone_board:BladeSocket_1x05_P1.0mmJ3
1AO3401APackage_TO_SOT_SMD:SOT-23Q1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U3
1AUXConnector_PinHeader_1.27mm:PinHeader_1x06_P1.27mm_VerticalJ4
1BOOTButton_Switch_SMD:SW_Push_1P1T_XKB_TS-1187ASW3
1BQ24073RGTRPackage_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mmU2
1ESP32-S3-MINI-1-N8RF_Module:ESP32-S2-MINI-1U5
1GNDTestPoint:TestPoint_Pad_D1.0mmTP3
1LiPo 1SConnector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_HorizontalJ2
1POWERButton_Switch_SMD:SW_SPDT_Shouhan_MSK12C02SW1
1RESETButton_Switch_SMD:SW_Push_1P1T_XKB_TS-1187ASW2
1RXD0TestPoint:TestPoint_Pad_D1.0mmTP2
1SHT40-AD1BSensor_Humidity:Sensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPadU7
1TGS2610-D00Package_TO_SOT_THT:TO-5-4S2
1TGS2611-E00Package_TO_SOT_THT:TO-5-4S1
1TPS61023DRLRPackage_TO_SOT_SMD:SOT-563U4
1TXD0TestPoint:TestPoint_Pad_D1.0mmTP1
1TYPE-C-31-M-12Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U1
1VBATTestPoint:TestPoint_Pad_D1.0mmTP5
1WS2812B-2020LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mmD1

More from JamesTwallin/gas_sensor

4
  • 2 layers48.6 × 70.9 mmCarrier board, the printed circuit board in 3D

    Carrier board

    JamesTwallin/gas_sensor

    A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the…

    12 parts7MIT
  • 2 layers11.4 × 18.4 mmMems blade, the printed circuit board in 3D

    Mems blade

    JamesTwallin/gas_sensor

    A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the…

    11 parts7MIT
  • 2 layers5.7 × 14.9 mmAir blade, the printed circuit board in 3D

    Air blade

    JamesTwallin/gas_sensor

    A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the…

    4 parts7MIT
  • 2 layers5.7 × 14.9 mmAir blade, the printed circuit board in 3D

    Air blade

    JamesTwallin/gas_sensor

    A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the…

    4 parts7MIT

Similar boards

  • 4 layersSensei puck, the printed circuit board in 3D

    Sensei puck

    PaoloJN/sensei-puck

    Drop-in BLE water sensor puck. College proof of concept, archived before the first board order.

    122 parts
  • 2 layers64 × 46 mmWeatherframe, the printed circuit board in 3D

    Weatherframe

    amselgesang/weatherframe_v01

    My weather station hardver

    50 partsMIT
  • 2 layers33 × 85 mmGL868 ESP32V3.1, the printed circuit board in 3D

    GL868 ESP32V3.1

    RamRamAndroid/GeoTinker-CodeMatrix

    The GeoTinker GL868_ESP32 is a production-ready, open-source development board that combines an ESP32-S3 and SIM868 GSM modem, with GPS Tracking, motion detection, battery management, wireless connectivity…

    79 partsGPL-3.0
  • 4 layers95 × 55 mmGalvanik, the printed circuit board in 3D

    Galvanik

    viridivn/galvanik

    OSHW galvanic hair electrolysis device

    103 parts2
  • 2 layersMain PCB 002, the printed circuit board in 3D

    Main PCB 002

    ZoAndr/BANO4

    OnBoard Aviation Navigation Lights

    130 parts
  • 6 layers90.1 × 135 mmHandheld, the printed circuit board in 3D

    Handheld

    gamebub/gamebub-pcb

    PCB design files for the Game Bub project

    359 parts31CERN-OHL-S-2.0
  • 4 layers68 × 60 mmRoboCore V2, the printed circuit board in 3D

    RoboCore V2

    Plastal-Bot-Builders/RoboCoreDocumentation

    RoboCore is a classroom robot kit and coding platform, designed and built in Zambia by Plastal-Bot Builders (Lusaka).

    146 partsMIT
  • 4 layers90 × 50 mmCryobelt, the printed circuit board in 3D

    Cryobelt

    michael201110/cryobelt

    100 parts1

Questions

How big is the Gas sensor PCB?

It measures 66 × 36 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Gas sensor use?

81 parts, built around the ESP32-S3-MINI-1-N8, ADS1115IDGSR, SHT40-AD1B-R2 and AP2112K-3.3. 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 Gas sensor KiCad files?

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

Can I use the Gas sensor design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).