diff --git a/hardware/README.md b/hardware/README.md index 63318ab..168d890 100644 --- a/hardware/README.md +++ b/hardware/README.md @@ -105,8 +105,8 @@ The ESP8266 and GoPro talk over Wi-Fi — **no data cable between them**. The on | | W × D × H (mm) | |---|---| -| Case body external | ~56.8 × 36.9 × 19.0 | +| Case body external | ~56.8 × 38.2 × 19.0 | | Lid external | ~56.8 × 32.8 × 4.0 | -| Tripod clamp | ~43.0 × 54.3 × 16.0 | +| Tripod clamp | ~43.0 × 56.9 × 16.0 | | Clamp pole fit | Nominal 35mm; smaller poles TBD / may need inserts | | Total weight | TBD after prototype print | diff --git a/hardware/case/case-body-v3.stl b/hardware/case/case-body-v3.stl index ceee1f4..af38598 100644 Binary files a/hardware/case/case-body-v3.stl and b/hardware/case/case-body-v3.stl differ diff --git a/hardware/case/full-case-preview-v3.stl b/hardware/case/full-case-preview-v3.stl index 2122cdd..70ced51 100644 Binary files a/hardware/case/full-case-preview-v3.stl and b/hardware/case/full-case-preview-v3.stl differ diff --git a/hardware/case/tripod-case-v3.scad b/hardware/case/tripod-case-v3.scad index 596585b..586f344 100644 --- a/hardware/case/tripod-case-v3.scad +++ b/hardware/case/tripod-case-v3.scad @@ -29,12 +29,15 @@ mouth_width = 13.0; // clamp opening m3_clearance = 3.4; // M3 screw clearance nut_flat = 6.4; // M3 nut trap flat-to-flat -// Dovetail interface -rail_z = outer_h * 0.78; -rail_depth = 5.0; -rail_open_w = 12.0; -rail_back_w = 18.0; -rail_clearance = 0.35; +// Dovetail slide interface +// Male rail is on the case; matching female socket is on the tripod clamp. +// This is easier to inspect and avoids the previous mismatched "two lips + tab" geometry. +rail_z = outer_h * 0.78; +rail_depth = 5.0; +rail_neck_w = 12.0; // narrow width at case wall / slot opening +rail_outer_w = 18.0; // wider retained edge +rail_clearance = 0.45; // FDM sliding clearance per side-ish +socket_wall = 2.2; // Cable ports usb_port_w = 12; usb_port_h = 6; @@ -104,17 +107,15 @@ module screw_post(x, y) { } } -module dovetail_socket_rails() { - // Female-ish dovetail receiver on the case back. The clamp's male dovetail slides vertically. - // Two angled lips are intentionally proud of the rear wall for printability and strength. - for (side = [-1, 1]) { - translate([side*(rail_open_w/2 + 1.3), outer_d/2 + 0.9, outer_h/2]) - rotate([0, 0, side*8]) - cube([3.0, rail_depth + 1.0, rail_z], center=true); - } - // Bottom stop so clamp cannot slide all the way through. - translate([0, outer_d/2 + 1.3, outer_h*0.12]) - cube([rail_back_w + 2, rail_depth, 2.4], center=true); +module case_male_dovetail_rail() { + // Positive tapered rail on the case back. Cross-section is narrow at the + // wall and wider at the outside, so the clamp socket captures it. + translate([0, outer_d/2 - 0.15, outer_h/2]) + dovetail_prism(rail_z, rail_neck_w, rail_outer_w, rail_depth); + + // Bottom stop so the clamp socket cannot slide past the case. + translate([0, outer_d/2 + rail_depth/2, outer_h*0.12]) + rounded_cube_centered(rail_outer_w + 3.0, rail_depth + 0.8, 2.4, 0.8); } module case_body() { @@ -122,7 +123,7 @@ module case_body() { case_shell(); for (x = [-1, 1], y = [-1, 1]) screw_post(x*(outer_w/2 - 5), y*(outer_d/2 - 5)); - dovetail_socket_rails(); + case_male_dovetail_rail(); } } @@ -173,18 +174,33 @@ module clamp_ears() { } } -module male_dovetail_tab() { +module clamp_dovetail_socket() { outer_r = pole_dia/2 + clamp_thick; - // Tab on rear of clamp, opposite the mouth. Slides into case rails. - translate([0, -outer_r - rail_depth + 0.4, 0]) - dovetail_prism(clamp_width, rail_open_w - rail_clearance, rail_back_w - rail_clearance, rail_depth); + socket_outer_w = rail_outer_w + socket_wall*2; + socket_depth = rail_depth + socket_wall*2; + + // Solid boss on the rear of the clamp, opposite the tightening mouth. + // A matching dovetail void is cut through it along Z so the case rail + // slides in from the top/bottom with practical FDM clearance. + difference() { + translate([0, -outer_r - socket_depth/2 + socket_wall, 0]) + rounded_cube_centered(socket_outer_w, socket_depth, clamp_width, 1.2); + + translate([0, -outer_r - 0.15, 0]) + dovetail_prism( + clamp_width + 1.0, + rail_neck_w + rail_clearance, + rail_outer_w + rail_clearance, + rail_depth + 0.6 + ); + } } module tripod_clamp() { union() { clamp_ring_with_mouth(); clamp_ears(); - male_dovetail_tab(); + clamp_dovetail_socket(); } } diff --git a/hardware/case/tripod-clamp-v3.stl b/hardware/case/tripod-clamp-v3.stl index c0af49a..fa616d2 100644 Binary files a/hardware/case/tripod-clamp-v3.stl and b/hardware/case/tripod-clamp-v3.stl differ