
Ridge3-lite
offgridevices/offgrid-hardware
Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.

Open hardware from OffGrid Devices. One folder per board. CERN-OHL-S.
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.

Status: designed and verified in simulation, not yet built. Every gate below passes on this revision; no board has been assembled or powered yet.
This folder always holds the latest revision; an ordered revision stays at
its order tag (docs/versioning.md).
| Revision | What changed | Status | Order tag |
|---|---|---|---|
| 1.0 | first design: SGP40 + SCD41 + SHT40 + NTC tab, ATmega328P, 100 dB sounder, 60 × 40 mm, 2 layers | designed and simulation-verified, not yet built | — |
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:
| Evidence | Sensor | Fires on | Alone it means |
|---|---|---|---|
| Gas | Sensirion 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 photoacoustic | rise ≥ 250 ppm/min or ≥ 1500 ppm over baseline (strong ≥ 1200 ppm/min or ≥ 4000 ppm) | WARN (someone breathing on it) |
| Heat | NTC 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/:

| Requirement | How it is checked | Met? |
|---|---|---|
| Order from PCBWay, arrive assembled and working | Gerbers + PCBWay BOM + CPL + firmware HEX in production/; all parts on top; every part has an MPN | Yes (files); hardware not yet built |
| Parts in production today | Distributor check 2026-10-14, docs/sourcing-2026-10-14.md | Yes — one NRND part replaced (NTC) |
| Latest KiCad | KiCad 10.0.6 (kicad/kicad:10.0.6-full), current stable | Yes |
| Schematic clean | kicad-cli sch erc: 0 violations | Yes |
| Board clean, fab's limits | kicad-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 current | check_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 rise | Yes |
| Schematic = circuit = board = firmware | check_netlist.py (27 nets, 0 mismatches), DRC parity, check_pins.py (11 pins, 0 mismatches) | Yes |
| Detects a vent within seconds, ignores single-cause events | HIL 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 scenarios | Yes, in simulation |
| Sounder driver safe | ngspice: drain clamped at 5.4 V on 5 V, clamp diode ≤ 0.34 A, VBUS dip ≥ 4.95 V, for 0.5–4 mH coils | Yes |
| Pack temperature good enough at the thresholds | Tolerance stack-up: ≤ 1.24 °C worst case at 65 °C; rate quantum 0.2 °C/min | Yes |
| Runs from any USB charger | 23.5 mA watching, ~520 mA worst-case peak in alarm | Yes (≤ 900 mA) |
production/canary-gerbers.zip.
production/canary-bom-pcbway.csv (MPN, maker, LCSC # for reference, notes)production/canary-cpl.csv; drawing: production/canary-assembly.pdfproduction/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.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.

t= st= tp= ... sraw= co2= rate= dtdt= e= f=).firmware/src/detect.h may move.src/models3d.py (KiCad 10.0.6 ships none).| Path | What |
|---|---|
production/ | Gerber zip, PCBWay BOM, CPL, netlist, assembly + schematic PDFs, firmware HEX |
canary.kicad_sch, canary.kicad_pcb, canary.kicad_pro | KiCad 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.md | every test with results; the trade-offs |
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.
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.mdRouting 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.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 32 | 100nF | C_0402_1005Metric | C3, C4, C24, C25, C26, C27, C28, C29, C36, C37, C38, C42, C43, C44, C46, C47 +16 |
| 16 | 10uF | C_0603_1608Metric | C1, C2, C5, C8, C9, C10, C21, C33, C34, C35, C40, C41, C53, C74, C78, C83 |
| 11 | 1uF | C_0402_1005Metric | C11, C30, C31, C32, C39, C45, C55, C57, C61, C69, C80 |
| 9 | 100k | R_0402_1005Metric | R4, R5, R7, R10, R12, R13, R36, R37, R42 |
| 9 | 10k | R_0402_1005Metric | R1, R23, R27, R28, R30, R31, R32, R33, R34 |
| 8 | 22uF | C_0603_1608Metric | C7, C15, C16, C18, C20, C22, C23, C70 |
| 5 | TP | PAD_TP | TP1, TP2, TP3, TP4, TP5 |
| 4 | 18pF | C_0402_1005Metric | C62, C63, C64, C65 |
| 4 | 1k | R_0402_1005Metric | R22, R25, R35, R43 |
| 4 | 22R | R_0402_1005Metric | R20, R26, R29, R38 |
| 4 | HOLE_M2 | MOUNT_M2 | H1, H2, H3, H4 |
| 3 | 1.5uH | IND-SMD_L2.5-W2.0 | L2, L3, L4 |
| 3 | 100R | R_0402_1005Metric | R19, R24, R41 |
| 3 | 120R@100MHz | L_0402_1005Metric | L7, L8, L9 |
| 3 | 220pF | C_0402_1005Metric | C14, C17, C19 |
| 2 | 12pF | C_0402_1005Metric | C75, C76 |
| 2 | 1R | R_0402_1005Metric | R15, R16 |
| 2 | 2.2uH | IND-SMD_L2.5-W2.0 | L1, L5 |
| 2 | 200k | R_0402_1005Metric | R6, R11 |
| 2 | 4.7k | R_0402_1005Metric | R39, R40 |
| 2 | 4.7uF | C_0402_1005Metric | C58, C73 |
| 2 | DNP_C0402 | C_0402_1005Metric | C90, C91 |
| 2 | HOLE_M1V6 | MOUNT_M1V6 | H5, H6 |
| 2 | SH 6 | CONN-SMD-6P-P1.00_BM06B-SRSS-TB-LF-SN | J1, J4 |
| 2 | TLV62569 | SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR | U2, U4 |
| 1 | 0R | R_0402_1005Metric | R90 |
| 1 | 10nF | C_0402_1005Metric | C66 |
| 1 | 127k | R_0402_1005Metric | R9 |
| 1 | 18k | R_0402_1005Metric | R2 |
| 1 | 1M | R_0402_1005Metric | R21 |
| 1 | 1nF | C_0402_1005Metric | C67 |
| 1 | 20k | R_0402_1005Metric | R14 |
| 1 | 22.6k | R_0402_1005Metric | R8 |
| 1 | 22k | R_0402_1005Metric | R44 |
| 1 | 240R | R_0402_1005Metric | R18 |
| 1 | 24MHz | CRYSTAL-SMD_4P-L3.2-W2.5-BL | Y1 |
| 1 | 32.768kHz | FC-135R_L3.2-W1.5 | Y2 |
| 1 | 32.768kHz | TG-3541CE | Y4 |
| 1 | 330nF | C_0402_1005Metric | C12 |
| 1 | 37.4MHz | CRYSTAL-SMD_4P-L3.2-W2.5-BL_1 | Y3 |
| 1 | 4.7uH | IND-SMD_L2.5-W2.0 | L6 |
| 1 | 470nF | C_0402_1005Metric | C13 |
| 1 | 51k | R_0402_1005Metric | R3 |
| 1 | 6.2k | R_0402_1005Metric | R17 |
| 1 | 6.8pF | C_0402_1005Metric | C6 |
| 1 | AO3400A | SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR | Q1 |
| 1 | AP6256 | QFN-44_L12.0-W12.0-P0.90-TL_AP6256 | U6 |
| 1 | CAM | FPC-SMD_20P-P0.50_XF2M-2015-1A | J2 |
| 1 | DRV8210P | WSON-8_L2.0-W2.0-P0.50-TL-EP | U7 |
| 1 | EA3036C | WQFN-20_L3.0-W3.0-P0.40-BL-EP | U3 |
| 1 | IR-cut | CONN-SMD_532610271 | J3 |
| 1 | RV1106G3 | QFN-128_L12.3-W12.3-P0.35-TL-EP7.0-1 | U1 |
| 1 | U.FL | RF-SMD_FRF05002-JSS103M | J5 |
| 1 | W25N02KV | WSON-8_L8.0-W6.0-P1.27-TL-EP-1 | U5 |
| 1 | green | LED0603-RD | LED1 |
It measures 38 × 53.6 mm and has 6 copper layers, 1.6 mm thick.
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.
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.
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).

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

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

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

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

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

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

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

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

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

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




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

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

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.

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.

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