Skip to the content
PCBKitNew board
6 layers38 × 53.6 mmLayercam main, the printed circuit board in 3D

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

Size
38 × 53.6 mm
Copper layers
6
Thickness
1.6 mm
Parts
168
Nets
94
Pads
600
Tracks, vias
1,976, 467
Pours
10
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Aug 2026
Updated
6 Nov 2026

Overview

Layercam main 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 38 × 53.6 mm with 168 parts on 94 nets, routed with 1,976 tracks and 467 vias.

It is built around the RV1106G3, AP6256 and TLV62569DBV, with the DRV8210PDSG, EA3036CQBR and AO3400A among its other parts. Its parts include 85 capacitors, 45 resistors, 9 inductors, 7 ICs and 5 connectors.

Main components

6

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

168
QtyValueFootprintReferences
32100nFC_0402_1005MetricC3, C4, C24, C25, C26, C27, C28, C29, C36, C37, C38, C42, C43, C44, C46, C47 +16
1610uFC_0603_1608MetricC1, C2, C5, C8, C9, C10, C21, C33, C34, C35, C40, C41, C53, C74, C78, C83
111uFC_0402_1005MetricC11, C30, C31, C32, C39, C45, C55, C57, C61, C69, C80
9100kR_0402_1005MetricR4, R5, R7, R10, R12, R13, R36, R37, R42
910kR_0402_1005MetricR1, R23, R27, R28, R30, R31, R32, R33, R34
822uFC_0603_1608MetricC7, C15, C16, C18, C20, C22, C23, C70
5TPPAD_TPTP1, TP2, TP3, TP4, TP5
418pFC_0402_1005MetricC62, C63, C64, C65
41kR_0402_1005MetricR22, R25, R35, R43
422RR_0402_1005MetricR20, R26, R29, R38
4HOLE_M2MOUNT_M2H1, H2, H3, H4
31.5uHIND-SMD_L2.5-W2.0L2, L3, L4
3100RR_0402_1005MetricR19, R24, R41
3120R@100MHzL_0402_1005MetricL7, L8, L9
3220pFC_0402_1005MetricC14, C17, C19
212pFC_0402_1005MetricC75, C76
21RR_0402_1005MetricR15, R16
22.2uHIND-SMD_L2.5-W2.0L1, L5
2200kR_0402_1005MetricR6, R11
24.7kR_0402_1005MetricR39, R40
24.7uFC_0402_1005MetricC58, C73
2DNP_C0402C_0402_1005MetricC90, C91
2HOLE_M1V6MOUNT_M1V6H5, H6
2SH 6CONN-SMD-6P-P1.00_BM06B-SRSS-TB-LF-SNJ1, J4
2TLV62569SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BRU2, U4
10RR_0402_1005MetricR90
110nFC_0402_1005MetricC66
1127kR_0402_1005MetricR9
118kR_0402_1005MetricR2
11MR_0402_1005MetricR21
11nFC_0402_1005MetricC67
120kR_0402_1005MetricR14
122.6kR_0402_1005MetricR8
122kR_0402_1005MetricR44
1240RR_0402_1005MetricR18
124MHzCRYSTAL-SMD_4P-L3.2-W2.5-BLY1
132.768kHzFC-135R_L3.2-W1.5Y2
132.768kHzTG-3541CEY4
1330nFC_0402_1005MetricC12
137.4MHzCRYSTAL-SMD_4P-L3.2-W2.5-BL_1Y3
14.7uHIND-SMD_L2.5-W2.0L6
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
1AP6256QFN-44_L12.0-W12.0-P0.90-TL_AP6256U6
1CAMFPC-SMD_20P-P0.50_XF2M-2015-1AJ2
1DRV8210PWSON-8_L2.0-W2.0-P0.50-TL-EPU7
1EA3036CWQFN-20_L3.0-W3.0-P0.40-BL-EPU3
1IR-cutCONN-SMD_532610271J3
1RV1106G3QFN-128_L12.3-W12.3-P0.35-TL-EP7.0-1U1
1U.FLRF-SMD_FRF05002-JSS103MJ5
1W25N02KVWSON-8_L8.0-W6.0-P1.27-TL-EP-1U5
1greenLED0603-RDLED1

Questions

How big is the Layercam main PCB?

It measures 38 × 53.6 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Layercam main use?

168 parts, built around the RV1106G3, AP6256, 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 main KiCad files?

From the offgridevices/offgrid-hardware repository on GitHub, at the commit this page was made from: the board is products/layercam/layercam/main/layercam-main.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 main 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 layers65.3 × 57.8 mmLayercam pro, the printed circuit board in 3D

    Layercam pro

    offgridevices/offgrid-hardware

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

    189 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
  • 8 layers50 × 50 mmH616 devboard, the printed circuit board in 3D

    H616 devboard

    Bogdan8266/h616-board

    8-layer Allwinner H616/618 SBC with DDR3, USB, Wi-Fi/BT and battery power support, designed for embedded Linux.

    161 parts4CERN-OHL-P-2.0
  • 2 layers118 × 67 mmColoryr, the printed circuit board in 3D

    Coloryr

    Coloryr/ColorAudio

    通用耳放,目前支持: - 音乐播放 - MP3音频解码,信息显示 - FLAC音频解码,信息显示 - 蓝牙音频播放 - SBC编码 - AAC编码 - aptx编码(freeaptx解码库) - USB音频播放 - UAC1 (最大96K 32bit,只能设置一种采样大小) - UAV2 (最大192K 32bit,支持多种采样大小)

    195 parts2GPL-3.0
  • 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
  • 2 layers88 × 115 mmBadge, the printed circuit board in 3D

    Badge

    endsummercamp/badge

    Per l'anno 2024 anche l'End Summer Camp si vuole dotare di un badge interattivo e programmabile, in linea con gli eventi simili internazionali.

    131 parts1CERN-OHL-P-2.0
  • 4 layers50 × 50 mmLFX FC R2, the printed circuit board in 3D

    LFX FC R2

    nguyencanhanh/luckfox-rv1103-drone

    AI quadcopter on one RV1103 (Luckfox Pico Mini B): Linux + RISC-V MCU flight loop, SITL with 3D pilot view, KiCad flight-controller board

    142 partsMIT