Case: two more body screws near the front
The base only screwed to the body at the back. New bosses in the side walls sit just behind the display, clear of the bezel's slide-in path; the base rim gets a gap around them and the feet part now has 6 feet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
18cf03f388
commit
592837c6de
5 files changed
+38
-22
No files matched your search
+34
-18
@@ -7,11 +7,11 @@
|
||||
//
|
||||
// Assembly:
|
||||
// 1. Melt M3 heat-set inserts into: 4 display bosses + 2 feet on the bezel,
|
||||
// 2 rear corner bosses in the body, 4 board standoffs on the base.
|
||||
// 2 rear corner + 2 front side bosses in the body, 4 board standoffs on the base.
|
||||
// 2. Bolt the display to the bezel from behind (4x M3x6).
|
||||
// 3. Screw the D1 board onto the base (4x M3x6).
|
||||
// 4. Slide the bezel (with display) up into the body's side grooves from below.
|
||||
// 5. Wire up, put the body on the base and screw it together from below (4x M3x8).
|
||||
// 5. Wire up, put the body on the base and screw it together from below (6x M3x8).
|
||||
//
|
||||
// Render one part: openscad -D 'part="body"' -o body.stl vfd-case.scad
|
||||
// Parts: "assembly" (preview with dummy display + board), "body", "bezel", "base",
|
||||
@@ -107,9 +107,17 @@ foot_n = n_bezel_in + 6; // insert axis in the beze
|
||||
foot_y = foot_n / cos(tilt);
|
||||
foot_xs = [inner_w * 0.25, inner_w * 0.75];
|
||||
rear_boss = 9; // rear corner boss block size
|
||||
boss_h = 10; // body boss height before the chamfer
|
||||
rear_screws = [[rear_boss / 2, depth - wall - rear_boss / 2],
|
||||
[inner_w - rear_boss / 2, depth - wall - rear_boss / 2]];
|
||||
base_screws = concat([for (x = foot_xs) [x, foot_y]], rear_screws);
|
||||
// front side bosses: far enough back that the display's back stays clear while
|
||||
// the bezel slides in along the panel
|
||||
n_disp_back = n_pcb + pcb_t + disp_back;
|
||||
front_boss_y = ceil((n_disp_back + 2 + (boss_h + rear_boss) * sin(tilt)) / cos(tilt));
|
||||
front_screws = [[rear_boss / 2, front_boss_y + rear_boss / 2],
|
||||
[inner_w - rear_boss / 2, front_boss_y + rear_boss / 2]];
|
||||
body_screws = concat(front_screws, rear_screws);
|
||||
base_screws = concat([for (x = foot_xs) [x, foot_y]], body_screws);
|
||||
|
||||
echo(str("Outer size: ", outer_w, " x ", depth, " x ", height + base_t, " mm (W x D x H)"));
|
||||
|
||||
@@ -151,19 +159,23 @@ module body() {
|
||||
for (i = [0 : 3]) translate([inner_w / 2, depth - wall - 14 - i * 8, height - wall / 2])
|
||||
linear_extrude(wall + 2, center = true) rrect(inner_w - 50, 3, 1.4);
|
||||
}
|
||||
// rear corner bosses for the base screws, chamfered up into the walls
|
||||
for (p = rear_screws) {
|
||||
x0 = p[0] < inner_w / 2 ? 0 : inner_w - rear_boss;
|
||||
xw = p[0] < inner_w / 2 ? 0 : inner_w - 0.01;
|
||||
difference() {
|
||||
hull() {
|
||||
translate([x0, depth - wall - rear_boss, 0]) cube([rear_boss, rear_boss, 10]);
|
||||
translate([xw, depth - wall - 0.01, 0]) cube([0.01, 0.01, 10 + rear_boss]);
|
||||
translate([x0, depth - wall - 0.01, 0]) cube([rear_boss, 0.01, 10 + rear_boss]);
|
||||
translate([xw, depth - wall - rear_boss, 0]) cube([0.01, rear_boss, 10 + rear_boss]);
|
||||
}
|
||||
translate([p[0], p[1], -1]) cylinder(d = insert_d, h = insert_depth + 1);
|
||||
// bosses for the base screws, chamfered up into the walls
|
||||
for (p = rear_screws) body_boss(p, true);
|
||||
for (p = front_screws) body_boss(p, false);
|
||||
}
|
||||
|
||||
// rear: in the corner, chamfered into the side and back walls; front: side wall only
|
||||
module body_boss(p, rear) {
|
||||
x0 = p[0] < inner_w / 2 ? 0 : inner_w - rear_boss;
|
||||
xw = p[0] < inner_w / 2 ? 0 : inner_w - 0.01;
|
||||
y0 = p[1] - rear_boss / 2;
|
||||
difference() {
|
||||
hull() {
|
||||
translate([x0, y0, 0]) cube([rear_boss, rear_boss, boss_h]);
|
||||
translate([xw, y0, 0]) cube([0.01, rear_boss, boss_h + rear_boss]);
|
||||
if (rear) translate([x0, y0 + rear_boss - 0.01, 0]) cube([rear_boss, 0.01, boss_h + rear_boss]);
|
||||
}
|
||||
translate([p[0], p[1], -1]) cylinder(d = insert_d, h = insert_depth + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,8 +222,12 @@ module base() {
|
||||
translate([-wall, 0, -base_t]) cube([outer_w, depth, base_t]);
|
||||
// locating rim inside the side and back walls (stops short of the bezel and bosses)
|
||||
rim_y0 = 20;
|
||||
for (x = [clr, inner_w - clr - 1.6])
|
||||
translate([x, rim_y0, -0.01]) cube([1.6, depth - wall - rear_boss - clr - rim_y0, 2]);
|
||||
difference() {
|
||||
for (x = [clr, inner_w - clr - 1.6])
|
||||
translate([x, rim_y0, -0.01]) cube([1.6, depth - wall - rear_boss - clr - rim_y0, 2]);
|
||||
for (p = front_screws) translate([p[0], p[1], 1])
|
||||
cube([rear_boss + 2 * clr, rear_boss + 2 * clr, 4], center = true);
|
||||
}
|
||||
translate([rear_boss + clr, depth - wall - clr - 1.6, -0.01])
|
||||
cube([inner_w - 2 * (rear_boss + clr), 1.6, 2]);
|
||||
// board standoffs
|
||||
@@ -314,7 +330,7 @@ if (part == "assembly") {
|
||||
} 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
|
||||
for (i = [0 : len(base_screws) - 1]) // 6 feet, flat side down
|
||||
translate([i * (foot_d + 5), 0, foot_h]) foot();
|
||||
} else if (part == "base") {
|
||||
translate([0, 0, base_t]) base();
|
||||
|
||||
Reference in new issue
Block a user