From e69aa61989896a6dfd65acb7753377eb69630203 Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Tue, 6 Jan 2026 16:18:12 +0100 Subject: add openscad prototype for scanner body. draw m12 lense holder --- body/.body.scad.swp | Bin 0 -> 12288 bytes body/body.scad | 7 +++ body/design.scad | 34 ++++++++++++++ body/helpers.scad | 9 ++++ body/m12_lense_holder.scad | 91 +++++++++++++++++++++++++++++++++++++ body/m12_lense_holder_adapter.scad | 1 + 6 files changed, 142 insertions(+) create mode 100644 body/.body.scad.swp create mode 100644 body/body.scad create mode 100644 body/design.scad create mode 100644 body/helpers.scad create mode 100644 body/m12_lense_holder.scad create mode 100644 body/m12_lense_holder_adapter.scad (limited to 'body') diff --git a/body/.body.scad.swp b/body/.body.scad.swp new file mode 100644 index 0000000..9104a06 Binary files /dev/null and b/body/.body.scad.swp differ diff --git a/body/body.scad b/body/body.scad new file mode 100644 index 0000000..506422b --- /dev/null +++ b/body/body.scad @@ -0,0 +1,7 @@ +include +include +include +include + +m12_lense_holder(); +//m12_lense_holder_wo_holes(); \ No newline at end of file diff --git a/body/design.scad b/body/design.scad new file mode 100644 index 0000000..86e598d --- /dev/null +++ b/body/design.scad @@ -0,0 +1,34 @@ +// sample file. +// should be generated by optical_design app: +// https://git.kostovsky.me/optical_design/ +$actualZBaseText = "145.96 (118.96)"; +$opticalAxisAngleDegrees = 28; +$lenseYPosMm = 114; +$focalDistanceMm = 10; +$backFocalDistanceMm = 7.3; +$lenseAperture = 56; +$lenseBodyMaxDiameterMm = 14; +$lenseBodyLengthMm = 17; +$sensorWidthMm = 4.98; +$sensorHeightMm = 3.74; +$sensorCellWidthUm = 6.9; +$sensorCellHeightUm = 6.9; +$sensorVerticalOffsetMm = 0; +$sensorPixelsHeight = 720; +$sensorPixelsWidth = 544; +$zBaseMm = 150; +$zRangeMm = 200; +$laserBodyDiameterMm = 14; +$laserBodyLengthMm = 45; +$laserAngleDegrees = 45; +$laserZOffsetMm = 0; +$scannerBodyWallThicknessMm = 3; +$scannerBodyFrontWallOffsetMm = -24; +$sensorLenseAngleDegrees = 4.61821827339071; +$vFoVDegrees = 20.269505650602042; +$actualZBaseMm = 145.95810178293496; +$actualZRangeMm = 210.77877476859703; +$lenseSensorDistanceMm = 10.429504909559073; +$frontSharpDistanceMm = 241.46849169805705; +$backSharpDistanceMm = 244.1992816062187; +$depthOfFieldMm = 2.730789908161654; diff --git a/body/helpers.scad b/body/helpers.scad new file mode 100644 index 0000000..2ad4a47 --- /dev/null +++ b/body/helpers.scad @@ -0,0 +1,9 @@ +use + +function hole_z(h) = + assert(h > 0, "hole_z: h should be greater than 0") + -h * 0.001; + +function hole_h(h) = + assert(h > 0, "hole_h: h should be greater than 0") + h * 1.002; \ No newline at end of file diff --git a/body/m12_lense_holder.scad b/body/m12_lense_holder.scad new file mode 100644 index 0000000..63df125 --- /dev/null +++ b/body/m12_lense_holder.scad @@ -0,0 +1,91 @@ +// calculate cylinder/circle "Fragments Number" based on diameter +function diameterToFn(d) = (d * PI * 3); + +// m12 cam holder size +$m12_lense_holder_size = 13; +// bottom part height +$m12_lense_holder_bottom_h = 3.5; +// top part height +$m12_lense_holder_top_h = 3.5; +// distance between holes centers +$m12_lense_holder_d_btw_holes = 18; +// screw holes outer diameter +$m12_lense_holder_sh_outer_d = 4; +// screw holes inner diameter +$m12_lense_holder_sh_inner_d = 1.5; +// left hole offset +$m12_lense_holder_l_hole_offset = [-$m12_lense_holder_d_btw_holes / 2, 0, 0]; +// right hole offset +$m12_lense_holder_r_hole_offset = [$m12_lense_holder_d_btw_holes / 2, 0, 0]; +// lense hole diameter +$m12_lense_holder_lense_hole_diameter = 12; + +// m12 lense holder without holes +module m12_lense_holder_wo_holes() +{ + $S = $m12_lense_holder_size; + $cube_size = [$S, $S, $m12_lense_holder_bottom_h]; + + // bottom cube + translate([0, 0, $cube_size[2] / 2]) + cube($cube_size, center = true); + + // top cylinder + translate([0, 0, $cube_size[2]]) + cylinder($fn=diameterToFn($S), h = $m12_lense_holder_top_h, d = $S); + + // screw holes, outer body to cut from + hull() + { + translate($m12_lense_holder_l_hole_offset) + cylinder( + $fn = diameterToFn($m12_lense_holder_sh_outer_d), + h = $m12_lense_holder_bottom_h, + d = $m12_lense_holder_sh_outer_d); + + translate($m12_lense_holder_r_hole_offset) + cylinder( + $fn = diameterToFn($m12_lense_holder_sh_outer_d), + h = $m12_lense_holder_bottom_h, + d = $m12_lense_holder_sh_outer_d); + } +} + +module m12_lense_holder_holes() +{ + // left screw hole + translate($m12_lense_holder_l_hole_offset) + cylinder( + $fn = diameterToFn($m12_lense_holder_sh_inner_d), + h = $m12_lense_holder_bottom_h * 3, + d = $m12_lense_holder_sh_inner_d, + center = true); + + // right screw hole + translate($m12_lense_holder_r_hole_offset) + cylinder( + $fn = diameterToFn($m12_lense_holder_sh_inner_d), + h = $m12_lense_holder_bottom_h * 3, + d = $m12_lense_holder_sh_inner_d, + center = true); + + // lense hole + cylinder( + $fn = diameterToFn($m12_lense_holder_lense_hole_diameter), + d = $m12_lense_holder_lense_hole_diameter, + h = ($m12_lense_holder_bottom_h + $m12_lense_holder_top_h) * 3, + center = true); +} + +module m12_lense_holder() +{ + difference() + { + + m12_lense_holder_wo_holes(); + m12_lense_holder_holes(); + } +} + +//m12_lense_holder(); +//m12_lense_holder_wo_holes(); \ No newline at end of file diff --git a/body/m12_lense_holder_adapter.scad b/body/m12_lense_holder_adapter.scad new file mode 100644 index 0000000..3b099f6 --- /dev/null +++ b/body/m12_lense_holder_adapter.scad @@ -0,0 +1 @@ +include -- cgit v1.2.3-70-g09d2