From 466513eaded54d9fbef8943ad6c1eaca715768f5 Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Thu, 8 Jan 2026 02:04:31 +0100 Subject: add imx287 holder draft, add radxa sd card, move laser tensioning holes --- body/body.scad | 15 ++++++---- body/laser_holder.scad | 4 ++- body/noctua_nf_a4x20.scad | 10 +++++-- body/radxa_zero_3e.scad | 7 +++++ body/veye_imx287.scad | 71 ++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 97 insertions(+), 10 deletions(-) (limited to 'body') diff --git a/body/body.scad b/body/body.scad index 632e8cf..16459ba 100644 --- a/body/body.scad +++ b/body/body.scad @@ -32,7 +32,10 @@ translate([0, -$laserZOffsetMm, 0]) // radxa translate([0, 0, 20]) -translate([0, 10, radxa_zero_3e_pcb_h - 5]) +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(); @@ -42,10 +45,6 @@ radxa_zero_3e_with_protoboard_and_connectors(); translate([0, -$scannerBodyFrontWallOffsetMm, 40]) *noctua_nf_a4x20(); -// chinese fan -translate([0, -$scannerBodyFrontWallOffsetMm, 40]) -%ld3007ms(); - // main frame module scanner_main_frame() { @@ -93,6 +92,7 @@ module scanner_main_frame() // now try to cut body with rounded corners to simplify // cnc manufacturing + // TODO: move this shit to a module difference() { hull() @@ -134,6 +134,11 @@ module scanner_main_frame() translate([0, -wzo - id, 20]) m12_male_connector(); + + // chinese fan + //translate([0, -$scannerBodyFrontWallOffsetMm, 40]) + translate([0, ld3007ms_t - wzo - id, 80]) + %ld3007ms(); } %scanner_main_frame(); \ No newline at end of file diff --git a/body/laser_holder.scad b/body/laser_holder.scad index 8e3d689..34a6466 100644 --- a/body/laser_holder.scad +++ b/body/laser_holder.scad @@ -27,7 +27,9 @@ module laser_holder_wo_holes( // hole will have diameter `hd` and height `hh` module laser_holder_tension_hole(d = default_laser_d, hd = 4, hh = 4) { - rotate([0, -45, 0]) + //tension_holes_angle = -45; + tension_holes_angle = -90; + rotate([0, tension_holes_angle, 0]) translate([0, 0, d / 2 - hh / 2]) cylinder($fn = diameterToFn(hd), d = hd, h = hh * 3); } diff --git a/body/noctua_nf_a4x20.scad b/body/noctua_nf_a4x20.scad index 87326a9..77a26df 100644 --- a/body/noctua_nf_a4x20.scad +++ b/body/noctua_nf_a4x20.scad @@ -2,6 +2,10 @@ noctua_nf_a4x20_h = 40; noctua_nf_a4x20_w = 40; noctua_nf_a4x20_t = 20; +ld3007ms_w = 30; +ld3007ms_h = 30; +ld3007ms_t = 8; + module noctua_nf_a4x20() { translate([-noctua_nf_a4x20_w / 2, 0, -noctua_nf_a4x20_w / 2]) @@ -13,9 +17,9 @@ module noctua_nf_a4x20() // some chinese fan, 30x30x8 module ld3007ms() { - w = 30; - h = 30; - t = 8; + w = ld3007ms_w; + h = ld3007ms_h; + t = ld3007ms_t; translate([0, -t / 2, 0]) rotate([90, 0, 0]) diff --git a/body/radxa_zero_3e.scad b/body/radxa_zero_3e.scad index 4bf375f..731f883 100644 --- a/body/radxa_zero_3e.scad +++ b/body/radxa_zero_3e.scad @@ -25,6 +25,13 @@ module radxa_zero_3e() rotate([0, 0, -90]) translate([0, 0, pcb_t]) import("rs109_pcba.stl"); + + // sd card + sd_card_z_offset = 3; + sd_card_w = 11; + + translate([0, -pcb_h, -3]) + cube([sd_card_w, sd_card_z_offset * 2, 1], center = true); } module rpi_zero_protoboard() diff --git a/body/veye_imx287.scad b/body/veye_imx287.scad index 0b89873..3576105 100644 --- a/body/veye_imx287.scad +++ b/body/veye_imx287.scad @@ -101,4 +101,73 @@ module veye_imx287_natural() } } -//veye_imx287_natural(); \ No newline at end of file +module veye_imx287_mount_plate() +{ + w = veye_imx287_pcb_w; + h = veye_imx287_pcb_h; + frame_w = 6; + iw = w - frame_w; + ih = h - frame_w; + t = 2; + corner_radius = 2; + cr = corner_radius; + + // holes + hd = 2.05; + hh = 10; + // distance between holes + h_delta = 25; + hr = hd / 2; + + // sensor has non-zero thickness, so put holder + // closer to pcb + translate([0, -imx287_thickness, 0]) + // move to zero + translate([0, t / 2, 0]) + difference() + { + // outer shape + hull() + { + for ( + dx = [w / 2 - cr, -w / 2 + cr], + dy = [w / 2 - cr, -w / 2 + cr]) + { + translate([dx, 0, dy]) + translate([0, t / 2, 0]) + rotate([90, 0, 0]) + cylinder($fn = dToFn(cr * 2), r = cr, h = t); + } + } + // to cut + hull() + { + for ( + dx = [iw / 2 - cr, -iw / 2 + cr], + dy = [iw / 2 - cr, -iw / 2 + cr]) + { + translate([dx, 0, dy]) + translate([0, t, 0]) + rotate([90, 0, 0]) + cylinder($fn = dToFn(cr * 2), r = cr, h = t * 2); + } + } + // holes + { + for ( + dx = [h_delta / 2, -h_delta / 2], + dy = [h_delta / 2, -h_delta / 2]) + { + translate([dx, 0, dy]) + translate([0, hh / 2, 0]) + rotate([90, 0, 0]) + cylinder($fn = dToFn(hd), d = hd, h = hh); + } + } + } +} + +color("yellow", 0.3) +*veye_imx287_natural(); +color("green", 0.3) +*veye_imx287_mount_plate(); \ No newline at end of file -- cgit v1.2.3-70-g09d2