diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2026-02-04 11:58:42 +0100 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2026-02-04 11:58:42 +0100 |
| commit | 7d32bce331e495c514a7a2272247b1b348e170b5 (patch) | |
| tree | e37f7bc03e9c25b28d17164bf907c8a8105f1d69 | |
| parent | 268cde2565bad4dd3b94488a006c702dfca1ac81 (diff) | |
start working on calibration stand; refactor
| -rw-r--r-- | body/Modular profile 20x20 - 973094/LICENSE.txt | 1 | ||||
| -rw-r--r-- | body/Modular profile 20x20 - 973094/README.txt | 4 | ||||
| -rw-r--r-- | body/Modular profile 20x20 - 973094/files/Profilo_20x20_L50.stl | bin | 0 -> 341384 bytes | |||
| -rw-r--r-- | body/body.scad | 55 | ||||
| -rw-r--r-- | body/body_config.scad | 37 | ||||
| -rw-r--r-- | body/holes.scad | 32 | ||||
| -rw-r--r-- | body/noctua_nf_a4x20.scad | 2 | ||||
| -rw-r--r-- | body/radxa_zero_3e.scad | 27 | ||||
| -rw-r--r-- | body/stand.scad | 69 | ||||
| -rw-r--r-- | body/veye_imx287.scad | 2 |
10 files changed, 172 insertions, 57 deletions
diff --git a/body/Modular profile 20x20 - 973094/LICENSE.txt b/body/Modular profile 20x20 - 973094/LICENSE.txt new file mode 100644 index 0000000..4cfe772 --- /dev/null +++ b/body/Modular profile 20x20 - 973094/LICENSE.txt @@ -0,0 +1 @@ +This thing was created by Thingiverse user RES3D, and is licensed under Creative Commons - Attribution - Share Alike
\ No newline at end of file diff --git a/body/Modular profile 20x20 - 973094/README.txt b/body/Modular profile 20x20 - 973094/README.txt new file mode 100644 index 0000000..d59e1cb --- /dev/null +++ b/body/Modular profile 20x20 - 973094/README.txt @@ -0,0 +1,4 @@ +Modular profile 20x20 by RES3D on Thingiverse: https://www.thingiverse.com/thing:973094 + +Summary: +Modular profile to create complex frames.
\ No newline at end of file diff --git a/body/Modular profile 20x20 - 973094/files/Profilo_20x20_L50.stl b/body/Modular profile 20x20 - 973094/files/Profilo_20x20_L50.stl Binary files differnew file mode 100644 index 0000000..7fee22d --- /dev/null +++ b/body/Modular profile 20x20 - 973094/files/Profilo_20x20_L50.stl diff --git a/body/body.scad b/body/body.scad index 94d25c7..cd9bd69 100644 --- a/body/body.scad +++ b/body/body.scad @@ -337,7 +337,7 @@ module cam_and_lense() screw_hole( m = m2, id = id, - il = hole_insert_height * 2, + il = m2_hole_insert_height * 2, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_top); @@ -391,7 +391,7 @@ module laser_holder_screw_holes() screw_hole( m = m2, id = id, - il = hole_insert_height * 2, + il = m2_hole_insert_height * 2, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_bottom); @@ -412,7 +412,7 @@ module cam_lense_holder_screw_holes() screw_hole( m = m2, id = id, - il = hole_insert_height, + il = m2_hole_insert_height, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_front); @@ -668,6 +668,22 @@ module other() %radxa(); } +module body_to_print() +{ + difference() + { + scanner_main_frame(); + camera_hole(); + laser_glass_hole(); + laser_holder_screw_holes(); + //m12_connectors(); + m12_connectors_to_cut(); + cam_lense_holder_screw_holes(); + //body_fan_holes(); + radxa_body_cutter(); + } +} + // visual block // visualize camera @@ -691,25 +707,14 @@ module other() } } -union() +*union() { other(); *cam_lense_holder_screw_holes(); - color("green", 0.1) - difference() - { - scanner_main_frame(); - camera_hole(); - laser_glass_hole(); - laser_holder_screw_holes(); - m12_connectors_to_cut(); - //m12_connectors_to_cut(); - cam_lense_holder_screw_holes(); - //body_fan_holes(); - radxa_body_cutter(); - } + color("green", 0.4) + body_to_print(); %m12_connectors(); //m12_connectors_to_cut(); } @@ -726,19 +731,6 @@ union() } } -// printing body -*difference() -{ - scanner_main_frame(); - camera_hole(); - laser_glass_hole(); - laser_holder_screw_holes(); - //m12_connectors(); - m12_connectors_to_cut(); - //body_fan_holes(); - radxa_body_cutter(); -} - *translate([0, -$laserZOffsetMm, 0]) { %laser_body(); @@ -747,4 +739,5 @@ union() //m12_connectors(); //m12_connectors_to_cut(); -//radxa_body_cutter();
\ No newline at end of file +//radxa_body_cutter(); +//body_to_print();
\ No newline at end of file diff --git a/body/body_config.scad b/body/body_config.scad new file mode 100644 index 0000000..44ab49f --- /dev/null +++ b/body/body_config.scad @@ -0,0 +1,37 @@ +include <design.scad> + +// laser +default_laser_d = 14; +default_laser_l = 45; +default_laser_holder_padding = [4, 1.5, 1.5]; + +// d - laser body diameter +// l - laser body length +// padding - see `laser_holder_wo_holes` for details +function laser_holder_size( + d = default_laser_d, + l = 45, + padding = default_laser_holder_padding) = ([d, l / 2, d] + padding * 2); + +// main frame size +// in scanner coords +// inner height is a bit random +// TODO: choose constant size to use one frame for +// many similar ranges +main_frame_height_y = 150; +main_frame_width_x = 34; +main_frame_depth_z = 56; + +// wall and wall thickness +$sbfwo = $scannerBodyFrontWallOffsetMm; +$wawt = -$scannerBodyFrontWallOffsetMm + $scannerBodyWallThicknessMm; +wt = $scannerBodyWallThicknessMm; +wzo = $scannerBodyFrontWallOffsetMm; +fwo = -wzo; +back_wall_offset = fwo - main_frame_depth_z; +bwo = back_wall_offset; +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 diff --git a/body/holes.scad b/body/holes.scad index 5074ddc..86a503a 100644 --- a/body/holes.scad +++ b/body/holes.scad @@ -19,10 +19,14 @@ 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 -hole_insert_height = 4; -hole_insert_diameter = 4; +m2_hole_insert_height = 4; +m2_hole_insert_diameter = 4; padding_around_insert = 2; @@ -149,13 +153,13 @@ module screw_hole(m, id, il, hd, hh, hs, wt = $scannerBodyWallThicknessMm) } } -function padded_hole_d(hd = hole_insert_diameter) = +function padded_hole_d(hd = m2_hole_insert_diameter) = hd + padding_around_insert * 2; // h - height // hd - hole diameter // TODO: support usual holes, not only hot inserts -module hole_holder(h, hd = hole_insert_diameter) +module hole_holder(h, hd = m2_hole_insert_diameter) { d = padded_hole_d(hd); cube_size = [d * 2, d / 2, h]; @@ -187,12 +191,14 @@ module hole_holder(h, hd = hole_insert_diameter) // hs - hole side, see values above for details module hole_holder_hot_inserts( h = main_frame_width_x, - hd = hole_insert_diameter, + hd = m2_hole_insert_diameter, hs) { d = hd + padding_around_insert * 2; rotate(hs) + // TODO: rewrite or create new holes closer to walls (d / 2) + //translate([0, 0, -d / 2]) difference() { hole_holder(h = h, hd = hd); @@ -204,7 +210,7 @@ module hole_holder_hot_inserts( screw_hole( m = m2, id = hd, - il = hole_insert_height, + il = m2_hole_insert_height, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_left); @@ -213,7 +219,7 @@ module hole_holder_hot_inserts( screw_hole( m = m2, id = hd, - il = hole_insert_height, + il = m2_hole_insert_height, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_right); @@ -223,17 +229,19 @@ module hole_holder_hot_inserts( *hole_holder_hot_inserts( h = main_frame_width_x, - hd = hole_insert_diameter, + hd = m2_hole_insert_diameter, hs = hole_side_top); *screw_hole( m = m2, - id = hole_insert_diameter, - il = hole_insert_height * 2, + id = m2_hole_insert_diameter, + il = m2_hole_insert_height * 2, hd = m2_head_diameter, hh = m2_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); + +//screw_hole(2); -//screw_hole(2);
\ No newline at end of file diff --git a/body/noctua_nf_a4x20.scad b/body/noctua_nf_a4x20.scad index 5d3a2a0..23e3dd8 100644 --- a/body/noctua_nf_a4x20.scad +++ b/body/noctua_nf_a4x20.scad @@ -42,7 +42,7 @@ module ld3007ms_holes() screw_hole( m = m2, id = 4, - il = hole_insert_height * 2, + il = m2_hole_insert_height * 2, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_back); diff --git a/body/radxa_zero_3e.scad b/body/radxa_zero_3e.scad index b5eca5f..d7eb353 100644 --- a/body/radxa_zero_3e.scad +++ b/body/radxa_zero_3e.scad @@ -104,8 +104,8 @@ module radxa_zero_3e_mount_plate() outer_cyl_delta = so - oshd / 2; ocd = outer_cyl_delta; bph = radxa_zero_3e_mount_plate_h; - hih = hole_insert_height; - hid = hole_insert_diameter; + hih = m2_hole_insert_height; + hid = m2_hole_insert_diameter; echo("radxa_zero_3e_pcb_distance_between_holes_h: ", radxa_zero_3e_pcb_distance_between_holes_h); echo("dbhh: ", dbhh); @@ -144,16 +144,19 @@ module radxa_zero_3e_mount_plate() // fan: distance between holes fdbh = ld3007ms_distance_between_holes; - // fan/plate hole holders - fan_plate_hole_holder_h = hih - bph; - fphhh = fan_plate_hole_holder_h; - translate([0, 0, -shh / 2]) - translate([0, -radxa_zero_3e_fan_hole_offset / 2 - (oshd - hid), -fphhh / 2]) - for (xo = [-fdbh / 2, fdbh / 2], yo = [0, 0 - fdbh]) + //hull() { - //translate([-dbhw / 2, -so, 0]) - translate([xo, yo, 0]) - cylinder($fn = dToFn(oshd), d = oshd, h = fphhh, center = true); + // fan/plate hole holders + fan_plate_hole_holder_h = hih - bph; + fphhh = fan_plate_hole_holder_h; + translate([0, 0, -shh / 2]) + translate([0, -radxa_zero_3e_fan_hole_offset / 2 - (oshd - hid), -fphhh / 2]) + for (xo = [-fdbh / 2, fdbh / 2], yo = [0, 0 - fdbh]) + { + //translate([-dbhw / 2, -so, 0]) + translate([xo, yo, 0]) + cylinder($fn = dToFn(oshd), d = oshd, h = fphhh, center = true); + } } } } @@ -179,7 +182,7 @@ module radxa_zero_3e_mount_plate_holes() dbhw = radxa_zero_3e_pcb_distance_between_holes_w; dbhh = radxa_zero_3e_pcb_distance_between_holes_h; so = radxa_zero_3e_pcb_screw_offset; - hid = hole_insert_diameter; + hid = m2_hole_insert_diameter; // fan holes translate([0, -radxa_zero_3e_fan_hole_offset, 0]) diff --git a/body/stand.scad b/body/stand.scad new file mode 100644 index 0000000..8b801e4 --- /dev/null +++ b/body/stand.scad @@ -0,0 +1,69 @@ +include <helpers.scad> +include <holes.scad> + +// 80 35 15 + +// screw holes on back plate +// 42.5 47.5 + +// back plate height from profile 47, thickness 10 +// full h 67 +back_plate_s = [80, 10, 67]; +bps = back_plate_s; +// dist bitw back plate and back screw holder 26 +bp_bsh_dist = 26; + +// openscad y is scanner z, and wise versa +back_screw_holder_s = [80, 15, 35]; +bshs = back_screw_holder_s; + +// for base part mounted on profiles +base_wall_thickness = 10; +bwt = base_wall_thickness; + +side_wall_s = [bwt, 50, 55]; +sws = side_wall_s; + +module profile_20x20x50() +{ + scale([1, 1, 2]) + translate([-0.06, -61, -10]) + 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); + +// 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() +{ + translate([-sws[0] / 2 - bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20]) + cube(sws, center = true); + + translate([sws[0] / 2 + bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20]) + cube(sws, center = true); + + 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 diff --git a/body/veye_imx287.scad b/body/veye_imx287.scad index aed7db0..dd414bf 100644 --- a/body/veye_imx287.scad +++ b/body/veye_imx287.scad @@ -249,7 +249,7 @@ module veye_imx287_mount_holes() screw_hole( m = m2, id = id, - il = hole_insert_height, + il = m2_hole_insert_height, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_back); |
