From 392ab1017c0491412d452013f2af02b7bf06cd1a Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Sat, 31 Jan 2026 15:44:57 +0100 Subject: prepared body with all holes except mounting holes --- body/radxa_zero_3e.scad | 188 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 187 insertions(+), 1 deletion(-) (limited to 'body/radxa_zero_3e.scad') 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 +include 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 -- cgit v1.2.3-70-g09d2