Skip to the content
PCBKitNew board
6 layers65.3 × 57.8 mmLayercam pro, the printed circuit board in 3D

Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

Size
65.3 × 57.8 mm
Copper layers
6
Thickness
1.6 mm
Parts
189
Nets
100
Pads
669
Tracks, vias
1,683, 568
Pours
18
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Aug 2026
Updated
6 Nov 2026

Overview

Layercam pro is an open-source printed circuit board by offgridevices, from the offgridevices/offgrid-hardware repository on GitHub, published under the CERN-OHL-S-2.0 licence. It is a 6-layer board of 65.3 × 57.8 mm with 189 parts on 100 nets, routed with 1,683 tracks and 568 vias.

It is built around the RV1106G3, ESP32-C6-MINI-1U-H4 and TLV62569DBV, with the DRV8210PDSG, TEMT6000X01 and EA3036CQBR among its other parts. Its parts include 90 capacitors, 53 resistors, 10 ICs, 8 diodes and 8 inductors. It belongs with the ESP32 and RISC-V boards of this library.

Main components

9

README

products/canary/README.md

Canary — first-vent detector for lithium batteries

Canary v1

Status: designed and verified in simulation, not yet built. Every gate below passes on this revision; no board has been assembled or powered yet.

Revisions

This folder always holds the latest revision; an ordered revision stays at its order tag (docs/versioning.md).

RevisionWhat changedStatusOrder tag
1.0first design: SGP40 + SCD41 + SHT40 + NTC tab, ATmega328P, 100 dB sounder, 60 × 40 mm, 2 layersdesigned and simulation-verified, not yet built—

What it is

A 60 × 40 mm board you put next to (or on) an e-bike or scooter battery while it charges. It watches for the first vent — the moment a failing cell boils off electrolyte as solvent vapour and CO₂ — which comes before self-heating, thermal runaway and smoke. A smoke alarm reacts at the end of that chain; Canary is built to react near its start.

Grid storage and EV packs already carry off-gas detectors (Honeywell BES, Li-ion Tamer). The battery charging in a hallway has nothing. Canary is that detector as an open, cheap, USB-powered board you can order fully assembled.

It fuses three kinds of evidence and needs two at once to alarm:

EvidenceSensorFires onAlone it means
GasSensirion SGP40 MOX (on the isolated sensor head)raw signal ≥ 700 ticks below its learned clean-air baseline (strong ≥ 2500)WARN (cleaning spray, solvents)
CO₂Sensirion SCD41 photoacousticrise ≥ 250 ppm/min or ≥ 1500 ppm over baseline (strong ≥ 1200 ppm/min or ≥ 4000 ppm)WARN (someone breathing on it)
HeatNTC on the thermal tab (or remote probe)≥ 50 °C, or ≥ 1 °C/min above 35 °C (strong: ≥ 65 °C, or ≥ 3 °C/min above 30 °C)WARN; strong heat alone → ALARM

ALARM = gas and CO₂ (one strong), or heat and any gas evidence, or strong heat alone; held 3 s before it sounds, latched for at least 60 s. Outputs: green breathing (watching), amber (one kind of evidence), red flashing + 100 dB 4 kHz sounder in the smoke-alarm T3 pattern. The button self-tests in normal state and hushes for 2 minutes in alarm — the hush ends early if the evidence gets worse.

Product video: a narrated 4-minute explainer, built by video/ and published rather than committed (video/README.md).

The real firmware, on a simulated ATmega328P with virtual sensors, catching a vent at 400 s (alarm 7.6 s later) — sim/hil/:

vent scenario

Requirements, and whether they are met

