|
|
@@ -38,6 +38,12 @@ USBC_H = 3.22; // port body height from STL
|
|
|
USBC_CZ = 4.31;
|
|
|
USBC_CBL_CLEAR = 1.5; // added per side for cable plug + routing clearance
|
|
|
|
|
|
+// ---- Y- edge: FPC connector — notch in lid Y+ stop rib ----
|
|
|
+FPC_CX = 50.0; // PCB-relative case_x centre
|
|
|
+FPC_NOTCH_W = 20.0; // notch width for cable routing clearance
|
|
|
+FPC_U_T = 1.5; // U-rib arm and bar thickness
|
|
|
+FPC_U_DEPTH = 20.0; // how far Y- the U arms extend into the lid interior
|
|
|
+
|
|
|
// ---- +Y wall: 3× user buttons + 1× reset ----
|
|
|
BTN_CX = [48.4, 39.075, 29.725, 20.425]; // PCB-relative case_x centres
|
|
|
BTN_D = 2.3; // HOLE_D from hat.scad: PLUNGER_D(2.0) + 2×SLIP_CLEAR(0.15)
|
|
|
@@ -252,24 +258,46 @@ module lid() {
|
|
|
translate([OUT_L - WALL - FLANGE_W + SLIDE_CLEAR - 2.0, 0, 0])
|
|
|
cube([2.0, LID_Y_LEN, FLANGE_H]);
|
|
|
|
|
|
- // Y+ stop rib — full-width cross member spanning between rails, stiffens closed end
|
|
|
+ // Y+ stop rib — split around FPC cable notch at PCB_OX+FPC_CX
|
|
|
translate([WALL + FLANGE_W - SLIDE_CLEAR + 2.0, LID_Y_LEN - 3, FLANGE_H - 3])
|
|
|
- cube([OUT_L - 2*WALL - 2*FLANGE_W + 2*SLIDE_CLEAR - 4.0, 3, 3]);
|
|
|
+ cube([PCB_OX + FPC_CX - FPC_NOTCH_W/2 - (WALL + FLANGE_W - SLIDE_CLEAR + 2.0), 3, 3]);
|
|
|
+ translate([PCB_OX + FPC_CX + FPC_NOTCH_W/2, LID_Y_LEN - 3, FLANGE_H - 3])
|
|
|
+ cube([OUT_L - WALL - FLANGE_W + SLIDE_CLEAR - 2.0 - (PCB_OX + FPC_CX + FPC_NOTCH_W/2), 3, 3]);
|
|
|
+
|
|
|
+ // U-rib bridging the notch — arms outside gap edges, bar closing Y- end
|
|
|
+ // Left arm
|
|
|
+ translate([PCB_OX + FPC_CX - FPC_NOTCH_W/2 - FPC_U_T, LID_Y_LEN - 3 - FPC_U_DEPTH, FLANGE_H - 3])
|
|
|
+ cube([FPC_U_T, FPC_U_DEPTH, 3]);
|
|
|
+ // Right arm
|
|
|
+ translate([PCB_OX + FPC_CX + FPC_NOTCH_W/2, LID_Y_LEN - 3 - FPC_U_DEPTH, FLANGE_H - 3])
|
|
|
+ cube([FPC_U_T, FPC_U_DEPTH, 3]);
|
|
|
+ // Bottom bar
|
|
|
+ translate([PCB_OX + FPC_CX - FPC_NOTCH_W/2 - FPC_U_T, LID_Y_LEN - 3 - FPC_U_DEPTH, FLANGE_H - 3])
|
|
|
+ cube([FPC_NOTCH_W + 2*FPC_U_T, FPC_U_T, 3]);
|
|
|
}
|
|
|
|
|
|
- color("#004B49") {
|
|
|
- // Ceiling plate — matches base footprint (OUT_L × OUT_W) with CORNER_R rounding
|
|
|
- translate([0, -WALL, FLANGE_H])
|
|
|
- rounded_box(OUT_L, OUT_W, LID_T, CORNER_R);
|
|
|
-
|
|
|
- // Y- lip — same rounded_box profile clipped to the Y- wall zone so the
|
|
|
- // lip corners match the base exterior corners
|
|
|
- intersection() {
|
|
|
- translate([0, -WALL, -SLIDE_CLEAR])
|
|
|
- rounded_box(OUT_L, OUT_W, FLANGE_H + SLIDE_CLEAR, CORNER_R);
|
|
|
- translate([-0.1, -WALL - 0.1, -SLIDE_CLEAR - 0.1])
|
|
|
- cube([OUT_L + 0.2, WALL + 0.2, FLANGE_H + SLIDE_CLEAR + 0.2]);
|
|
|
+ color("#004B49")
|
|
|
+ difference() {
|
|
|
+ union() {
|
|
|
+ // Ceiling plate — matches base footprint (OUT_L × OUT_W) with CORNER_R rounding
|
|
|
+ translate([0, -WALL, FLANGE_H])
|
|
|
+ rounded_box(OUT_L, OUT_W, LID_T, CORNER_R);
|
|
|
+
|
|
|
+ // Y- lip — same rounded_box profile clipped to the Y- wall zone so the
|
|
|
+ // lip corners match the base exterior corners
|
|
|
+ intersection() {
|
|
|
+ translate([0, -WALL, -SLIDE_CLEAR])
|
|
|
+ rounded_box(OUT_L, OUT_W, FLANGE_H + SLIDE_CLEAR, CORNER_R);
|
|
|
+ translate([-0.1, -WALL - 0.1, -SLIDE_CLEAR - 0.1])
|
|
|
+ cube([OUT_L + 0.2, WALL + 0.2, FLANGE_H + SLIDE_CLEAR + 0.2]);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ // FPC cable slot — from Y+ face of U-rib bottom bar, 3 mm toward Y+
|
|
|
+ translate([PCB_OX + FPC_CX - FPC_NOTCH_W/2,
|
|
|
+ LID_Y_LEN - 3 - FPC_U_DEPTH + FPC_U_T,
|
|
|
+ FLANGE_H - 0.1])
|
|
|
+ cube([FPC_NOTCH_W, 3, LID_T + 0.2]);
|
|
|
}
|
|
|
}
|
|
|
|