summaryrefslogtreecommitdiff
path: root/body/body.scad
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2026-01-25 13:07:05 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2026-01-25 13:07:05 +0100
commit3939d642549b13760e53686b516e48022f37eb10 (patch)
tree3b115fa8378b73b525618bcbd61651f7459616fa /body/body.scad
parentd2df7e752e422bca585342162c40f6fc256b2103 (diff)
try another way for laser/m12 lense holders
Diffstat (limited to 'body/body.scad')
-rw-r--r--body/body.scad430
1 files changed, 377 insertions, 53 deletions
diff --git a/body/body.scad b/body/body.scad
index 982745a..15faa18 100644
--- a/body/body.scad
+++ b/body/body.scad
@@ -8,15 +8,135 @@ include <noctua_nf_a4x20.scad>
include <radxa_zero_3e.scad>
include <veye_imx287.scad>
+// 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;
+
+module cam_and_lense_new()
+{
+ lhs = laser_holder_size();
+
+ // screw insert diameter
+ id = 4;
+ // cam and lense holder mount plate z size (scanner coords)
+ //calhmpzs = 20;
+ calhmpzs = 8;
+ // cam and lense holder mount plate y height (scanner coords)
+ //calhmpyh = 13;
+ //calhmpyh = 25.714;
+ calhmpyh = 20;
+ // cam and lense holder mount plate z offset (scanner coords)
+ //calhmpzo = 5.07;
+ calhmpzo = -0.93;
+ //tpw = $m12_lense_holder_size;
+ tpw = veye_imx287_pcb_w;
+
+ color("pink", 0.6)
+ union()
+ {
+ //color("green", 0.3)
+ difference()
+ {
+ //color("blue", 0.3)
+ hull()
+ {
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ translate([0, -$lenseSensorDistanceMm, 0])
+ rotate([$sensorLenseAngleDegrees, 0, 0])
+ veye_imx287_mount_plate_outer();
+
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ {
+ //color("blue", 0.3)
+ {
+
+ m12_lense_holder_base();
+ color("blue", 0.3)
+ %m12_lense_holder();
+ }
+ }
+ }
+
+ hull()
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ {
+ m12_lense_circle();
+ translate([0, -$lenseSensorDistanceMm, 0])
+ rotate([$sensorLenseAngleDegrees, 0, 0])
+ veye_imx287_mount_plate_inner();
+ }
+ }
+
+ // top part
+ hull()
+ {
+ // lense holder helper
+ {
+ //color("red", 0.3)
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ //translate([0, -$lenseSensorDistanceMm, 0])
+ //rotate([$sensorLenseAngleDegrees, 0, 0])
+ m12_lense_holder_top();
+ }
+
+ // cam holder helper
+ {
+ pcb_w = veye_imx287_pcb_w;
+ pcb_h = veye_imx287_pcb_h;
+ //color("yellow", 0.5)
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ translate([0, -$lenseSensorDistanceMm, 0])
+ rotate([$sensorLenseAngleDegrees, 0, 0])
+ //cube([pcb_w + $tiny_padding * 2, 1, 1]);
+ veye_imx287_mount_plate_outer_top();
+ }
+
+ // wall near body
+ {
+ //color("orange", 0.3)
+ translate([-pcb_w / 2, -$sbfwo, 116])
+ rotate([90, 0, 0])
+ cube([pcb_w, 14, 1]);
+ }
+ }
+ }
+}
module cam_and_lense()
{
+ lhs = laser_holder_size();
+
+ // screw insert diameter
+ id = 4;
+ // cam and lense holder mount plate z size (scanner coords)
+ calhmpzs = 20;
+ // cam and lense holder mount plate y height (scanner coords)
+ calhmpyh = 13;
+ // cam and lense holder mount plate z offset (scanner coords)
+ calhmpzo = 5.07;
+ //tpw = $m12_lense_holder_size;
+ tpw = veye_imx287_pcb_w;
+
translate([0, 0, $lenseYPosMm])
- rotate([-$opticalAxisAngleDegrees, 0, 0])
+ %rotate([-$opticalAxisAngleDegrees, 0, 0])
{
- //color("black", 0.6)
+ //color("orange", 0.6)
m12_lense_holder();
%m12_lense();
//color("red", 0.3)
@@ -25,12 +145,12 @@ module cam_and_lense()
translate([0, -$lenseSensorDistanceMm, 0])
rotate([$sensorLenseAngleDegrees, 0, 0])
{
- color("yellow", 0.3)
+ //color("yellow", 0.3)
veye_imx287_natural();
}
color("green", 0.5)
- difference()
+ *difference()
{
// outer area
//color("blue", 0.8)
@@ -60,6 +180,168 @@ module cam_and_lense()
}
}
}
+
+ color("green", 0.3)
+ *hull()
+ {
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ {
+ color("green", 0.3)
+ {
+
+ m12_lense_holder_base();
+ {
+
+ translate([0, -$lenseSensorDistanceMm, 0])
+ rotate([$sensorLenseAngleDegrees, 0, 0])
+ veye_imx287_mount_plate_outer();
+ }
+ }
+ }
+
+ // cam and lense mount plate
+ color("red", 0.5)
+ translate([
+ 0,
+ calhmpzo,
+ //0,
+ -$tiny_padding - lhs[2] / 2 + main_frame_height_y])
+ cube([
+ //veye_imx287_pcb_h / 2,
+ tpw,
+ //calhmpzs,
+ //tpw / 2,
+ $tiny_padding,
+ $tiny_padding
+ ],
+ center = true);
+ }
+
+ color("green", 0.3)
+ *hull()
+ {
+ color("red", 0.5)
+ translate([
+ 0,
+ calhmpzo,
+ //0,
+ -$tiny_padding - lhs[2] / 2 + main_frame_height_y])
+ cube([
+ //veye_imx287_pcb_h / 2,
+ tpw,
+ //calhmpzs,
+ //tpw / 2,
+ $tiny_padding,
+ $tiny_padding
+ ],
+ center = true);
+ }
+
+
+ // AAAAAAAAAAAAA
+ //union()
+ color("blue", 0.3)
+ hull()
+ {
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ translate([0, -$lenseSensorDistanceMm, 0])
+ rotate([$sensorLenseAngleDegrees, 0, 0])
+ veye_imx287_mount_plate_outer();
+
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ {
+ color("blue", 0.3)
+ {
+
+ m12_lense_holder_base();
+ }
+ }
+ // second top plate height
+ stph = 5;
+ translate([
+ 0,
+ //-4.917,
+ -3.85,
+ //0,
+ -$tiny_padding - lhs[2] / 2 + main_frame_height_y
+ -stph / 2
+ ])
+ *cube([
+ veye_imx287_pcb_h,// - veye_imx287_mount_plate_corner_radius * 2,
+ //tpw,
+ //calhmpzs,
+ //tpw / 2,
+ $tiny_padding,
+ //$tiny_padding
+ stph
+ ],
+ center = true);
+ }
+
+ {
+ // cam and lense mount plate
+ color("orange", 0.5)
+ translate([
+ 0,
+ calhmpzo,
+ //0,
+ -$tiny_padding -
+ lhs[2] / 2 +
+ main_frame_height_y -
+ calhmpyh / 2])
+ cube([
+ //veye_imx287_pcb_h / 2,
+ tpw,
+ //calhmpzs,
+ //tpw / 2,
+ //10, 10
+ calhmpzs,
+ //$tiny_padding,
+ //$tiny_padding
+ calhmpyh
+ ],
+ center = true);
+
+ translate([0, 0, $lenseYPosMm])
+ rotate([-$opticalAxisAngleDegrees, 0, 0])
+ {
+ color("red", 0.3)
+ {
+
+ m12_lense_holder_base();
+ }
+ }
+ }
+
+ // cam and lense holder screw holes
+ *union()
+ {
+ // multipliers are in scanner coords
+ for (x_mult = [-1, 1], z = [0, -16])
+ {
+ /*translate([
+ -lhs[0] * 1 / 3 * x_mult,
+ //-lhs[1] / 2 * z_mult +- 4,
+ z,
+ -lhs[2] / 2])
+ */
+ translate([
+ veye_imx287_pcb_h / 3 * x_mult,
+ //calhmpzs / 2,
+ calhmpzo,
+ -lhs[2] / 2 + main_frame_height_y])
+ screw_hole(
+ m = m2,
+ id = id,
+ il = hole_insert_height * 2,
+ hd = m2_head_diameter,
+ hh = m2_head_height,
+ hs = hole_side_top);
+ }
+ }
}
module cam_and_lense_holder()
@@ -79,7 +361,7 @@ module camera_hole()
front_glass_hole(gw = 26.6, gh = 19.6, gt = 2, gcr = 1);
}
-module laser_hole()
+module laser_glass_hole()
{
// TODO: calc Y (scanner coords) offset instead of
// hardcoding it
@@ -90,6 +372,31 @@ module laser_hole()
front_glass_hole(gw = 14, gh = 6, gt = 2, gcr = 1);
}
+module laser_holder_screw_holes()
+{
+ lzo = -$laserZOffsetMm;
+ ll = $laserBodyLengthMm;
+ lhs = laser_holder_size();
+ id = 4;
+
+ // multipliers are in scanner coords
+ for (x_mult = [-1, 1], z = [0, -16])
+ {
+ translate([
+ -lhs[0] * 1 / 3 * x_mult,
+ //-lhs[1] / 2 * z_mult +- 4,
+ z,
+ -lhs[2] / 2])
+ screw_hole(
+ m = m2,
+ id = id,
+ il = hole_insert_height * 2,
+ hd = m2_head_diameter,
+ hh = m2_head_height,
+ hs = hole_side_bottom);
+ }
+}
+
module visualize_yz_range()
{
lenseY = $lenseYPosMm;
@@ -167,49 +474,11 @@ module visualize_range()
);
}
-cam_and_lense();
-camera_hole();
-laser_hole();
-//visualize_yz_range();
-//visualize_xz_range();
-visualize_range();
-
-// laser
-translate([0, -$laserZOffsetMm, 0])
-{
- %laser_body();
- laser_holder();
-}
-
-// radxa
-translate([0, 0, 20])
-translate([
- 0,
- -$scannerBodyFrontWallOffsetMm - 5,
- radxa_zero_3e_pcb_h - 10])
-rotate([90, 0, 0])
-//radxa_zero_3e_with_protoboard();
-radxa_zero_3e_with_protoboard_and_connectors();
-
-// noctua fan
-//translate([0, -$laserBodyLengthMm, $lenseYPosMm + 20])
-translate([0, -$scannerBodyFrontWallOffsetMm, 40])
-*noctua_nf_a4x20();
// main frame
module scanner_main_frame()
{
lhs = laser_holder_size();
- wt = $scannerBodyWallThicknessMm;
- wzo = $scannerBodyFrontWallOffsetMm;
-
- // 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;
// inner height, width, depth and radius
ih = main_frame_height_y;
@@ -254,18 +523,73 @@ module scanner_main_frame()
// TODO: and now add some stands for screwing left/right covers
// TODO: simplify inner cut cube after implementing this:
// rounded corners won't be needed anymore
-
- // add outer m12 connectors
- translate([0, -wzo - id, 20 + m12_male_conn_body_thick_part_d + 5])
- m12_female_connector();
-
- translate([0, -wzo - id, 20])
- m12_male_connector();
-
+
// chinese fan
//translate([0, -$scannerBodyFrontWallOffsetMm, 40])
translate([0, ld3007ms_t - wzo - id, 80])
- %ld3007ms();
+ *ld3007ms();
}
-%scanner_main_frame(); \ No newline at end of file
+module m12_connectors()
+{
+ // inner height, width, depth and radius
+ ih = main_frame_height_y;
+ iw = main_frame_width_x;
+ id = main_frame_depth_z;
+ ir = wt;
+
+ {
+ // add outer m12 connectors
+ //scale([1.05, 1, 1.05])
+ translate([0, -wzo - id + $tiny_padding, 20 + m12_male_conn_body_thick_part_d + 5])
+ m12_female_connector();
+
+ translate([0, -wzo - id + $tiny_padding, 20])
+ m12_male_connector();
+ }
+}
+
+module laser_with_holder()
+{
+ translate([0, -$laserZOffsetMm, 0])
+ {
+ %laser_body();
+ %laser_holder();
+ }
+}
+
+module radxa()
+{
+ translate([0, 0, 20])
+ translate([
+ 0,
+ -$scannerBodyFrontWallOffsetMm - 5,
+ radxa_zero_3e_pcb_h - 10])
+ rotate([90, 0, 0])
+ //radxa_zero_3e_with_protoboard();
+ radxa_zero_3e_with_protoboard_and_connectors();
+}
+
+module other()
+{
+ //cam_and_lense();
+ cam_and_lense_new();
+
+ //visualize_yz_range();
+ //visualize_xz_range();
+ visualize_range();
+
+ laser_with_holder();
+ radxa();
+}
+
+*other();
+
+difference()
+{
+ scanner_main_frame();
+ camera_hole();
+ laser_glass_hole();
+ laser_holder_screw_holes();
+ m12_connectors();
+} \ No newline at end of file