RequirementHow it is checkedMet?
Order from PCBWay, arrive assembled and workingGerbers + PCBWay BOM + CPL + firmware HEX in production/; all parts on top; every part has an MPNYes (files); hardware not yet built
Parts in production todayDistributor check 2026-10-14, docs/sourcing-2026-10-14.mdYes — one NRND part replaced (NTC)
Latest KiCadKiCad 10.0.6 (kicad/kicad:10.0.6-full), current stableYes
Schematic cleankicad-cli sch erc: 0 violationsYes
Board clean, fab's limitskicad-cli pcb drc --schematic-parity --severity-all: 0 errors, 0 warnings, 0 unconnected against PCBWay 2-layer limits (with margin)Yes
Clean copper, wide enough for its currentcheck_geometry.py: no corner sharper than 45° (the router's six right angles mitered by miter.py); every power track ≥ 2.4× its IPC-2221 width at a 10 °C riseYes
Schematic = circuit = board = firmwarecheck_netlist.py (27 nets, 0 mismatches), DRC parity, check_pins.py (11 pins, 0 mismatches)Yes
Detects a vent within seconds, ignores single-cause eventsHIL simulation of the real firmware: vent → ALARM in 7.6 s; spray, breath → no alarm; still detecting after 100 min of charging; 65/65 checks across 9 scenariosYes, in simulation
Sounder driver safengspice: drain clamped at 5.4 V on 5 V, clamp diode ≤ 0.34 A, VBUS dip ≥ 4.95 V, for 0.5–4 mH coilsYes
Pack temperature good enough at the thresholdsTolerance stack-up: ≤ 1.24 °C worst case at 65 °C; rate quantum 0.2 °C/minYes
Runs from any USB charger23.5 mA watching, ~520 mA worst-case peak in alarmYes (≤ 900 mA)

How to order (PCBWay, fully assembled)

  1. PCB: upload production/canary-gerbers.zip.
    • 2 layers, FR-4, 1.6 mm, 60 × 40 mm, 1 design
    • Min track/spacing 6/6 mil (the design's tightest gap is 0.2 mm), min hole 0.3 mm
    • Solder mask yellow, silkscreen black (white is fine if black is not offered on yellow)
    • Surface finish ENIG (fine-pitch DFN sensors)
    • The board has three internal routed slots (1.0 mm wide): they are intended, not errors.
  2. Assembly: turnkey, top side only, 43 placements / 27 unique parts.
    • BOM: production/canary-bom-pcbway.csv (MPN, maker, LCSC # for reference, notes)
    • Centroid: production/canary-cpl.csv; drawing: production/canary-assembly.pdf
    • J1 (USB-C) has four plated shell slots — pin-in-paste/hand-solder as PCBWay prefers.
    • Sensirion parts (U3 SGP40, U4 SHT40, U5 SCD41): no washing, no conformal coating.
  3. Programming (PCBWay offers it; ask in the order notes): flash production/canary.hex to U2 (ATmega328P) through the Tag-Connect TC2030 pads (J2, standard 6-pin AVR ISP pinout), with fuses lfuse 0xE2, hfuse 0xD9, efuse 0xFD (internal 8 MHz, no clock divider, brown-out 2.7 V). To do it yourself: a USBasp + TC2030-IDC-NL cable, then make -C firmware flash.

Case

enclosure/print/canary-v1-bumper.stl is an optional printed frame (PLA/PETG, no supports, 64 × 44 × 5 mm). The board presses in from below; its underside stays flush with the frame's so the thermal tab still lies on the pack, and the USB-C, probe connector and the sensor head's air path stay open.

bumper

Bring-up

  1. Plug a USB-C cable from any phone charger. Green blinks for 90 s (gas sensor warm-up), then breathes slowly.
  2. Press TEST/HUSH: green, amber, red sweep, a short beep, and the SGP40 self-test runs. A fault shows as an amber double blink with a chirp every minute.
  3. Telemetry: TXD pad, 3.3 V, 38400 8N1, one line a second (t= st= tp= ... sraw= co2= rate= dtdt= e= f=).
  4. Use: lay the board on the pack with the thermal tab touching it (or plug a 10 kΩ B3950 NTC probe into the JST-PH and tape it to the pack), the sensor head ("AIR IN") facing the air above the pack.

Limits — read these

  • Not a certified safety device. Keep your smoke alarm.
  • The thresholds are not yet validated against a real venting cell. The simulated worlds use stated assumptions (SGP40 drop of thousands of ticks, CO₂ rising by thousands of ppm within a minute, accelerating self-heating), based on how first vent is described for commercial off-gas detectors. A real abuse test (a cell vented beside the board, in a safe facility) is the next step, and the thresholds in firmware/src/detect.h may move.
  • No battery backup: if the outlet loses power, Canary is off.
  • Placement matters: the gas and CO₂ sensors need the vent plume to reach them; inside a closed bag or a frame with no airflow, use the probe and expect slower gas detection.
  • The ATmega328P has no USB: firmware updates need an ISP programmer.
  • 3D models for SGP40, SHT40, SCD41, the sounder and the JST connector are simple dimensioned boxes made by src/models3d.py (KiCad 10.0.6 ships none).

Files

PathWhat
production/Gerber zip, PCBWay BOM, CPL, netlist, assembly + schematic PDFs, firmware HEX
canary.kicad_sch, canary.kicad_pcb, canary.kicad_proKiCad 10 design (generated)
src/the design source: circuit.py (every part and net), schematic.py, board.py, miter.py, finish.py, fab.py, checks
firmware/AVR C firmware (detect.c is the detector logic)
sim/hil/simavr hardware-in-the-loop harness + scenarios
sim/spice/, sim/analysis/sounder driver SPICE, NTC/power/I²C analyses
video/the scripts that build the narrated product video (the MP4 is published, not committed)
web/the interactive bench page (build_page.py → one HTML file); its detector is a port of detect.c checked equal to the firmware second by second
mechanical/STEP model (zipped)
enclosure/3D-printable bumper: bumper.scad, and print/canary-v1-bumper.stl
TESTS.md, docs/decisions.mdevery test with results; the trade-offs

How to build

Needs docker (kicad/kicad:10.0.6-full), Java + xvfb (Freerouting 1.9.0 at /opt/fr/freerouting-1.9.0.jar or FREEROUTING_JAR), avr-gcc, Python 3.

sh
python3 src/make.py                 # schematic, ERC, netlist gate, place, route, DRC gate, fab
python3 src/make.py sch finish fab  # without re-routing (the routed board in out/ is reused)
make -C firmware                    # firmware only
cd sim/hil && gcc -O2 -I<simavr>/simavr/sim ... && python3 scenarios.py   # see sim/hil/README.md

Routing is done by Freerouting and is not bit-for-bit repeatable, so the committed canary.kicad_pcb is the design of record: CI rebuilds the fab outputs from it and checks they match what is committed.

Parts

189
QtyValueFootprintReferences
36100nFC_0402_1005MetricC3, C4, C24, C25, C26, C27, C28, C29, C36, C37, C38, C42, C43, C44, C46, C47 +20
1510uFC_0603_1608MetricC1, C2, C5, C8, C9, C10, C21, C33, C34, C35, C40, C41, C53, C87, C89
151uFC_0402_1005MetricC11, C30, C31, C32, C39, C45, C55, C57, C61, C69, C73, C74, C75, C78, C85
1110kR_0402_1005MetricR1, R23, R27, R28, R30, R31, R33, R34, R35, R36, R37
10100kR_0402_1005MetricR4, R5, R7, R10, R12, R13, R29, R43, R44, R46
822uFC_0603_1608MetricC7, C15, C16, C18, C20, C22, C23, C70
8TPPAD_TPTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8
6850nmLED_PLCC2_VSMY3850D2, D3, D4, D5, D6, D7
418pFC_0402_1005MetricC62, C63, C64, C65
41kR_0402_1005MetricR22, R25, R38, R47
422RR_0402_1005MetricR20, R26, R32, R40
4HOLE_M2MOUNT_M2H1, H2, H3, H4
31.5uHIND-SMD_L2.5-W2.0L2, L3, L4
3100RR_0402_1005MetricR19, R24, R45
3120R@100MHzL_0402_1005MetricL6, L7, L8
31RR_0402_1005MetricR15, R16, R39
3220pFC_0402_1005MetricC14, C17, C19
347RR_1206_3216MetricR90, R91, R92
22.2uFC_0402_1005MetricC83, C84
22.2uHIND-SMD_L2.5-W2.0L1, L5
2200kR_0402_1005MetricR6, R11
222.6kR_0402_1005MetricR8, R14
24.7kR_0402_1005MetricR41, R42
24.7uFC_0402_1005MetricC58, C80
25.1kR_0402_1005MetricR49, R50
2HOLE_M1V6MOUNT_M1V6H5, H6
2TLV62569SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BRU2, U4
110nFC_0402_1005MetricC66
1127kR_0402_1005MetricR9
118kR_0402_1005MetricR2
11MR_0402_1005MetricR21
11nFC_0402_1005MetricC67
12.8VWSON-6_L2.0-W2.0-P0.65-BL-EPU9
122kR_0402_1005MetricR48
1240RR_0402_1005MetricR18
124MHzCRYSTAL-SMD_4P-L3.2-W2.5-BLY1
132.768kHzFC-135R_L3.2-W1.5Y2
1330nFC_0402_1005MetricC12
1470nFC_0402_1005MetricC13
151kR_0402_1005MetricR3
16.2kR_0402_1005MetricR17
16.8pFC_0402_1005MetricC6
1AO3400ASOT-23-3_L2.9-W1.3-P1.90-LS2.4-BRQ1
1DRV8210PWSON-8_L2.0-W2.0-P0.50-TL-EPU7
1EA3036CWQFN-20_L3.0-W3.0-P0.40-BL-EPU3
1ESP32-C6-MINI-1U-H4WIFIM-SMD_61P-L13.2-W12.5-P0.80U6
1IR-cutCONN-SMD_532610271J3
1RV1106G3QFN-128_L12.3-W12.3-P0.35-TL-EP7.0-1U1
1SC4336HCSP-35_L5.7-W3.7-P0.64-R5-C7-S0.58-TLU8
1SMF6.0CASOD-123FL_L2.8-W1.8-LS3.7-BID1
1TEMT6000SENSORS-SMD_TEMT6000X01Q2
1USB-CUSB-C_SMD-TYPE-C-31-M-12_1J1
1USBLC6-2SC6SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLU10
1W25N02KVWSON-8_L8.0-W6.0-P1.27-TL-EP-1U5
1greenLED0603-RDLED1

Questions

How big is the Layercam pro PCB?

It measures 65.3 × 57.8 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Layercam pro use?

189 parts, built around the RV1106G3, ESP32-C6-MINI-1U-H4, TLV62569DBV and DRV8210PDSG. 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 Layercam pro KiCad files?

From the offgridevices/offgrid-hardware repository on GitHub, at the commit this page was made from: the board is products/layercam/layercam-pro/layercam-pro.kicad_pcb and its schematic products/canary/canary.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Layercam pro design in my own project?

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

More from offgridevices/offgrid-hardware

10
  • 8 layers38 × 38 mmRidge3-lite, the printed circuit board in 3D

    Ridge3-lite

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    260 partsCERN-OHL-S-2.0
  • 6 layers91.6 × 50.6 mmSmokebreak, the printed circuit board in 3D

    Smokebreak

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    208 partsCERN-OHL-S-2.0
  • 8 layers36 × 36 mmRidge3-esc, the printed circuit board in 3D

    Ridge3-esc

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    193 partsCERN-OHL-S-2.0
  • 6 layers38 × 53.6 mmLayercam main, the printed circuit board in 3D

    Layercam main

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    168 partsCERN-OHL-S-2.0
  • 4 layers86 × 50 mmPrint hub, the printed circuit board in 3D

    Print hub

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    137 partsCERN-OHL-S-2.0
  • 6 layers36 × 36 mmRidge3-fc, the printed circuit board in 3D

    Ridge3-fc

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    124 partsCERN-OHL-S-2.0
  • 2 layers60 × 40 mmCanary, the printed circuit board in 3D

    Canary

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    52 partsCERN-OHL-S-2.0
  • 2 layers86 × 58 mmPacket logger carrier, the printed circuit board in 3D

    Packet logger carrier

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    22 partsCERN-OHL-S-2.0
  • 2 layers27.2 × 20.3 mmLayercam ring, the printed circuit board in 3D

    Layercam ring

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    11 partsCERN-OHL-S-2.0
  • 2 layers22 × 16 mmLayercam usb, the printed circuit board in 3D

    Layercam usb

    offgridevices/offgrid-hardware

    Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

    7 partsCERN-OHL-S-2.0

Similar boards

  • 4 layers117.5 × 30 mm4reel ee, the printed circuit board in 3D

    4reel ee

    o7-machinehum/4reel

    Stereo machine vision camera for outdoor mobile robotics.

    179 parts34MIT
  • 4 layers86 × 56 mmRv1106, the printed circuit board in 3D

    Rv1106

    EPSILON0-dev/Raven1106

    Raspberry Pi-style SBC based on the Rockchip RV1106G3

    217 parts4
  • 4 layers100 × 60 mmMicro stratux, the printed circuit board in 3D

    Micro stratux

    ciborg971/micro_stratux

    compact and self powered project stratux fork

    145 parts1
  • 4 layers50 × 50 mmEsp32p4, the printed circuit board in 3D

    Esp32p4

    PickaxeHit/esp32p4-devboard

    173 parts4GPL-3.0
  • 2 layers36 × 23 mmZigbee toy, the printed circuit board in 3D

    Zigbee toy

    cristianchelu/oddware

    Personal collection of projects that don't deserve their own repositories.

    73 parts2AGPL-3.0
  • 4 layers38.2 × 60.7 mmRoom Monitor C6, the printed circuit board in 3D

    Room Monitor C6

    AntoG00/ESP32-C6-CO2-Monitor

    Low-power CO2, temperature and humidity monitor using ESP32-C6 and E-Paper display.

    44 partsMIT
  • 4 layers114.6 × 70.2 mmPanelized-4layer, the printed circuit board in 3D

    Panelized-4layer

    openconcepts-ar/accel2d

    This project aims to provide a graphics server system based on hardware accelerated graphics, and a easy way to develop the graphics primitives.

    470 parts1
  • 4 layers33 × 77 mmELEC3885, the printed circuit board in 3D

    ELEC3885

    frankplow/ELEC3885

    A robust and lightweight helmet-mounted safety camera for cycling

    115 parts