summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2026-01-06 16:18:12 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2026-01-06 16:18:12 +0100
commite69aa61989896a6dfd65acb7753377eb69630203 (patch)
treeea0f1dc6dba37cd42ca9a27ae902e88cd1828ecd
add openscad prototype for scanner body. draw m12 lense holder
-rw-r--r--body/.body.scad.swpbin0 -> 12288 bytes
-rw-r--r--body/body.scad7
-rw-r--r--body/design.scad34
-rw-r--r--body/helpers.scad9
-rw-r--r--body/m12_lense_holder.scad91
-rw-r--r--body/m12_lense_holder_adapter.scad1
6 files changed, 142 insertions, 0 deletions
diff --git a/body/.body.scad.swp b/body/.body.scad.swp
new file mode 100644
index 0000000..9104a06
--- /dev/null
+++ b/body/.body.scad.swp
Binary files 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 <design.scad>
+include <helpers.scad>
+include <m12_lense_holder.scad>
+include <m12_lense_holder_adapter.scad>
+
+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 <design.scad>
+
+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 <m12_lense_holder.scad>