
Mainboard reva
aliaksei-lameyka/ENKU-Clock
Open, repairable, local-first e-paper alarm clock.

My very first PCB: an ESP32-C6 temperature/humidity sensor prototype, exploring compact and thermally isolated layouts from one shared electrical design.
Env sensor b is an open-source printed circuit board by marcelpetrick, from the marcelpetrick/sensorly-unhinged repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 30 × 51 mm with 64 parts on 49 nets, routed with 309 tracks and 105 vias.
It is built around the ESP32-C6-MINI-1-N4, SHT45-AD1F-R2 and TPS62840DLCR, with the BQ24074RGTR and USBLC6-2SC6 among its other parts. Its parts include 22 resistors, 14 capacitors, 5 ICs, 2 connectors and 1 diode. It belongs with the sensors and measurement boards and the ESP32 and RISC-V boards of this library.
My very first PCB project: a battery-powered indoor temperature and humidity node, developed as one electrical platform in two physical implementations so that the cost of compactness can be measured instead of guessed.
Author: Marcel Petrick mail@marcelpetrick.it
License: GPLv3 or later. See LICENSE.
Note: project is generated with AI.
ESP32-C6-MINI-1 + SHT45-AD1F + BQ24074 + TPS62840
1S LiPo · USB-C · deep sleep · BLE provisioning · MQTT/TLS
|
+------------------------+------------------------+
| |
Variant A - Compact Variant B - Thermally isolated
30 × 34 mm, one rectangle 30 × 51 mm, milled sensor island
sensor 11.5 mm from the on a 3.5 x 8 mm FR-4 neck,
nearest heat source sensor 24.5 mm away;
thermal benefit unmeasured![]() | ![]() |
| A — Compact (HW A1) | B — Thermally isolated (HW B1) |
![]() | ![]() |
| 47.0 × 39.2 × 19.6 mm, one chamber | 47.0 × 56.2 × 19.6 mm, two chambers, wall at the neck |
Build 5 of each, put them next to a reference instrument, and let the data pick
the design. The decision gate is written down in
docs/50-thermal-ab-test-plan.md before the
boards exist, including the thresholds under which A wins.
Engineering prototype; not ready for fabrication or use. The
twenty-finding review records corrective work and
unresolved qualification. make outputs produces explicitly marked draft
review files. make release-check requires complete routing, clean DRC/parity
and the evidence listed in hardware/release-readiness.json. A development
pipeline pass does not imply a working sensor or safe battery charging.
Partially routed: the current exact counts are recorded in
hardware/drc-budget.json, with verification history
in the execution plan. Sensor routes, local power/ground paths and regulator
controls are generated; USB and remaining main-board branches are incomplete.
Development DRC has zero errors, warnings and schematic/PCB parity differences;
manufacturing also requires zero unconnected items.
Phase 6 of 14 — see docs/00-plan.md.
A compiled, radio-disabled bring-up application and fixture capture are now available. Full telemetry firmware and device qualification remain open. The prototype-to-production handoff separates public engineering sources, controlled prototype orders and qualified products.
The current audit and ordered work through the prototype experiment and 20-unit
series are in docs/01-execution-plan.md.
KiCad ERC 0 violations
KiCad DRC 0 errors, 0 warnings on both boards (KiCad 10.0.6)
Sch/PCB parity 0 differences (both are generated from one model)
Ratsnest Incomplete on both boards (exact counts: hardware/drc-budget.json)
Outputs 4-layer gerbers, drill, CPL, assembly PDF, STEP, schematic PDF, BOMEverything runs from make. If a step cannot, it is not part of the build.
./localPipeline.sh # hardware and host tests, with a PASS/FAIL summaryOr step by step:
make license # every authored source carries an SPDX header
make check # generator rule checks (Python only, no KiCad needed)
make test # fault-injection regressions for electrical, build and model failures
make gen # regenerate the schematic, both boards, project files, rules, SVGs
make erc # KiCad ERC on the shared schematic
make drc # KiCad DRC + schematic/PCB parity gate on both variants
make bom # BOM + netlist from the shared design model
make thermal # regenerate the thermal model from the live geometry
make cost # regenerate the manufacturing estimate from the real design
make mech # enclosure model + checks + OpenSCAD params (STL if openscad)
make outputs # gerbers, drill, CPL, assembly PDF, STEP
make render # KiCad 3D renders
make mech-render # optional enclosure PNG previews (requires a graphics display)
make power # illustrative battery-side charge budget; replace inputs with measurements
make release-check # fails until routing and qualification are complete
make release-package RELEASE_TAG=hw-a1 # gated ZIP + SHA-256 for one printed revision
make firmware-test # host CRC/decoder fault tests
make firmware # source pinned ESP-IDF v5.5.4 export.sh first
make prototype-check # separate prototype reviews; currently fails on layout/reviews
make prototype-package PROTOTYPE_VARIANT=a # gated 5-unit engineering order package
make allHost firmware tests also require a C compiler and standard C development
headers (gcc and libc6-dev on the Debian CI image). Container workflows
explicitly trust their checked-out workspace for Git provenance checks.
Python-only checks include check, test, bom, thermal, cost, and power.
ERC/DRC, board renders and exports require KiCad 10 (kicad-cli); mesh checks
require OpenSCAD. Offline checks alone cannot establish hardware readiness.
The quality badge reports the latest master workflow result. The release workflow badge links to a manual process, rather than displaying an empty run status. No manufacturing release has been published; the manufacturing badge records that state without querying a nonexistent latest release. Both release labels are repository-owned SVGs; update the manufacturing label when a qualified release is actually published.
GitHub's Hardware Quality workflow runs the same localPipeline.sh gate and
retains draft Gerbers, reports and enclosure meshes for 14 days. The separate,
manual Hardware Release workflow accepts only a tag matching the revision
printed on the selected PCB (hw-a1 or hw-b1 today). It cannot package or
publish until make release-check proves clean routing, clean DRC/parity and
all seven qualification-evidence categories. Publishing is opt-in and draft by
default; a successful package contains a SHA-256 checksum and source provenance.
Requesting make outputs OUTPUT_CLASS=release also runs qualification. Release
markers are written only after every export succeeds. Packaging rejects draft
markers and missing manufacturing files, repeats the live release gate and
exports when invoked directly, and includes the evidence files referenced by
the manifest.
Packaging requires a clean committed source tree and verifies the recorded
commit against HEAD before and after export.
tools/boardgen/ holds the parts, values, netlist, net classes and design
rules once. variants.py is the only variant-specific file, and it contains
outline, sensor position and thermal zones — nothing electrical. Both
.kicad_pcb files are emitted from that model, so a rule change cannot silently
apply to only one board.
The four sensor-island nets are routed by the generator rather than by hand,
because they carry a rule — 0.15 mm wide, no vias, nothing else near them — and
the same rule is written into each variant's .kicad_dru. A number that only
lives in a designer's memory gets widened the first time a route is awkward.
AGENTS.md | working agreement — read before changing anything |
docs/00-plan.md | 14 phases with gates, schedule, risks, non-goals |
docs/10-requirements.md | numbered requirements, locked vs open |
docs/20-component-selection.md | why SHT45 and not BME280; why C6 and not C3 |
docs/30-electrical-design-spec.md | the circuit, every value traced to a datasheet |
docs/40-floorplans.md | A vs B, and what the layout decided |
hardware/outputs/schematic/env-sensor.pdf | the schematic, as built |
docs/45-thermal-model.md | generated screening model |
docs/50-thermal-ab-test-plan.md | the experiment and its decision gate |
docs/60-manufacturing-cost.md | generated cost estimate, from the real joint count |
docs/61-cost-reduction.md | what would make it cheaper, and what each saving costs |
docs/62-fabrication-3-boards.md | who makes three boards, and what the antenna needs from them |
docs/70-what-the-board-can-do.md | what firmware alone unlocks — three radios, one board |
docs/80-enclosure.md | generated enclosure model, and the requirements it breaks |
docs/vision.md | the original transcript this was distilled from |
docs/ requirements, specs, trade studies, test plans
hardware/
lib/ project footprint library (vendored + authored, verified)
variant-a/ HW A1 - compact
variant-b/ HW B1 - thermally isolated
outputs/ gerbers, drill, BOM, CPL, STEP (regenerated by CI)
hardware/schematic/ one generated schematic, shared by both variants
tools/boardgen/ the shared model: design, schematic, geometry, placer, router, checks
mechanical/ OpenSCAD enclosures, generated parameters from the board
firmware/ pinned ESP-IDF engineering bring-up applicationGPL-3.0-or-later — see LICENSE. That covers everything authored
here: the generator, the schematic and both boards, the enclosure model, the
documents. Every authored source file carries an SPDX header, the generated
KiCad files carry it in their title block, and make license fails the build if
one is missing — a licence that only exists at the repository root stops
travelling the moment a file is copied out.
Two things in the tree are not ours and keep their own terms:
hardware/lib/sensorly.pretty/* and hardware/lib/sensorly.kicad_sym (except the two authored parts) | from the official KiCad libraries, CC-BY-SA 4.0 with the KiCad library exception — which explicitly permits unlimited use in your own designs without imposing licence terms on the design itself. See hardware/lib/README.md. |
Datasheet figures quoted in docs/ | the manufacturers'. Cited, not reproduced. |
The KiCad library exception is what makes this combination clean: the footprints can sit inside a GPL project without the CC-BY-SA terms propagating to the board.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 100k 1% | sensorly:R_0402_1005Metric | R7, R8, R9, R10, R19, R20 |
| 6 | 100nF/16V X7R | sensorly:C_0402_1005Metric | C2, C5, C6, C12, C13, C14 |
| 5 | 10uF/16V X5R | sensorly:C_0805_2012Metric | C1, C8, C9, C10, C11 |
| 4 | 10k 1% | sensorly:R_0402_1005Metric | R1, R3, R4, R22 |
| 2 | 0R | sensorly:R_0402_1005Metric | R5, R21 |
| 2 | 1uF/16V X5R | sensorly:C_0402_1005Metric | C3, C4 |
| 2 | 2M2 1% | sensorly:R_0402_1005Metric | R14, R15 |
| 2 | 5k1 1% | sensorly:R_0402_1005Metric | R16, R17 |
| 2 | GND | sensorly:TestPad_D1.5mm_Bottom | TP1, TP17 |
| 1 | +3V0 | sensorly:TestPad_D1.5mm_Bottom | TP4 |
| 1 | 2.2uH | sensorly:L_Murata_DFE201612E | L1 |
| 1 | 267k 1% | sensorly:R_0402_1005Metric | R6 |
| 1 | 2N7002 | sensorly:Onsemi_CASE318_SOT23 | Q1 |
| 1 | 3k01 1% | sensorly:R_0402_1005Metric | R12 |
| 1 | 3k3 1% | sensorly:R_0402_1005Metric | R2 |
| 1 | 4.7uF/10V X5R | sensorly:C_0603_1608Metric | C7 |
| 1 | 47k 1% | sensorly:R_0402_1005Metric | R18 |
| 1 | 4k42 1% | sensorly:R_0402_1005Metric | R13 |
| 1 | 8k06 1% | sensorly:R_0402_1005Metric | R11 |
| 1 | BOOT_N | sensorly:TestPad_D1.5mm_Bottom | TP7 |
| 1 | BQ24074RGTR | sensorly:TI_RGT0016B_VQFN16_3x3mm | U4 |
| 1 | CHG_N | sensorly:TestPad_D1.5mm_Bottom | TP14 |
| 1 | EN | sensorly:TestPad_D1.5mm_Bottom | TP6 |
| 1 | ESP32-C6-MINI-1-N4 | sensorly:ESP32-C6-MINI-1 | U1 |
| 1 | LED_GREEN | sensorly:Kingbright_KP1608SGC | D1 |
| 1 | Molex PicoBlade 3P | sensorly:Molex_PicoBlade_53261-0371_1x03-1MP_P1.25mm_Horizontal | J2 |
| 1 | PG_N | sensorly:TestPad_D1.5mm_Bottom | TP15 |
| 1 | SCL | sensorly:TestPad_D1.5mm_Bottom | TP13 |
| 1 | SDA | sensorly:TestPad_D1.5mm_Bottom | TP12 |
| 1 | SHT45-AD1F | sensorly:Sensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPad | U2 |
| 1 | SW_PROV | sensorly:Panasonic_EVQPUJ_EVQPUA | SW1 |
| 1 | TEST_MODE | sensorly:TestPad_D1.5mm_Bottom | TP16 |
| 1 | TPS62840DLC | sensorly:TI_DLC0008B_VSON-HR-8_2x1.5mm_P0.5mm | U3 |
| 1 | UART_RX | sensorly:TestPad_D1.5mm_Bottom | TP9 |
| 1 | UART_TX | sensorly:TestPad_D1.5mm_Bottom | TP8 |
| 1 | USB-C 16P | sensorly:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
| 1 | USBLC6-2SC6 | sensorly:ST_USBLC6_SOT23_6 | U5 |
| 1 | USB_D_N | sensorly:TestPad_D1.5mm_Bottom | TP11 |
| 1 | USB_D_P | sensorly:TestPad_D1.5mm_Bottom | TP10 |
| 1 | VBAT | sensorly:TestPad_D1.5mm_Bottom | TP5 |
| 1 | VBUS | sensorly:TestPad_D1.5mm_Bottom | TP2 |
| 1 | VSYS | sensorly:TestPad_D1.5mm_Bottom | TP3 |
It measures 30 × 51 mm and has 4 copper layers, 1.6 mm thick.
64 parts, built around the ESP32-C6-MINI-1-N4, SHT45-AD1F-R2, TPS62840DLCR and BQ24074RGTR. 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 marcelpetrick/sensorly-unhinged repository on GitHub, at the commit this page was made from: the board is hardware/variant-b/env-sensor-b.kicad_pcb and its schematic hardware/schematic/env-sensor.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the GPL-3.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).

aliaksei-lameyka/ENKU-Clock
Open, repairable, local-first e-paper alarm clock.

rees3901/BluepawsV4
version 4 of my on-going cat tracker project. this differs in structure in that both the TX collar and Rx homehub will be in the same repo to ensure intercompatability

Raphi25/Camera-Project
This project investigates the development of a low-cost wearable camera system intended to support caregivers by capturing images throughout the wearer's daily life.



Tropaion/Manafish_Mainboard
The Manafish Mainboard is the main electronics board of the Manafish ROV. It replaces the Raspberry Pi 3B, the USB-connected Raspberry Pi Pico and the wiring between them with one board:

alxgmpr/moisture-sensor
Indoor capacitive soil moisture sensor - nRF54L15 + nPM1300 + FDC1004, BTHome v2 over BLE

jayis1/hardware-design-lab
Full-cycle hardware device designs — each device in its own subfolder with architecture, schematics, PCB layout, and software stack