summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2026-02-04 16:38:44 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2026-02-04 16:38:44 +0100
commite8645cbdb0279fa97d5d826f61b9476243d86385 (patch)
treea797fd83b6910058facba2f84abd6d0e98a6f359
parent7d32bce331e495c514a7a2272247b1b348e170b5 (diff)
finalize stand and scanner holder prototypes
-rw-r--r--body/body.scad38
-rw-r--r--body/body_config.scad8
-rw-r--r--body/holes.scad23
-rw-r--r--body/stand.scad318
4 files changed, 343 insertions, 44 deletions
diff --git a/body/body.scad b/body/body.scad
index cd9bd69..fc26f2d 100644
--- a/body/body.scad
+++ b/body/body.scad
@@ -497,6 +497,11 @@ module visualize_range()
}
+module scanner_main_frame_side_holes()
+{
+
+}
+
// main frame
module scanner_main_frame()
{
@@ -542,24 +547,19 @@ module scanner_main_frame()
}
}
- // back wall, bottom
- translate([0, bwo, 10])
+ translate(back_bottom_side_hole_offset)
hole_holder_hot_inserts(hs = hole_side_back);
- // back wall, top
- translate([0, bwo, 120])
+ translate(back_top_side_hole_offset)
hole_holder_hot_inserts(hs = hole_side_back);
- // top wall
- translate([0, 0, two])
+ translate(top_side_hole_offset)
hole_holder_hot_inserts(hs = hole_side_top);
- // front wall, bottom
- translate([0, fwo, 12])
+ translate(front_bottom_side_hole_offset)
hole_holder_hot_inserts(hs = hole_side_front);
- // front wall, top
- translate([0, fwo, 83])
+ translate(front_top_side_hole_offset)
hole_holder_hot_inserts(hs = hole_side_front);
// TODO: and now add some stands for screwing left/right covers
@@ -740,4 +740,20 @@ module body_to_print()
//m12_connectors();
//m12_connectors_to_cut();
//radxa_body_cutter();
-//body_to_print(); \ No newline at end of file
+
+
+color("red")
+translate([0, wt, 0])
+translate(back_bottom_side_hole_offset)
+ //translate([0, 0, -20 + sws[2] + bwt])
+ //translate([0, 0, laser_holder_size()[2] / 2 + wt])
+ screw_hole(
+ m = m2,
+ id = 4,
+ il = m2_hole_insert_height * 2,
+ hd = m2_head_diameter,
+ hh = m2_head_height,
+ hs = hole_side_left);
+
+ color("yellow", 0.1)
+body_to_print(); \ No newline at end of file
diff --git a/body/body_config.scad b/body/body_config.scad
index 44ab49f..3b7d77c 100644
--- a/body/body_config.scad
+++ b/body/body_config.scad
@@ -34,4 +34,10 @@ top_wall_offset = -laser_holder_size()[2] / 2 + main_frame_height_y;
two = top_wall_offset;
// scanner coords
-fan_y_offset = 80; \ No newline at end of file
+fan_y_offset = 80;
+
+back_bottom_side_hole_offset = [0, bwo, 10];
+back_top_side_hole_offset = [0, bwo, 120];
+top_side_hole_offset = [0, 0, two];
+front_bottom_side_hole_offset = [0, fwo, 12];
+front_top_side_hole_offset = [0, fwo, 83]; \ No newline at end of file
diff --git a/body/holes.scad b/body/holes.scad
index 86a503a..a5a6b14 100644
--- a/body/holes.scad
+++ b/body/holes.scad
@@ -19,15 +19,22 @@ m2_head_diameter = 3.75;
m2_head_height = 1.9;
m2 = 2;
-m4_head_diameter = 6.8;
-m4_head_height = 3.9;
-m4 = 4;
-
// some default values
// TODO: propagate everywhere
m2_hole_insert_height = 4;
m2_hole_insert_diameter = 4;
+m3_head_diameter = 5.4;
+m3_head_height = 3.25;
+m3 = 3;
+m3_hole_insert_height = 4;
+m3_hole_insert_diameter = 4.5;
+
+
+m4_head_diameter = 6.8;
+m4_head_height = 3.9;
+m4 = 4;
+
padding_around_insert = 2;
// gw - glass width
@@ -239,6 +246,14 @@ module hole_holder_hot_inserts(
hd = m2_head_diameter,
hh = m2_head_height,
hs = hole_side_bottom);
+
+*screw_hole(
+ m = m4 + 0.2,
+ id = m4 + 0.5,
+ il = 15,
+ hd = m4_head_diameter + 1,
+ hh = m4_head_height,
+ hs = hole_side_bottom);
//front_glass_hole(gw = 26.6, gh = 19.6, gt = 2, gcr = 1);
//front_glass_hole(gw = 26.6, gh = 19.6, gt = 2, gcr = 1);
diff --git a/body/stand.scad b/body/stand.scad
index 8b801e4..73f7073 100644
--- a/body/stand.scad
+++ b/body/stand.scad
@@ -1,3 +1,4 @@
+include <body.scad>
include <helpers.scad>
include <holes.scad>
@@ -21,9 +22,12 @@ bshs = back_screw_holder_s;
base_wall_thickness = 10;
bwt = base_wall_thickness;
-side_wall_s = [bwt, 50, 55];
+side_wall_s = [bwt, 65, 55];
sws = side_wall_s;
+limit_switch_pcb_s = [40, 17, 1.6];
+ls_pcb_s = limit_switch_pcb_s;
+
module profile_20x20x50()
{
scale([1, 1, 2])
@@ -31,39 +35,297 @@ module profile_20x20x50()
import("Modular profile 20x20 - 973094/files/Profilo_20x20_L50.stl");
}
-// back plate/motor holder
-color("black", 0.5)
-translate([0, -bps[1] / 2, bps[2] / 2 - 20])
-cube(bps, center = true);
+// hot inserts for m4 are not needed
+module m4_screw_hole(hole_side)
+{
+ screw_hole(
+ m = m4 + 0.2,
+ id = m4 + 0.5,
+ il = 15,
+ hd = m4_head_diameter + 1,
+ hh = m4_head_height,
+ hs = hole_side);
+}
+
+module base_side_screw_holes()
+{
+ // right x offset
+ rxo = bshs[0] / 2 + bwt - m4_head_height;
+ lxo = -rxo;
+ // back y offset
+ byo = sws[1] * 1 / 8;
+ fyo = sws[1] * 7 / 8;
+ zo = -20 / 2;
+
+ translate([lxo, byo, zo])
+ m4_screw_hole(hole_side_left);
-// back screw holder
-color("black", 0.5)
-translate([0, bshs[1] / 2 + bp_bsh_dist, bshs[2] / 2])
-cube(bshs, center = true);
+ translate([lxo, fyo, zo])
+ m4_screw_hole(hole_side_left);
-// profiles base
-color("grey")
+ translate([rxo, byo, zo])
+ m4_screw_hole(hole_side_right);
+
+ translate([rxo, fyo, zo])
+ m4_screw_hole(hole_side_right);
+}
+
+limit_switch_pcb_screw_hole_d = 3.5;
+lspshd = limit_switch_pcb_screw_hole_d;
+// dist betw holes 19 14
+// dist betw hole side and short qpcb side = 1-1.1,
+// and 1.3 for long pcb side
+ls_pcb_h_delta_long = 1.3;
+ls_pcb_h_delta_short = 1.1;
+ls_pcb_h_delta_btw_holes = 19;
+
+// limit switch designed by makerbot.com
+// instructions: www.bigtree-tech.com
+// license: GPLv3
+module limit_switch()
{
- translate([-(bshs[0] - 20) / 2, 0, -20 / 2])
- rotate([-90, 0, 0])
- profile_20x20x50();
+ translate([0, -ls_pcb_s[1] / 2, 0])
+ union()
+ {
+ limit_switch_size = [13, 6.5, 6.5];
+ lss = limit_switch_size;
+ // pcb
+ color("red", 0.7)
+ translate([0, 0, -ls_pcb_s[2] / 2])
+ cube(ls_pcb_s, center = true);
+
+ // switch itself
+
+ // 6.5
+ lss_xo = lss[0] / 2 - ls_pcb_s[0] / 2 + 6.5;
+ lss_yo = -lss[1] / 2 + ls_pcb_s[1] / 2;
+ lss_zo = -lss[2] / 2 - ls_pcb_s[2] / 2;
+ color("black", 0.7)
+ translate([lss_xo, lss_yo, lss_zo])
+ cube(lss, center = true);
+ }
+
+ d = lspshd;
+ x_delta = ls_pcb_h_delta_short;
+ y_delta = ls_pcb_h_delta_long;
+ xd = d / 2 - ls_pcb_s[0] / 2 + x_delta;
+ yd = -d / 2 - y_delta;
+
+ // screw holes
+ color("green", 0.4)
+ union()
+ {
+ translate([xd, yd, 0])
+ cylinder($fn = dToFn(d), d = d, h = 4, center = true);
+
+ translate([xd + ls_pcb_h_delta_btw_holes, yd, 0])
+ cylinder($fn = dToFn(d), d = d, h = 4, center = true);
+ }
+
+ // holes to cut
+ color("blue", 0.4)
+ {
+ m3_id = m3_hole_insert_diameter;
+ m3_h = m3_hole_insert_height;
+ translate([xd, yd, m3_h / 2])
+ cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h, center = true);
+
+ translate([xd + ls_pcb_h_delta_btw_holes, yd, m3_h / 2])
+ cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h, center = true);
+ }
+}
- translate([(bshs[0] - 20) / 2, 0, -20 / 2])
- rotate([-90, 0, 0])
- profile_20x20x50();
+module base()
+{
+
+ // base
+ color("orange", 0.4)
+ {
+ // left wall
+ translate([-sws[0] / 2 - bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20])
+ cube(sws, center = true);
+
+ // right wall
+ translate([sws[0] / 2 + bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20])
+ cube(sws, center = true);
+
+ // top wall
+ top_s = [bshs[0] + bwt * 2, sws[1], bwt];
+ translate([0, top_s[1] / 2, top_s[2] / 2 + bshs[2]])
+ cube(top_s, center = true);
+ }
+}
+
+module stand()
+{
+ // back plate/motor holder
+ color("black", 0.5)
+ translate([0, -bps[1] / 2, bps[2] / 2 - 20])
+ cube(bps, center = true);
+
+ // back screw holder
+ color("black", 0.5)
+ translate([0, bshs[1] / 2 + bp_bsh_dist, bshs[2] / 2])
+ cube(bshs, center = true);
+
+ // profiles base
+ color("grey")
+ {
+ translate([-(bshs[0] - 20) / 2, 0, -20 / 2])
+ rotate([-90, 0, 0])
+ profile_20x20x50();
+
+ translate([(bshs[0] - 20) / 2, 0, -20 / 2])
+ rotate([-90, 0, 0])
+ profile_20x20x50();
+ }
}
-// base
-color("orange", 0.4)
-union()
+module stand_top_m3_holes()
{
- translate([-sws[0] / 2 - bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20])
- cube(sws, center = true);
+ m3_id = m3_hole_insert_diameter;
+ m3_h = m3_hole_insert_height;
- translate([sws[0] / 2 + bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20])
- cube(sws, center = true);
+ rxo = bshs[0] / 2 + bwt / 2;
+ lxo = -rxo;
- top_s = [bshs[0] + bwt * 2, sws[1], bwt];
- translate([0, top_s[1] / 2, top_s[2] / 2 + bshs[2]])
- cube(top_s, center = true);
-} \ No newline at end of file
+ for (xo = [rxo, lxo], yo = [sws[1] * 1 / 6, sws[1] * 3 / 6, sws[1] * 5 / 6])
+ {
+ translate([xo, yo, -20 + sws[2] + bwt + $tiny_padding])
+ cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h * 2, center = true);
+ }
+}
+
+module stand_top_m3_screw_holes()
+{
+ m3_id = m3_hole_insert_diameter;
+ m3_h = m3_hole_insert_height;
+
+ rxo = bshs[0] / 2 + bwt / 2;
+ lxo = -rxo;
+
+
+ for (xo = [rxo, lxo], yo = [sws[1] * 1 / 6, sws[1] * 3 / 6, sws[1] * 5 / 6])
+ {
+ translate([xo, yo, -20 + sws[2] + bwt + $tiny_padding])
+ //cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h * 2, center = true);
+ scale([1, 1, 2])
+ screw_hole(
+ m = m3,
+ id = m3_hole_insert_diameter,
+ il = m3_hole_insert_height * 2,
+ hd = m3_head_diameter,
+ hh = m3_head_height,
+ hs = hole_side_top);
+ }
+}
+
+module base_to_print()
+{
+ difference()
+ {
+ base();
+ translate([0, sws[1], -20 + sws[2]])
+ limit_switch();
+ base_side_screw_holes();
+ stand_top_m3_holes();
+ }
+}
+
+module scanner_side_hole_cutters()
+{
+ id = 4;
+
+ side_offsets = [
+ back_bottom_side_hole_offset + [0, 0, 0],
+ back_top_side_hole_offset + [0, 0, 0],
+ top_side_hole_offset + [0, -id, -id],
+ front_bottom_side_hole_offset + [0, -id * 2, 0],
+ front_top_side_hole_offset + [0, -id * 2, 0]
+ ];
+
+ // left x offset
+ lxo = -main_frame_width_x / 2;
+ rxo = -lxo;
+
+ color("red")
+ //translate([0, 0, 0])
+ translate([0, wt, 0])
+
+ for (so = side_offsets)
+ {
+ translate(so + [lxo, 0, 0])
+ screw_hole(
+ m = m2,
+ id = 4,
+ il = m2_hole_insert_height * 2,
+ hd = m2_head_diameter,
+ hh = m2_head_height,
+ hs = hole_side_left);
+
+ translate(so + [rxo, 0, 0])
+ screw_hole(
+ m = m2,
+ id = 4,
+ il = m2_hole_insert_height * 2,
+ hd = m2_head_diameter,
+ hh = m2_head_height,
+ hs = hole_side_right);
+ }
+}
+
+module scanner_holder()
+{
+ top_s = [bshs[0] + bwt * 2, sws[1], wt * 2];
+ cut_s = [main_frame_width_x, sws[1] * 2, wt + $tiny_padding * 2];
+
+ difference()
+ {
+ color("green", 0.3)
+ translate([0, top_s[1] / 2, top_s[2] / 2 + bshs[2] + bwt])
+ cube(top_s, center = true);
+
+
+ color("red", 0.3)
+ translate([0, top_s[1] / 2, cut_s[2] / 2 + bshs[2] + bwt + wt])
+ cube(cut_s, center = true);
+ }
+}
+
+*stand();
+
+*union()
+{
+ base();
+ translate([0, sws[1], -20 + sws[2]])
+ limit_switch();
+ base_side_screw_holes();
+ stand_top_m3_holes();
+}
+
+module scanner_holder_to_print()
+{
+ difference()
+ {
+ scanner_holder();
+ stand_top_m3_screw_holes();
+ }
+}
+
+*translate([0, -back_wall_offset + wt, -20 + sws[2] + bwt + wt])
+translate([0, 0, laser_holder_size()[2] / 2 + wt])
+{
+ scanner_side_hole_cutters();
+
+ color("yellow", 0.2)
+ body_to_print();
+}
+
+//stand_top_m3_holes();
+//stand_top_m3_screw_holes();
+
+color("grey", 0.6)
+base_to_print();
+
+//scanner_holder();
+scanner_holder_to_print(); \ No newline at end of file