Case: add TPU feet held by the base screws

Each foot has a spigot that locates in the base's screw counterbore and a
pocket for the screw head; base screws become M3x10. Base unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-11-01 13:06:07 +01:00
1 parent 494b106f0c
commit 9853841a21
3 files changed
+41 -3

No files matched your search

+34
View File
@@ -62,6 +62,14 @@ screw_d = 3.4; // M3 clearance
head_d = 6.2; // M3 head counterbore in the base
head_depth = 2;
/* [TPU feet, held by the base screws (use M3x10 instead of M3x8)] */
foot_d = 14; // fits inside the base outline at the rear corners
foot_h = 4.5; // below the base
foot_spigot_h = 1.8; // locates in the base's screw counterbore
foot_spigot_d = head_d - 0.2;
foot_head_d = 6.6; // pocket for the screw head (from below)
foot_head_depth = 3.5; // M3 socket head is 3 mm tall
/* [WEMOS D1 R1 (Arduino UNO footprint)] */
board_l = 68.58; // along the case depth, connector edge at the back
board_w = 53.34;
@@ -227,6 +235,27 @@ module base() {
function board_xy(h) = [board_x0 + h[1], board_conn_y - h[0], 0];
// One foot, top face at z = 0 (against the base's underside), centred on a screw.
module foot() {
difference() {
union() {
translate([0, 0, -foot_h]) cylinder(d = foot_d, h = foot_h);
translate([0, 0, -0.01]) cylinder(d = foot_spigot_d, h = foot_spigot_h + 0.01);
}
translate([0, 0, -foot_h - 1]) cylinder(d = screw_d, h = foot_h + foot_spigot_h + 2);
translate([0, 0, -foot_h - 1]) cylinder(d = foot_head_d, h = foot_head_depth + 1);
// soften the bottom edge
translate([0, 0, -foot_h - 0.01]) difference() {
cylinder(d = foot_d + 1, h = 1);
cylinder(d1 = foot_d - 2, d2 = foot_d + 0.01, h = 1.01);
}
}
}
module feet_in_place() {
for (p = base_screws) translate([p[0], p[1], -base_t]) foot();
}
module tie_anchor() {
difference() {
translate([-5, -3, 0]) cube([10, 6, 5]);
@@ -265,6 +294,7 @@ if (part == "assembly") {
color("SlateGray", 0.5) body();
color("DimGray") bezel();
color("Gainsboro") base();
color("Black") feet_in_place();
color("SeaGreen") display_dummy();
color("SteelBlue") board_dummy();
} else if (part == "section") {
@@ -283,6 +313,9 @@ if (part == "assembly") {
translate([0, depth, height]) rotate([180, 0, 0]) body(); // top on the bed
} else if (part == "bezel") {
translate([0, 0, -lip]) multmatrix(M) bezel(); // front face on the bed
} else if (part == "feet") {
for (i = [0 : len(base_screws) - 1]) // 4 feet, flat side down
translate([i * (foot_d + 5), 0, foot_h]) foot();
} else if (part == "base") {
translate([0, 0, base_t]) base();
}
@@ -294,6 +327,7 @@ else if (part == "check_body_base") intersection() { body(); base(); }
else if (part == "check_bezel_base") intersection() { bezel(); base(); }
else if (part == "check_board") intersection() { union() { body(); bezel(); base(); display_dummy(); } board_dummy(); }
else if (part == "check_display_base") intersection() { base(); display_dummy(); }
else if (part == "check_feet_base") intersection() { base(); feet_in_place(); }
// The bezel slides in from below along the panel: sweep it (with the display) down and check.
else if (part == "check_insertion") intersection() {
body();