Record Accepted PCB Placement And Fit

Align component groups, repair affected routing, and add preservation
audits.
Assign the confirmed U2 footprint and update pull-ups to 2 kΩ across
design files.
Document user acceptance, switch to an A3 worksheet, and refresh PCB
exports.
This commit is contained in:
2026-09-22 10:28:08 +02:00
parent 901afbe754
commit c257158ada
42 changed files with 29500 additions and 17205 deletions
+4 -2
View File
@@ -1,11 +1,13 @@
# Button selection: Omron B3F-1000
> **Current status (2026-09-22):** [User acceptance and group alignment](user-acceptance.md) supersedes the earlier pending user-fit, USB-clearance, male-map, procurement and mounting-hardware items below. Original research/evidence remains historical; acceptance is not independent qualification.
Paths in prose point to the retained hardware artifacts or neighboring development notes.
Commands keep their stated working directory; repository-root paths remain root-relative.
Verified 2026-09-20 against the Omron datasheet and installed KiCad libraries. This research covers three active-low GPIO-to-GND buttons.
**Integration decision:** the A0 schematic now implements B3F-1000 switches with one **2.2 kΩ, 1%, at least 0.125 W external pull-up** per input. The lower-current/internal-pull-up-only discussion below records the selection rationale, not an unselected schematic option. Firmware is unchanged. Exact resistor MPN, supply tolerance/budget and stock remain release checks.
**Integration decision:** the A0 schematic now implements B3F-1000 switches with one **2 kΩ, 1%, metal-film external pull-up (design rating at least 0.125 W)** per input. The lower-current/internal-pull-up-only discussion below records the selection rationale, not an unselected schematic option. Firmware is unchanged. User reports B3F-1000 and resistors purchased. Exact resistor MPN/wattage and measured supply margin remain unspecified.
## Schematic-ready recommendation
@@ -92,7 +94,7 @@ Inspected `/usr/share/kicad/footprints/Button_Switch_THT.pretty/SW_TH_Tactile_Om
Omron's 10 µA / 1 V minimum is explicitly a **reference value**, not an unconditional low-current reliability guarantee. B3F-1000 is a reasonable prototype choice, but internal-pull-up-only contact reliability should be qualified in the intended environment and over life.
For a conservative silver-contact design within the stated rated load, consider **one external 2.2 kΩ pull-up to 3.3 V per button** (about 1.5 mA while pressed); verify supply/resistor tolerances and GPIO limits before adopting. This recommendation was subsequently adopted in the A0 carrier schematic; see the integration decision above. If low current is important, the datasheet also lists **B3F-1002-G** with gold contacts in the same p. 4 dimensional group, rated 100 µA–50 mA at 3–24 VDC, but with a different operating force (1.76 ±0.49 N); weak internal pull-ups are not automatically within that rated range either. It has not been selected or stock-checked here.
The original A0 recommendation was 2.2 kΩ (about 1.5 mA); the purchased-part update uses **one external 2 kΩ 1% pull-up to 3.3 V per button** (nominal 1.65 mA while pressed); verify supply/resistor tolerances and GPIO limits before adopting. This recommendation was subsequently adopted in the A0 carrier schematic; see the integration decision above. If low current is important, the datasheet also lists **B3F-1002-G** with gold contacts in the same p. 4 dimensional group, rated 100 µA–50 mA at 3–24 VDC, but with a different operating force (1.76 ±0.49 N); weak internal pull-ups are not automatically within that rated range either. It has not been selected or stock-checked here.
Retain firmware debouncing; a mechanical switch is not bounce-free. The device is unsealed (IP00), and the datasheet prohibits washing.
@@ -1,5 +1,7 @@
# DE-9 mechanical reference — pinned Adafruit 5988 STEP
> **Current status (2026-09-22):** [User acceptance and group alignment](user-acceptance.md) supersedes the earlier pending user-fit, USB-clearance, male-map, procurement and mounting-hardware items below. Original research/evidence remains historical; acceptance is not independent qualification.
Paths in prose point to the retained hardware artifacts or neighboring development notes.
Commands keep their stated working directory; repository-root paths remain root-relative.
@@ -1,5 +1,7 @@
# Provisional carrier module footprints
> **Current status (2026-09-22):** [User acceptance and group alignment](user-acceptance.md) supersedes the earlier pending user-fit, USB-clearance, male-map, procurement and mounting-hardware items below. Original research/evidence remains historical; acceptance is not independent qualification.
Paths in prose point to the retained hardware artifacts or neighboring development notes.
Commands keep their stated working directory; repository-root paths remain root-relative.
+19 -20
View File
@@ -1,5 +1,7 @@
# Compact two-layer PCB — A1 draft
> **Current status (2026-09-22):** [User acceptance and group alignment](user-acceptance.md) supersedes the earlier pending user-fit, USB-clearance, male-map, procurement and mounting-hardware items below. Original research/evidence remains historical; acceptance is not independent qualification.
Paths in prose point to the retained hardware artifacts or neighboring development notes.
Commands keep their stated working directory; repository-root paths remain root-relative.
@@ -49,9 +51,9 @@ component body corners.
|---|---|---|
| U1 | (8, 23) | ESP32 left header pin 1; antenna toward top-left cutaway, USB toward bottom edge |
| U2 | (43, 26.670) | MAX3243 header pin 1; bare module PCB front exactly flush with carrier top edge |
| DS1 | (43, 36) | OLED module upper-left PCB corner; display faces up |
| R1 / R2 / R3 | (43 / 54 / 65, 34) | Axial pull-ups in the gap between RS-232 and OLED |
| SW1 / SW2 / SW3 | (43 / 55 / 67, 68) | Back, select, next below display; switch pad 1 origins |
| DS1 | (43.970, 36) | OLED module upper-left PCB corner; display faces up |
| R1 / R2 / R3 | (42.160 / 53.160 / 64.160, 32.6685) | Axial pull-ups in the gap between RS-232 and OLED |
| SW1 / SW2 / SW3 | (41.720 / 53.720 / 65.720, 68) | Back, select, next below display; switch pad 1 origins |
| H1 | (3.5, 22.5) | Proposed case mounting hole below antenna notch |
| H2 | (3.5, 75) | Proposed case mounting hole near bottom-left edge |
| H3 | (78, 4) | Proposed case mounting hole |
@@ -61,12 +63,12 @@ Outline vertices: (36,0), (82,0), (82,80), (0,80), (0,19), (36,19), closed.
The previous A0 board is retained in `../../../../hardware/PCB/validation/pcb-a0-before-reposition.kicad_pcb`.
The board area is **58.76 cm²**; its bounding rectangle is 65.6 cm².
H1–H4 are proposed **Ø3.2 mm NPTH M3 clearance holes**, not a previously agreed
case specification. They are marked board-only and excluded from the electrical
H1–H4 are user-approved **Ø3.2 mm NPTH M3 clearance holes**. The user selected
10 mm brass standoffs into heat inserts; see the current acceptance record. They are marked board-only and excluded from the electrical
BOM. The OLED and RS-232 module mounting holes are additional, separate holes.
Screw heads, spacers, heat-set inserts, tool access and underside lead clearance
must be checked against the final case and assembly heights. No insert dimensions
or module stand-off heights are assumed.
must be checked against the final case and assembly heights. Exact insert dimensions remain unspecified. The user intends/reports 10 mm
assembled module elevation, not independently measured; see user-acceptance.md.
## Routing and electrical status
@@ -74,8 +76,8 @@ The PCB contains actual copper, not just ratsnest placement:
- All **38 required physical-pad spanning connections** across **17 connected
nets** routed, including both duplicated pads of each switch contact.
- **565 segments**, signal width **0.25 mm**, 3.3 V and GND width **0.50 mm**.
- **22 through vias**, **0.70 mm copper / 0.30 mm drill**.
- **938 segments** after incremental group-alignment repair, signal width **0.25 mm**, 3.3 V and GND width **0.50 mm**.
- **41 through vias** after repair, **0.70 mm copper / 0.30 mm drill**.
- **No copper pours**; ground is explicitly routed. This is an initial routing
solution, not a reviewed return-current/EMI or power-integrity design.
- Proposed minimum different-net clearance **0.25 mm** and copper-edge clearance
@@ -107,8 +109,7 @@ Missing RF clearance cannot be signed off from the current footprint alone.
### RS-232
U2 uses the new **`Carrier:MAX3243_Reference_Provisional`** footprint **on the PCB
only**. Its bare-module outline/header/holes are adapted from published female
U2 uses **`Carrier:MAX3243_Reference_Provisional`** in the schematic and PCB. Its bare-module outline/header/holes are adapted from published female
5988 CAD for the intended male 6253 module. The user explicitly confirms identical
male/female external dimensions. The linked Adafruit STEP has now been measured
with OpenCascade; its nominal metal geometry is used on that basis. Male header
@@ -143,12 +144,9 @@ the carrier edge. No wall thickness, cable-backshell clearance or sealing scheme
has been assumed. The model's anchor legs extend **2.230 mm below the module
underside**; select a stand-off/header stack or clearance solution before assembly.
The schematic footprint remains intentionally blank, preserving its caution
and avoiding edits to the schematic that was open in KiCad. Consequently there
is **one known schematic-parity warning**: U2 footprint differs from the empty
schematic assignment. This is not excluded/suppressed, and is not a net mismatch.
Once the male footprint is qualified, explicitly assign it in the schematic
before relying on Update PCB from Schematic to manage U2's footprint.
The user has now confirmed male pinout/header/footprint equivalence and reviewed
connections pin by pin. U2 is assigned in both schematic and PCB; validators
require **zero schematic parity warnings**, without exclusions.
### OLED and controls
@@ -264,8 +262,8 @@ Run from the repository root with the system Python containing KiCad bindings:
The first script exports a **fresh saved-schematic netlist** and checks the actual
PCB pad assignments, component linkage, dimensions, layer count, nominal thickness,
mounting holes, track/via sizes and KiCad DRC. It never rewrites the PCB or project.
It reports the single expected U2 parity warning explicitly, and fails on any
other parity issue, DRC violation or unconnected item. Reports are retained in
It requires zero parity issues, DRC violations and unconnected items, including
the retained user-confirmed U2 assignment. Reports are retained in
`../../../../hardware/PCB/validation/pcb-parity-drc.json` and `../../../../hardware/PCB/validation/pcb-validation-summary.json`.
The second independently checks continuous copper/hole/edge geometry and original
@@ -291,7 +289,8 @@ Measurement-integration validation with KiCad **10.0.6**:
- PCB, project and schematic retain their existing content except the authorized
board graphics. No firmware/assets, reroute, upload, erase or hardware test.
Current results:
Historical measurement-integration results (current alignment results are in
[user-acceptance.md](user-acceptance.md)):
- **0 physical DRC errors/warnings; 0 unconnected items.**
- All saved-schematic pad nets match the PCB; **1 expected U2 footprint parity warning**.
@@ -1,5 +1,7 @@
# MAX3243 carrier — PROVISIONAL female CAD reference / VERIFY MALE
> **Current status (2026-09-22):** [User acceptance and group alignment](user-acceptance.md) supersedes the earlier pending user-fit, USB-clearance, male-map, procurement and mounting-hardware items below. Original research/evidence remains historical; acceptance is not independent qualification.
Paths in prose point to the retained hardware artifacts or neighboring development notes.
Commands keep their stated working directory; repository-root paths remain root-relative.
+129
View File
@@ -0,0 +1,129 @@
# Carrier group alignment and user acceptance — 2026-09-22
This is the current acceptance record. It supersedes pending-user-confirmation
items in the earlier research and A0/A1 notes; it does not replace their original
manufacturer evidence or claim new hardware tests, fabrication approval or certification.
## Saved placement
Coordinates below are **carrier-local mm**, X right/Y down. Add (100,100) for
KiCad coordinates. All footprint rotations remain zero. Body centres, not
header/pad origins, define the common vertical axis **X=56.970 mm**.
| Item | Old footprint origin | New footprint origin | Movement |
|---|---|---|---|
| U2 RS-232 | (43,26.670) | unchanged | none |
| DS1 OLED | (43,36) | (43.970,36) | +0.970 X |
| R1 | (43,34) | (42.160,32.6685) | −0.840 X, −1.3315 Y |
| R2 | (54,34) | (53.160,32.6685) | −0.840 X, −1.3315 Y |
| R3 | (65,34) | (64.160,32.6685) | −0.840 X, −1.3315 Y |
| SW1 | (43,68) | (41.720,68) | −1.280 X |
| SW2 | (55,68) | (53.720,68) | −1.280 X |
| SW3 | (67,68) | (65.720,68) | −1.280 X |
U1 remains (8,23); carrier outline, four carrier mounting holes, RF reserve and
confirmed USB geometry are unchanged. Resistors remain a horizontal group with
11 mm pitch; buttons remain a horizontal group with 12 mm pitch. Neither group
was rearranged into a vertical stack.
The published RS-232 bare PCB spans X=41.095…72.845, Y=0…29.337, including
its rounded rear corners beyond the header row. Its centre X=56.970 is retained
to minimize module movement and preserve connector/case registration. OLED PCB
bounds are X=43.970…69.970, Y=36…62. The OLED's offset display window is not
used as the module centre.
The nominal resistor bodies are 6.3 × 2.5 mm, centred 3.81 mm right of pad 1.
Their group spans X=42.820…71.120, Y=31.4185…33.9185. The 6.663 mm gap between
module boards is therefore split into **2.0815 mm clearance / 2.5 mm body /
2.0815 mm clearance**. Adjacent resistor bodies have 4.7 mm horizontal clearance.
These are nominal planar CAD clearances, not new tolerance or height measurements.
Omron B3F-1000 nominal bodies are 6 × 6 mm with centres 3.25 mm right and
2.25 mm below their pad-1 origins. Group body bounds X=41.970…71.970,
Y=67.250…73.250; OLED-to-button body gap **5.250 mm**, adjacent button body
gaps **6 mm**. Footprint courtyard and lead envelopes are wider than the bodies;
the alignment audit uses the actual F.Fab bodies, not a pad-origin average.
## Closed by explicit user acceptance/report
- All component dimensions and physical fit match visually; USB placement and
clearance are correct. This is user acceptance, not an independently performed
new print-fit or hardware test by the agent.
- Female headers are described as 8.5 mm and standard male headers as adding
2.5 mm. User intends/reports **10 mm assembled elevation**. The arithmetic sum
is 11 mm, but mating height cannot be inferred by simply adding those descriptions.
**10 mm is not independently measured or precision-verified.** User reports
RS-232 mounting prongs clear the carrier at the intended assembly height.
- Four Ø3.2 mm M3 carrier holes approved; **10 mm brass standoffs into heat
inserts**, M3 daughterboard screws, and **M2 display hardware** selected.
This does not establish DE-9 cable-retention thread type, exact screw lengths,
insert dimensions or the final printed case wall/cutout.
- **Omron B3F-1000 switches purchased.** Existing standard KiCad footprint is
retained; documented duplicate-pad mapping is unchanged.
- **2 kΩ, 1% metal-film resistors purchased.** R1–R3 values updated in schematic,
PCB and BOM; nominal DIN0207 6.3 × 2.5 mm body / 7.62 mm lead pitch retained
under the visual-fit confirmation. Exact resistor MPN and purchased wattage
were not supplied. Design requirement remains at least 0.125 W. At nominal
3.3 V, each pressed external pull-up draws 1.65 mA and dissipates 5.445 mW;
these calculations do not quantify regulator margin or GPIO internal pull-ups.
- Male Adafruit module has identical reference pinout/header mapping/footprint
per user, who reviewed module connections pin by pin. Existing schematic U2
assignment `Carrier:MAX3243_Reference_Provisional` is preserved; clean parity
is required, not waived. Original female CAD provenance is unchanged.
- Nonisolated USB power arrangement explicitly accepted and reported already
tested by user. **Successful operation does not establish backfeed safety**, in
particular with simultaneous powered hosts. No isolation/backfeed protection
was added or claimed.
- Existing 3.3 V supply successfully powers the modules per user. This is operating
evidence, not measured regulator current/thermal/transient headroom.
- User confirms backside OLED I²C pull-ups and operation without extras. **Their
resistance and termination rail remain unmeasured.** No values/rail are invented
and no external I²C pull-ups added.
- Current RF reserve and power/ground routing accepted based on visual and
operational experience. This is not manufacturer RF qualification, measured
signal/power integrity, regulator-margin proof, EMC testing or certification.
## Verification and remaining limits
Incremental routing starts from `hardware/PCB/validation/pcb-before-group-alignment.kicad_pcb`.
It removes copper obstructed by moved pads, reconnects retained routes and trims
KiCad-reported dangling stubs. **476/587 original copper items remain exactly
unchanged**; 111 original items removed. No whole-board regeneration or route
reset was used. `pcb-group-migration.json` records the removed UUIDs and repairs;
`validate_group_alignment.py` checks the full parsed non-copper delta, retained
copper UUID/content, body centrelines/gaps, and unchanged project settings.
Original A0 and measured-U1 snapshots/reports are retained, not rebaselined.
Run from repository root:
```sh
/usr/bin/python3 -B hardware/PCB/validate_schematic.py
/usr/bin/python3 -B hardware/PCB/validate_pcb_draft.py
/usr/bin/python3 -B hardware/PCB/validate_group_alignment.py
/usr/bin/python3 -B hardware/PCB/validation/pcb-routing-check.py
/usr/bin/python3 -B hardware/PCB/validate_u1_update.py
/usr/bin/python3 -B hardware/PCB/validate_footprints.py
/usr/bin/python3 -B hardware/PCB/reference/db9-cad/validate.py
```
Validation completed with KiCad 10.0.6: schematic ERC **0 errors/warnings**;
PCB DRC **0 physical violations, 0 unconnected items, 0 parity issues**. All
17 connected nets, 9 electrical components, 44 U1 pins and 15 firmware GPIO
contracts checked. Current routing: **938 segments, 41 vias**; unchanged width
rules (0.25 mm signal / 0.50 mm power and ground), 0.70/0.30 mm vias. Independent
minimum different-net/copper-to-NPTH gap **0.252762 mm**, minimum board-edge gap
**1.900 mm**; RF reserve remains clear. Exact group/preservation and U1/silk
regressions, two footprint tests and DB9 CAD/source checks passed. KiCad bindings
emit known startup enum-property assertions but all checks complete successfully.
DB9 projections and 94 device-silkscreen items refreshed. Placement PDF (1:1),
PCB SVG/PNG/3D and schematic PDF/SVG/PNG regenerated; PNG previews visually
reviewed. The 3D view still lacks complete module models and is not assembly
qualification. No removed PCB presentation/draft markers were reintroduced.
Current acceptance closes the user-review gates above. Still not independently
qualified: regulator margin, USB backfeed safety, pull-up values/rail, RF/EMC,
complete tolerance/height/case/actuator envelopes, finished-hole fabrication
process and certification. Missing module courtyards remain a known model limit;
DRC does not validate complete assembled-module or case fit. No new hardware
tests, firmware changes, Gerbers, fabrication order or manufacturing approval.