feat(case): add a reset button hole in the back wall

Momentary switch wired to the board's EN/GND, mounted past the µSD so
it's never hit while typing. BOOT is omitted on purpose: on the S3,
auto-download makes it recovery-only. Positions are << MEASURE >>
placeholders — a custom carrier PCB will re-fix them later.
This commit is contained in:
Julien Calixte
2026-07-11 10:01:21 +02:00
parent 3faff25fba
commit 195311a395
8 changed files with 32 additions and 2 deletions

View File

@@ -114,6 +114,13 @@ from below — far easier than fishing screws inside a shell.
- The **DESPI-C579 breakout** sits in the cavity on the **left**, right under the
FPC exit; short SPI jumpers (MOSI/SCLK/CS/DC/RST/BUSY + 3V3/GND) run across to
the ESP32. Keep that left channel clear.
- A **reset button** — a small momentary switch, soldered to the board's **EN**
and **GND** header pins — mounts through a hole in the back wall, out past the
µSD slot so it's never hit while typing (`rst_*` params, `<< MEASURE >>`). This
is our own switch, not the DevKitC's on-board buttons: those are top-actuated
and buried once the board lies flat. **BOOT is deliberately omitted** — on the
S3, auto-download (UART-bridge DTR/RTS or the native USB-Serial-JTAG) makes it
recovery-only, not worth a fat-fingerable button on a writing appliance.
- The baseplate screws **up into 4 corner posts** in the shell.
- A **cable relief** notch at the back lets the keyboard's USB-C cable exit and
route around to the front.
@@ -146,7 +153,8 @@ Or inspect each half alone — `plan_up` (the deck/lid, shown from below) and
- **`Hb` (back height) → deck angle.** 1822° is typewriter-shallow; raise `Hb`
toward ~2835° if the screen reads too edge-on when you're sitting close.
- **`<< MEASURE >>` items:** `esp_holes`, `brk_holes`, `port_x`, `port_z`,
`active_off_x/y` (the panel's active area sits off-centre from the glass).
`rst_x`/`rst_z`/`rst_d` (reset button), `active_off_x/y` (the panel's active
area sits off-centre from the glass).
## Print notes
@@ -189,7 +197,9 @@ name.
- [ ] Confirm the GDEY0579T93 active-area **offset** (FPC confirmed on the left
edge); adjust `active_off_x/y`.
- [ ] Real ESP32-S3-DevKitC-1 mounting-hole + port coordinates.
- [ ] Real board mounting-hole + port coordinates. **A custom carrier PCB is
planned** — when it lands, re-fix `esp_holes`, `port_x/z`, and the reset
`rst_*` to the PCB (and decide there whether to expose BOOT as a test pad).
- [ ] Optional **hinged lid** over the deck (portable-typewriter-case echo,
protects the glass in a bag) — `docs/hardware.md` calls for one; not yet
modelled.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -86,6 +86,18 @@ sd_w = 12; sd_h = 2.4; // microSD slot
// X positions of the three openings along the back << MEASURE to your board >>
port_x = [W/2 - 15, W/2, W/2 + 17]; // usb-c (kbd), usb-c (power), µSD
// ---- reset button (momentary wired to EN/GND) -----------------------------
// Our OWN switch, soldered to the board's EN + GND header pins — NOT the
// DevKitC's on-board buttons (top-actuated and buried once the board lies flat
// on its standoffs). It sits on the back wall, out past the µSD, so it's never
// hit while typing. BOOT is left off on purpose: on the S3, auto-download
// (UART-bridge DTR/RTS or the native USB-Serial-JTAG) makes it recovery-only —
// not worth a fat-fingerable button on a writing appliance.
rst_btn = true; // set false to omit the reset hole entirely
rst_d = 7.2; // through-hole Ø for the switch barrel << MEASURE >>
rst_x = W/2 + 40; // X along the back wall (past the µSD @ +17) << MEASURE >>
rst_z = 12; // centre height off the desk << MEASURE >>
// ---- baseplate / chassis --------------------------------------------------
bp_t = 2.6; // baseplate thickness
bp_gap = 0.5; // clearance so it drops into the shell
@@ -202,6 +214,13 @@ module port_cuts() {
}
}
// reset switch mounting hole through the back wall (y = D)
module reset_cut() {
if (rst_btn)
translate([rst_x, D-wall-1, rst_z])
rotate([-90,0,0]) cylinder(h=wall+2, r=rst_d/2);
}
// engraved nameplate on the DECK, in the band between the front edge and the
// screen — faces the user as they write. Sits flat on the reclined deck.
module nameplate() {
@@ -221,6 +240,7 @@ module case_body() {
}
screen_cuts();
port_cuts();
reset_cut();
nameplate(); // engrave (comment out for a blank face)
}
}