summaryrefslogtreecommitdiff
path: root/body
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2026-01-08 02:04:31 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2026-01-08 02:04:31 +0100
commit466513eaded54d9fbef8943ad6c1eaca715768f5 (patch)
tree873276b91f82b22f254a1fb63ea0a3674a07dcd2 /body
parent8b676dab039a0d534d3e9f63c78a5826aa2ec264 (diff)
add imx287 holder draft, add radxa sd card, move laser tensioning holes
Diffstat (limited to 'body')
-rw-r--r--body/body.scad15
-rw-r--r--body/laser_holder.scad4
-rw-r--r--body/noctua_nf_a4x20.scad10
-rw-r--r--body/radxa_zero_3e.scad7
-rw-r--r--body/veye_imx287.scad71
5 files changed, 97 insertions, 10 deletions
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