From 3939d642549b13760e53686b516e48022f37eb10 Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Sun, 25 Jan 2026 13:07:05 +0100 Subject: try another way for laser/m12 lense holders --- body/body.scad | 430 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 377 insertions(+), 53 deletions(-) (limited to 'body/body.scad') 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 include include +// 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 -- cgit v1.2.3-70-g09d2