From 7d3798f2a7c28d558d975d1844bb729fe8de0923 Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Wed, 7 Jan 2026 15:20:08 +0100 Subject: add fans and radxa; implement body prototype --- body/body.scad | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) (limited to 'body/body.scad') diff --git a/body/body.scad b/body/body.scad index 506422b..2863d99 100644 --- a/body/body.scad +++ b/body/body.scad @@ -2,6 +2,127 @@ include include include include +include +include +include -m12_lense_holder(); -//m12_lense_holder_wo_holes(); \ No newline at end of file +// cam + lense +translate([0, 0, $lenseYPosMm]) +rotate([-$opticalAxisAngleDegrees, 0, 0]) +{ + m12_lense_holder(); + %m12_lense(); + + translate([0, -$lenseSensorDistanceMm, 0]) + rotate([$sensorLenseAngleDegrees, 0, 0]) + veye_imx287_natural(); +} + +// laser +translate([0, -$laserZOffsetMm, 0]) +{ + %laser_body(); + laser_holder(); +} + +// radxa +translate([0, 0, 20]) +translate([0, 10, radxa_zero_3e_pcb_h - 5]) +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(); + +// chinese fan +translate([0, -$scannerBodyFrontWallOffsetMm, 40]) +%ld3007ms(); + +// 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 = 65; + + // inner height, width, depth and radius + ih = main_frame_height_y; + iw = main_frame_width_x; + id = main_frame_depth_z; + ir = wt; + + // front wall + translate([-iw / 2, -wzo, -lhs[2] / 2]) + cube([iw, wt, ih]); + + // back wall + translate([0, -wzo - id, 0]) + // initial positioning + translate([-iw / 2, -wt, -lhs[2] / 2]) + cube([iw, wt, ih]); + + // bottom wall + // apply body sizes + translate([0, -wzo, -lhs[2] / 2]) + // initial positioning + translate([0, -id / 2, -wt / 2]) + cube([iw, id, wt], center = true); + + // top wall + // apply body sizes + translate([0, -wzo, -lhs[2] / 2 + ih]) + // initial positioning + translate([0, -id / 2, wt / 2]) + cube([iw, id, wt], center = true); + + // now try to cut body with rounded corners to simplify + // cnc manufacturing + + difference() + { + hull() + { + // outer cylinders + union() + { + for (yd = [0, -id], zd = [0, ih]) + { + translate([0, -wzo + yd, -lhs[2] / 2 + zd]) + rotate([0, 90, 0]) + cylinder($fn = dToFn(ir * 2), r = ir, h = iw, center = true); + } + } + } + // inner cylinders + hull() + { + union() + { + for (yd = [0 - ir, -id + ir], zd = [0 + ir, ih - ir]) + { + translate([0, -wzo + yd, -lhs[2] / 2 + zd]) + rotate([0, 90, 0]) + // scale by x a bit to fully cut + cylinder($fn = dToFn(ir * 2), r = ir, h = iw * 1.1, center = true); + } + } + } + } + + // 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 +} + +%scanner_main_frame(); \ No newline at end of file -- cgit v1.2.3-70-g09d2