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
+4
-4
@@ -20,23 +20,23 @@ at least 210 × 115 mm.
|
|||||||
| [stl/body.stl](stl/body.stl) | upside down, top on the bed (as exported) | Sides, top and back wall. No supports needed. |
|
| [stl/body.stl](stl/body.stl) | upside down, top on the bed (as exported) | Sides, top and back wall. No supports needed. |
|
||||||
| [stl/bezel.stl](stl/bezel.stl) | face down (as exported) | Front panel with the window and the display bosses. |
|
| [stl/bezel.stl](stl/bezel.stl) | face down (as exported) | Front panel with the window and the display bosses. |
|
||||||
| [stl/base.stl](stl/base.stl) | flat (as exported) | Floor with the board standoffs and the screw holes. |
|
| [stl/base.stl](stl/base.stl) | flat (as exported) | Floor with the board standoffs and the screw holes. |
|
||||||
| [stl/feet.stl](stl/feet.stl) | flat side down (as exported) | 4 feet, print in **TPU**. Each clamps under one of the base screws, with a spigot that locates in the screw's counterbore. |
|
| [stl/feet.stl](stl/feet.stl) | flat side down (as exported) | 6 feet, print in **TPU**. Each clamps under one of the base screws, with a spigot that locates in the screw's counterbore. |
|
||||||
|
|
||||||
PETG is a good choice: the display warms the inside by a few degrees. PLA
|
PETG is a good choice: the display warms the inside by a few degrees. PLA
|
||||||
works if the case stays out of the sun.
|
works if the case stays out of the sun.
|
||||||
|
|
||||||
## Hardware
|
## Hardware
|
||||||
|
|
||||||
- 12 × M3 heat-set inserts, CNC Kitchen M3 × 5.7 (about 4.6 mm OD; the holes
|
- 14 × M3 heat-set inserts, CNC Kitchen M3 × 5.7 (about 4.6 mm OD; the holes
|
||||||
are 4.2 mm and 6 mm deep, set by `insert_d` if your printer runs tighter or
|
are 4.2 mm and 6 mm deep, set by `insert_d` if your printer runs tighter or
|
||||||
looser):
|
looser):
|
||||||
- 4 in the bezel's display bosses
|
- 4 in the bezel's display bosses
|
||||||
- 2 in the bezel's feet
|
- 2 in the bezel's feet
|
||||||
- 2 in the body's rear corners
|
- 2 in the body's rear corners and 2 in its side walls, behind the display
|
||||||
- 4 on the base's board standoffs
|
- 4 on the base's board standoffs
|
||||||
- 4 × M3×6 to bolt the display to the bezel
|
- 4 × M3×6 to bolt the display to the bezel
|
||||||
- 4 × M3×6 to hold the D1 board on its standoffs
|
- 4 × M3×6 to hold the D1 board on its standoffs
|
||||||
- 4 × M3×8 to hold the base on, from below (also with the TPU feet)
|
- 6 × M3×8 to hold the base on, from below (also with the TPU feet)
|
||||||
|
|
||||||
## Assembly
|
## Assembly
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
+34
-18
@@ -7,11 +7,11 @@
|
|||||||
//
|
//
|
||||||
// Assembly:
|
// Assembly:
|
||||||
// 1. Melt M3 heat-set inserts into: 4 display bosses + 2 feet on the bezel,
|
// 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).
|
// 2. Bolt the display to the bezel from behind (4x M3x6).
|
||||||
// 3. Screw the D1 board onto the base (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.
|
// 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
|
// Render one part: openscad -D 'part="body"' -o body.stl vfd-case.scad
|
||||||
// Parts: "assembly" (preview with dummy display + board), "body", "bezel", "base",
|
// 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_y = foot_n / cos(tilt);
|
||||||
foot_xs = [inner_w * 0.25, inner_w * 0.75];
|
foot_xs = [inner_w * 0.25, inner_w * 0.75];
|
||||||
rear_boss = 9; // rear corner boss block size
|
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],
|
rear_screws = [[rear_boss / 2, depth - wall - rear_boss / 2],
|
||||||
[inner_w - 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)"));
|
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])
|
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);
|
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
|
// bosses for the base screws, chamfered up into the walls
|
||||||
for (p = rear_screws) {
|
for (p = rear_screws) body_boss(p, true);
|
||||||
x0 = p[0] < inner_w / 2 ? 0 : inner_w - rear_boss;
|
for (p = front_screws) body_boss(p, false);
|
||||||
xw = p[0] < inner_w / 2 ? 0 : inner_w - 0.01;
|
}
|
||||||
difference() {
|
|
||||||
hull() {
|
// rear: in the corner, chamfered into the side and back walls; front: side wall only
|
||||||
translate([x0, depth - wall - rear_boss, 0]) cube([rear_boss, rear_boss, 10]);
|
module body_boss(p, rear) {
|
||||||
translate([xw, depth - wall - 0.01, 0]) cube([0.01, 0.01, 10 + rear_boss]);
|
x0 = p[0] < inner_w / 2 ? 0 : inner_w - rear_boss;
|
||||||
translate([x0, depth - wall - 0.01, 0]) cube([rear_boss, 0.01, 10 + rear_boss]);
|
xw = p[0] < inner_w / 2 ? 0 : inner_w - 0.01;
|
||||||
translate([xw, depth - wall - rear_boss, 0]) cube([0.01, rear_boss, 10 + rear_boss]);
|
y0 = p[1] - rear_boss / 2;
|
||||||
}
|
difference() {
|
||||||
translate([p[0], p[1], -1]) cylinder(d = insert_d, h = insert_depth + 1);
|
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]);
|
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)
|
// locating rim inside the side and back walls (stops short of the bezel and bosses)
|
||||||
rim_y0 = 20;
|
rim_y0 = 20;
|
||||||
for (x = [clr, inner_w - clr - 1.6])
|
difference() {
|
||||||
translate([x, rim_y0, -0.01]) cube([1.6, depth - wall - rear_boss - clr - rim_y0, 2]);
|
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])
|
translate([rear_boss + clr, depth - wall - clr - 1.6, -0.01])
|
||||||
cube([inner_w - 2 * (rear_boss + clr), 1.6, 2]);
|
cube([inner_w - 2 * (rear_boss + clr), 1.6, 2]);
|
||||||
// board standoffs
|
// board standoffs
|
||||||
@@ -314,7 +330,7 @@ if (part == "assembly") {
|
|||||||
} else if (part == "bezel") {
|
} else if (part == "bezel") {
|
||||||
translate([0, 0, -lip]) multmatrix(M) bezel(); // front face on the bed
|
translate([0, 0, -lip]) multmatrix(M) bezel(); // front face on the bed
|
||||||
} else if (part == "feet") {
|
} 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();
|
translate([i * (foot_d + 5), 0, foot_h]) foot();
|
||||||
} else if (part == "base") {
|
} else if (part == "base") {
|
||||||
translate([0, 0, base_t]) base();
|
translate([0, 0, base_t]) base();
|
||||||
|
|||||||
Reference in new issue
Block a user