summaryrefslogtreecommitdiff
path: root/body/radxa_zero_3e.scad
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2026-01-31 15:44:57 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2026-01-31 15:44:57 +0100
commit392ab1017c0491412d452013f2af02b7bf06cd1a (patch)
tree2f56078030f031f13faa59186a9a67e719963075 /body/radxa_zero_3e.scad
parent1c6a2cbe7b799e6ccb387b45546c779dcf9d3a9b (diff)
prepared body with all holes except mounting holes
Diffstat (limited to 'body/radxa_zero_3e.scad')
-rw-r--r--body/radxa_zero_3e.scad188
1 files changed, 187 insertions, 1 deletions
diff --git a/body/radxa_zero_3e.scad b/body/radxa_zero_3e.scad
index 731f883..b5eca5f 100644
--- a/body/radxa_zero_3e.scad
+++ b/body/radxa_zero_3e.scad
@@ -1,12 +1,21 @@
include <helpers.scad>
+include <noctua_nf_a4x20.scad>
radxa_zero_3e_pcb_w = 30;
radxa_zero_3e_pcb_h = 65;
radxa_zero_3e_pcb_thickness = 1.6;
+radxa_zero_3e_pcb_screw_offset = 3.5;
+radxa_zero_3e_pcb_distance_between_holes_w = 23;
+radxa_zero_3e_pcb_distance_between_holes_h = radxa_zero_3e_pcb_h - radxa_zero_3e_pcb_screw_offset * 2;
+
rpi_protoboard_connectors_h = 12;
rpi_protoboard_z_offset = 15;
+radxa_zero_3e_fan_hole_offset = 28;
+radxa_zero_3e_mount_plate_screw_holder_height = 4;
+radxa_zero_3e_mount_plate_h = 2;
+
function radxa_zero_3e_pcb_size() = [
radxa_zero_3e_pcb_w,
radxa_zero_3e_pcb_h,
@@ -80,9 +89,186 @@ module radxa_zero_3e_with_protoboard_and_connectors()
radxa_zero_3e_rj45_male();
}
+module radxa_zero_3e_mount_plate()
+{
+ // outer screw holder diameter. there is no more space there,
+ // so only round 6 mm screw holders will fit under radxa
+ oshd = 6;
+ // screw holder height
+ shh = radxa_zero_3e_mount_plate_screw_holder_height;
+
+ dbhw = radxa_zero_3e_pcb_distance_between_holes_w;
+ dbhh = radxa_zero_3e_pcb_distance_between_holes_h;
+ so = radxa_zero_3e_pcb_screw_offset;
+
+ outer_cyl_delta = so - oshd / 2;
+ ocd = outer_cyl_delta;
+ bph = radxa_zero_3e_mount_plate_h;
+ hih = hole_insert_height;
+ hid = hole_insert_diameter;
+
+ echo("radxa_zero_3e_pcb_distance_between_holes_h: ", radxa_zero_3e_pcb_distance_between_holes_h);
+ echo("dbhh: ", dbhh);
+
+ difference()
+ {
+ union()
+ {
+ // hole holders
+ translate([0, 0, -shh / 2])
+ for (xo = [-dbhw / 2, dbhw / 2], yo = [-so, -so - dbhh])
+ {
+ //translate([-dbhw / 2, -so, 0])
+ translate([xo, yo, 0])
+ cylinder($fn = dToFn(oshd), d = oshd, h = shh, center = true);
+ }
+
+ // outer hole holders
+ *translate([0, 0, -shh / 2])
+ for (xo = [-dbhw / 2 - ocd, dbhw / 2 + ocd], yo = [-so + ocd, -so - dbhh - ocd])
+ {
+ translate([xo, yo, 0])
+ cylinder($fn = dToFn(oshd), d = oshd, h = shh, center = true);
+ }
+
+ // bottom plate
+ hull()
+ translate([0, 0, -shh - bph / 2])
+ for (xo = [-dbhw / 2, dbhw / 2], yo = [-so, -so - dbhh])
+ {
+ //translate([-dbhw / 2, -so, 0])
+ translate([xo, yo, 0])
+ cylinder($fn = dToFn(oshd), d = oshd + 1, h = bph, center = true);
+ }
+
+ // fan: distance between holes
+ fdbh = ld3007ms_distance_between_holes;
+
+ // fan/plate hole holders
+ fan_plate_hole_holder_h = hih - bph;
+ fphhh = fan_plate_hole_holder_h;
+ translate([0, 0, -shh / 2])
+ translate([0, -radxa_zero_3e_fan_hole_offset / 2 - (oshd - hid), -fphhh / 2])
+ for (xo = [-fdbh / 2, fdbh / 2], yo = [0, 0 - fdbh])
+ {
+ //translate([-dbhw / 2, -so, 0])
+ translate([xo, yo, 0])
+ cylinder($fn = dToFn(oshd), d = oshd, h = fphhh, center = true);
+ }
+ }
+ }
+}
+
+// with screw holes and fan holes
+// TODO: production: create a new one with normal holes and w/o fan holes
+module radxa_zero_3e_mount_plate_holes()
+{
+ // fan hole diameter, put under CPU
+ fan_hole_d = ld3007ms_w - 2;
+ fhd = fan_hole_d;
+ fan_hole_h = 10;
+ fhh = fan_hole_h;
+
+ // screw holder height
+ shh = radxa_zero_3e_mount_plate_screw_holder_height;
+
+ // TODO: deduplicate, move to a global var
+ bottom_plate_h = 2;
+ bph = bottom_plate_h;
+
+ dbhw = radxa_zero_3e_pcb_distance_between_holes_w;
+ dbhh = radxa_zero_3e_pcb_distance_between_holes_h;
+ so = radxa_zero_3e_pcb_screw_offset;
+ hid = hole_insert_diameter;
+
+ // fan holes
+ translate([0, -radxa_zero_3e_fan_hole_offset, 0])
+ hull()
+ {
+ // top
+ translate([0, 0, -shh + $tiny_padding])
+ cylinder($fn = dToFn(fhd), d = fhd - 2, h = 0.001, center = true);
+
+ // bottom
+ translate([0, 0, -shh - bph + $tiny_padding])
+ //cylinder($fn = dToFn(fhd), d = fhd, h = fhh, center = true);
+ cylinder($fn = dToFn(fhd), d = fhd, h = 0.001, center = true);
+
+ // prolongate to cut scanner main frame
+ translate([0, 0, -20])
+ //cylinder($fn = dToFn(fhd), d = fhd, h = fhh, center = true);
+ cylinder($fn = dToFn(fhd), d = fhd, h = 0.001, center = true);
+ }
+
+ // fan screw holders holes
+ translate([0, 0, -bph - shh - $tiny_padding])
+ radxa_zero_3e_mount_plate_outer_holes();
+
+ // radxa hot inserts holes
+ translate([0, 0, -shh / 2])
+ for (xo = [-dbhw / 2, dbhw / 2], yo = [-so, -so - dbhh])
+ {
+ //translate([-dbhw / 2, -so, 0])
+ translate([xo, yo, $tiny_padding])
+ cylinder($fn = dToFn(hid), d = hid, h = shh, center = true);
+ }
+}
+
+module radxa_zero_3e_mount_plate_with_holes()
+{
+ shh = radxa_zero_3e_mount_plate_screw_holder_height;
+ bph = radxa_zero_3e_mount_plate_h;
+
+ //color("green", 0.1)
+ difference()
+ {
+ radxa_zero_3e_mount_plate();
+ radxa_zero_3e_mount_plate_holes();
+ }
+
+ translate([0, -radxa_zero_3e_fan_hole_offset, -shh - bph])
+ rotate([-90, 0, 0])
+ *%ld3007ms();
+}
+
+// these holes should be positioned by a module which knows
+// radxa position in body, so putting them at z==0 for now
+module radxa_zero_3e_mount_plate_outer_holes()
+{
+ shh = radxa_zero_3e_mount_plate_screw_holder_height;
+ bph = radxa_zero_3e_mount_plate_h;
+
+ translate([0, -radxa_zero_3e_fan_hole_offset, 0])
+ rotate([90, 0, 0])
+ ld3007ms_holes();
+}
+
//radxa_zero_3e();
//rpi_zero_protoboard();
//radxa_zero_3e_with_protoboard();
//%radxa_zero_3e_rj45_male();
-//radxa_zero_3e_with_protoboard_and_connectors(); \ No newline at end of file
+*%radxa_zero_3e_with_protoboard_and_connectors();
+
+*translate([0, 0, -6 - $tiny_padding])
+*radxa_zero_3e_mount_plate_outer_holes();
+
+*radxa_zero_3e_mount_plate();
+*radxa_zero_3e_mount_plate_with_holes();
+*radxa_zero_3e_mount_plate_outer_holes();
+//translate([0, fwo, 0])
+//translate([0, 0, 20])
+translate([0, 0, -10])
+//translate([0, 0, radxa_zero_3e_pcb_h - 5])
+//rotate([90, 0, 0])
+*%radxa_zero_3e_mount_plate_outer_holes();
+
+// debug, visualize 1 mm
+*union()
+{
+ translate([15 - 0.5, -28, -6])
+ cube([1, 1, 1], center = true);
+
+ translate([15 - 0.5, -28, -3])
+ cube([1, 1, 1], center = true);
+} \ No newline at end of file