fix: flip dovetail receiver onto case

This commit is contained in:
2026-05-22 23:48:42 +00:00
parent 4c4368a79f
commit c548dc890b
5 changed files with 42 additions and 35 deletions
+2 -2
View File
@@ -105,8 +105,8 @@ The ESP8266 and GoPro talk over Wi-Fi — **no data cable between them**. The on
| | W × D × H (mm) | | | W × D × H (mm) |
|---|---| |---|---|
| Case body external | ~56.8 × 38.2 × 19.0 | | Case body external | ~56.8 × 42.0 × 19.2 |
| Lid external | ~56.8 × 32.8 × 4.0 | | Lid external | ~56.8 × 32.8 × 4.0 |
| Tripod clamp | ~43.0 × 56.9 × 16.0 | | Tripod clamp | ~43.0 × 54.5 × 16.0 |
| Clamp pole fit | Nominal 35mm; smaller poles TBD / may need inserts | | Clamp pole fit | Nominal 35mm; smaller poles TBD / may need inserts |
| Total weight | TBD after prototype print | | Total weight | TBD after prototype print |
Binary file not shown.
Binary file not shown.
+38 -31
View File
@@ -30,13 +30,13 @@ m3_clearance = 3.4; // M3 screw clearance
nut_flat = 6.4; // M3 nut trap flat-to-flat nut_flat = 6.4; // M3 nut trap flat-to-flat
// Dovetail slide interface // Dovetail slide interface
// Male rail is on the case; matching female socket is on the tripod clamp. // Female receiver is on the case; male tab is on the tripod clamp.
// This is easier to inspect and avoids the previous mismatched "two lips + tab" geometry. // This makes the separate parts visually/physically obvious: tab slides into slot.
rail_z = outer_h * 0.78; rail_z = outer_h * 0.78;
rail_depth = 5.0; rail_depth = 5.0;
rail_neck_w = 12.0; // narrow width at case wall / slot opening rail_neck_w = 12.0; // narrow side of the trapezoid profile
rail_outer_w = 18.0; // wider retained edge rail_outer_w = 18.0; // wide side of the trapezoid profile
rail_clearance = 0.45; // FDM sliding clearance per side-ish rail_clearance = 0.55; // FDM sliding clearance
socket_wall = 2.2; socket_wall = 2.2;
// Cable ports // Cable ports
@@ -107,15 +107,30 @@ module screw_post(x, y) {
} }
} }
module case_male_dovetail_rail() { module case_dovetail_socket() {
// Positive tapered rail on the case back. Cross-section is narrow at the // Receiver boss on the case back. A dovetail-shaped through-slot is cut
// wall and wider at the outside, so the clamp socket captures it. // vertically through it so the clamp's male tab slides down from above.
translate([0, outer_d/2 - 0.15, outer_h/2]) socket_outer_w = rail_outer_w + socket_wall*2;
dovetail_prism(rail_z, rail_neck_w, rail_outer_w, rail_depth); socket_depth = rail_depth + socket_wall*2;
boss_y0 = outer_d/2 - 0.15;
// Bottom stop so the clamp socket cannot slide past the case. difference() {
translate([0, outer_d/2 + rail_depth/2, outer_h*0.12]) translate([0, boss_y0 + socket_depth/2, outer_h/2])
rounded_cube_centered(rail_outer_w + 3.0, rail_depth + 0.8, 2.4, 0.8); rounded_cube_centered(socket_outer_w, socket_depth, rail_z + socket_wall*2, 1.2);
// Through-cut, centered within the receiver boss, oversized for FDM.
translate([0, boss_y0 + socket_wall, outer_h/2])
dovetail_prism(
rail_z + socket_wall*3,
rail_neck_w + rail_clearance,
rail_outer_w + rail_clearance,
rail_depth + rail_clearance
);
}
// Bottom stop shelf: clamp tab slides down until it rests here.
translate([0, boss_y0 + socket_depth/2, outer_h*0.08])
rounded_cube_centered(socket_outer_w, socket_depth, 1.8, 0.8);
} }
module case_body() { module case_body() {
@@ -123,7 +138,7 @@ module case_body() {
case_shell(); case_shell();
for (x = [-1, 1], y = [-1, 1]) for (x = [-1, 1], y = [-1, 1])
screw_post(x*(outer_w/2 - 5), y*(outer_d/2 - 5)); screw_post(x*(outer_w/2 - 5), y*(outer_d/2 - 5));
case_male_dovetail_rail(); case_dovetail_socket();
} }
} }
@@ -174,33 +189,25 @@ module clamp_ears() {
} }
} }
module clamp_dovetail_socket() { module clamp_male_dovetail_tab() {
outer_r = pole_dia/2 + clamp_thick; outer_r = pole_dia/2 + clamp_thick;
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. // Positive tab on rear of clamp, opposite the tightening mouth. This is
// A matching dovetail void is cut through it along Z so the case rail // intentionally the moving/replaceable side: it slides into the case socket.
// slides in from the top/bottom with practical FDM clearance. translate([0, -outer_r - rail_depth + 0.2, 0])
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( dovetail_prism(
clamp_width + 1.0, rail_z - rail_clearance,
rail_neck_w + rail_clearance, rail_neck_w - rail_clearance,
rail_outer_w + rail_clearance, rail_outer_w - rail_clearance,
rail_depth + 0.6 rail_depth - 0.25
); );
} }
}
module tripod_clamp() { module tripod_clamp() {
union() { union() {
clamp_ring_with_mouth(); clamp_ring_with_mouth();
clamp_ears(); clamp_ears();
clamp_dovetail_socket(); clamp_male_dovetail_tab();
} }
} }
Binary file not shown.