|
@@ -1,5 +1,6 @@
|
|
|
// Waveshare 2.13" e-Paper HAT (B) — ESP32 Nametag Case
|
|
// Waveshare 2.13" e-Paper HAT (B) — ESP32 Nametag Case
|
|
|
// Display slides in from X+; FPC cable exits freely out the open X+ side
|
|
// Display slides in from X+; FPC cable exits freely out the open X+ side
|
|
|
|
|
+$fn = $preview ? 32 : 64;
|
|
|
|
|
|
|
|
// --- Display Dimensions (landscape: portrait rotated 90°) ---
|
|
// --- Display Dimensions (landscape: portrait rotated 90°) ---
|
|
|
DISP_W = 59.20; // overall width (X) — portrait height
|
|
DISP_W = 59.20; // overall width (X) — portrait height
|
|
@@ -41,11 +42,11 @@ SCREEN_EXPLODE = 0; // mm to pull display toward X+ in preview
|
|
|
|
|
|
|
|
// --- Slip-Fit Cap (X+ end) ---
|
|
// --- Slip-Fit Cap (X+ end) ---
|
|
|
SHOW_CAP = true; // show cap in preview
|
|
SHOW_CAP = true; // show cap in preview
|
|
|
-CAP_ENGAGE = 8.0; // sleeve engagement length over case exterior (X)
|
|
|
|
|
|
|
+CAP_PAD = 4.0; // Min cap bore depth
|
|
|
|
|
+CAP_ENGAGE = CAP_PAD + 6.0; // sleeve engagement length over case exterior (X)
|
|
|
CAP_WALL = 1.5; // sleeve and end-wall thickness
|
|
CAP_WALL = 1.5; // sleeve and end-wall thickness
|
|
|
CAP_TOL = 0.2; // per-side slip clearance between bore and case exterior
|
|
CAP_TOL = 0.2; // per-side slip clearance between bore and case exterior
|
|
|
-CAP_TIP = 0.8; // minimum wall thickness at X- (open) edge after taper
|
|
|
|
|
-CAP_EXPLODE = 5; // preview: mm to pull cap away from case in X+ (0 = seated)
|
|
|
|
|
|
|
+CAP_EXPLODE = CAP_PAD + 0; // preview: mm to pull cap away from case in X+ (0 = seated)
|
|
|
|
|
|
|
|
// --- Magnetic Strip Locating Lip (rear face) ---
|
|
// --- Magnetic Strip Locating Lip (rear face) ---
|
|
|
MAG_L = 1.772 * 25.4; // strip length ≈ 45.01 mm
|
|
MAG_L = 1.772 * 25.4; // strip length ≈ 45.01 mm
|
|
@@ -130,6 +131,10 @@ module epd_case() {
|
|
|
// Magnetic strip recess in back face
|
|
// Magnetic strip recess in back face
|
|
|
translate([_lip_x, _lip_y, -0.01])
|
|
translate([_lip_x, _lip_y, -0.01])
|
|
|
cube([_lip_il, _lip_iw, MAG_LIP_H + 0.01]);
|
|
cube([_lip_il, _lip_iw, MAG_LIP_H + 0.01]);
|
|
|
|
|
+
|
|
|
|
|
+ // Cap wall recess — step in z- face at X+ end so cap sits flush
|
|
|
|
|
+ translate([case_w - CAP_ENGAGE + CAP_PAD, -0.01, -0.01])
|
|
|
|
|
+ cube([CAP_ENGAGE + 0.02 - CAP_PAD, case_d + 0.02, CAP_WALL + 0.01]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -137,30 +142,26 @@ module epd_case() {
|
|
|
// Slip-fit cap — slides over X+ end of case; FPC exits through end-wall slot
|
|
// Slip-fit cap — slides over X+ end of case; FPC exits through end-wall slot
|
|
|
// -------------------------------------------------------------------
|
|
// -------------------------------------------------------------------
|
|
|
module cable_cap() {
|
|
module cable_cap() {
|
|
|
- // Translate so case exterior Y=0, Z=0 aligns with bore inside walls
|
|
|
|
|
- translate([case_w - CAP_ENGAGE + CAP_EXPLODE, -CAP_TOL - CAP_WALL, -CAP_TOL - CAP_WALL])
|
|
|
|
|
|
|
+ _bore_r = (_cap_bore_h-CAP_WALL) / 2;
|
|
|
|
|
+
|
|
|
|
|
+ translate([case_w - CAP_ENGAGE + CAP_EXPLODE, -CAP_TOL - CAP_WALL, -CAP_TOL]){
|
|
|
difference() {
|
|
difference() {
|
|
|
// Outer shell: hull between two square profiles
|
|
// Outer shell: hull between two square profiles
|
|
|
- // z- wall is untapered (full CAP_WALL throughout); y±, z+ taper to CAP_TIP at open end
|
|
|
|
|
hull() {
|
|
hull() {
|
|
|
- translate([0, CAP_WALL - CAP_TIP, 0])
|
|
|
|
|
- cube([0.01, _cap_bore_w + 2 * CAP_TIP, _cap_bore_h + CAP_WALL + CAP_TIP]);
|
|
|
|
|
|
|
+ translate([0, CAP_WALL - CAP_WALL, 0])
|
|
|
|
|
+ cube([0.01, _cap_bore_w + 2 * CAP_WALL, _cap_bore_h + CAP_WALL]);
|
|
|
|
|
|
|
|
translate([CAP_ENGAGE + CAP_WALL - 0.01, 0, 0])
|
|
translate([CAP_ENGAGE + CAP_WALL - 0.01, 0, 0])
|
|
|
- cube([0.01, _cap_bore_w + 2 * CAP_WALL, _cap_bore_h + 2 * CAP_WALL]);
|
|
|
|
|
|
|
+ cube([0.01, _cap_bore_w + 2 * CAP_WALL, _cap_bore_h + CAP_WALL]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // Bore — open on X- side; closes at end wall (local x = CAP_ENGAGE)
|
|
|
|
|
|
|
+ // Rounded bore
|
|
|
translate([-0.01, CAP_WALL, CAP_WALL])
|
|
translate([-0.01, CAP_WALL, CAP_WALL])
|
|
|
- cube([CAP_ENGAGE + 0.02, _cap_bore_w, _cap_bore_h]);
|
|
|
|
|
-
|
|
|
|
|
- // FPC cable exit slot through end wall
|
|
|
|
|
- // Y: centered on case; Z: from FPC pocket floor to display cavity ceiling
|
|
|
|
|
- translate([CAP_ENGAGE - 0.01,
|
|
|
|
|
- CAP_WALL + CAP_TOL + case_d / 2 - _cap_slot_w / 2,
|
|
|
|
|
- CAP_WALL + CAP_TOL + WALL - FPC_FLOOR_DROP])
|
|
|
|
|
- cube([CAP_WALL + 0.02, _cap_slot_w, _cap_slot_h]);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ cube([CAP_ENGAGE-CAP_WALL+0.01, _cap_bore_w, _bore_r*2]);
|
|
|
|
|
+ translate([CAP_ENGAGE - _bore_r, _cap_bore_w, _cap_bore_h - _bore_r])
|
|
|
|
|
+ rotate([90,0,0])
|
|
|
|
|
+ cylinder(h=_cap_bore_w - CAP_WALL, r=_bore_r);
|
|
|
|
|
+ }}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
color("#004B49")
|
|
color("#004B49")
|