diff --git a/hardware/case/README.md b/hardware/case/README.md index 688d4c9..a42d194 100644 --- a/hardware/case/README.md +++ b/hardware/case/README.md @@ -101,7 +101,7 @@ foam+bracket; the bracket is what stops it dropping _into_ the cavity ![Midline section: glass clamped between the front lip and the rear foam + bracket; the internal FPC clearance is hidden below the left bezel, standoffs on the cavity floor](renders/section.png) -![The screwed bracket — four corner holes, window clears the active area](renders/bracket.png) +![The screwed bracket — four corner holes, window clears the active area, and the left edge is relieved to give the FPC room to U-turn into the cavity](renders/bracket.png) ### Boards (the baseplate is the chassis) diff --git a/hardware/case/renders/bracket.png b/hardware/case/renders/bracket.png index d49b555..eb0671e 100644 Binary files a/hardware/case/renders/bracket.png and b/hardware/case/renders/bracket.png differ diff --git a/hardware/case/typoena-case.scad b/hardware/case/typoena-case.scad index d126049..b2bd6ac 100644 --- a/hardware/case/typoena-case.scad +++ b/hardware/case/typoena-case.scad @@ -25,7 +25,7 @@ // ============================================================================ show = "assembled"; -$fn = 48; +$fn = 20; // ---- body envelope -------------------------------------------------------- W = 176; // width (X) — screen 150.9 + bezel + walls @@ -230,14 +230,19 @@ module case_body() { // =========================================================================== module bracket() { ow = P_w + 18; oh = P_h + 18; - // Solid frame — no FPC notch on purpose. The flex U-turns off the glass's - // left edge and returns INBOARD through the ~1 mm foam gap ABOVE this bracket - // (the bracket starts 1 mm deeper), then drops into the cavity through the - // open aperture to the breakout — it never crosses the bracket plane. The - // only FPC relief lives in the body's left pocket wall (see screen_cuts()). + // FPC U-turn clearance: a gap in the LEFT frame member. The flex leaves the + // glass's back plane and folds ~180° to dive into the cavity toward the + // breakout; a safe bend radius (~1.5-2 mm) makes that loop ~4 mm deep, too + // deep for the 1 mm foam gap, so it fouls this rigid frame unless relieved + // here. Lines up with the body's FPC slot (screen_cuts) and the foam relief. difference() { linear_extrude(bracket_t) - difference() { rrect(ow, oh, 4); rrect(A_ap_w+2, A_ap_h+2, 2); } + difference() { + rrect(ow, oh, 4); + rrect(A_ap_w+2, A_ap_h+2, 2); + translate([-(ow + A_ap_w+2)/4, 0]) + square([(ow - (A_ap_w+2))/2 + 4, fpc_w], center=true); + } for (bx=[-(P_w/2+5), P_w/2+5], by=[-(P_h/2+5), P_h/2+5]) translate([bx, by, -1]) cylinder(h=bracket_t+2, r=1.45); // M2 clear } @@ -283,10 +288,16 @@ module placed_bracket() { -lip_t-G_t-foam_t-bracket_t]) color(C_bracket) bracket(); } -// foam gasket (non-adhesive) — a border frame between glass and bracket +// foam gasket (non-adhesive) — a border frame between glass and bracket, with +// its LEFT border opened over the FPC span so the U-turning flex isn't clamped module foam() { linear_extrude(foam_t) - difference() { rrect(P_w+4, P_h+4, 3); rrect(A_ap_w, A_ap_h, 2); } + difference() { + rrect(P_w+4, P_h+4, 3); + rrect(A_ap_w, A_ap_h, 2); + translate([-((P_w+4) + A_ap_w)/4, 0]) + square([((P_w+4) - A_ap_w)/2 + 4, fpc_w], center=true); + } } module placed_foam() { on_deck() translate([screen_off, screen_cy+screen_off, -lip_t-G_t-foam_t])