summaryrefslogtreecommitdiff
path: root/mech/pcb_case.scad
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2023-12-22 21:34:32 +0100
committerxengineering <me@xengineering.eu>2024-01-02 14:24:06 +0100
commit8184bf87fab1eb415807eba8250af0b812205106 (patch)
treecab3bda42cf3dcecfe78b774197be2baaa03f312 /mech/pcb_case.scad
parentac348c4044e6252da91de247d77484509677cca0 (diff)
downloadsoundbox-8184bf87fab1eb415807eba8250af0b812205106.tar
soundbox-8184bf87fab1eb415807eba8250af0b812205106.tar.zst
soundbox-8184bf87fab1eb415807eba8250af0b812205106.zip
mech: Move generic PCB case to own subdirectory
This should be more decoupled because it is not specific to soundbox. It might be later extracted to a library repository.
Diffstat (limited to 'mech/pcb_case.scad')
-rw-r--r--mech/pcb_case.scad112
1 files changed, 0 insertions, 112 deletions
diff --git a/mech/pcb_case.scad b/mech/pcb_case.scad
deleted file mode 100644
index bbfe9bc..0000000
--- a/mech/pcb_case.scad
+++ /dev/null
@@ -1,112 +0,0 @@
-// A generic parametric PCB case
-
-nut_h = 3;
-nut_d = 4.15;
-nut_r = nut_d / 2;
-bolt_d = 3;
-bolt_r = bolt_d / 2;
-
-module rounded_cube(dim, radius) {
- range_y = [radius, dim[1]-radius];
- range_z = [radius, dim[2]-radius];
- height = dim[0];
-
- hull() {
- for (y=range_y, z=range_z) {
- translate([0,y,z]) rotate([0,90,0]) cylinder(r=radius, h=height);
- }
- }
-}
-
-module shell_base(dim, t) {
- radius = t;
- difference() {
- rounded_cube(dim, radius);
- translate([0,0,dim[2]/2])
- cube([dim[0], dim[1], dim[2]/2]);
- translate([3*t, t, t])
- rounded_cube([dim[0]-6*t, dim[1]-2*t, dim[2]-2*t], radius);
- translate([0, 2*t, 2*t])
- rounded_cube([dim[0], dim[1]-4*t, dim[2]-4*t], radius);
- for (x_off = [t, dim[0]-2*t]) {
- translate([x_off, t, t])
- rounded_cube([t, dim[1]-2*t, dim[2]-2*t], radius);
- }
- for (x = [dim[0]/4, dim[0]-dim[0]/4]) {
- translate([x,0,dim[2]/2-1.5*bolt_d])
- rotate([-90,0,0])
- cylinder(r=bolt_r, h=1.1*t);
- }
- }
-}
-
-module shell_connector(dim, t) {
- size_x = dim[0]-6*t;
- size_y = 2*nut_h;
- size_z = dim[2]/2+3*bolt_d;
-
- difference () {
- // base body
- translate([3*t,dim[1]-t-size_y,0])
- cube([size_x,size_y,size_z]);
-
- // bolt holes
- for (x = [dim[0]/4, dim[0]-dim[0]/4]) {
- translate([x,dim[1]-t,dim[2]/2+1.5*bolt_d])
- rotate([90,0,0])
- cylinder(r=bolt_r, h=size_y);
- }
-
- // nut holes
- for (x = [dim[0]/4, dim[0]-dim[0]/4]) {
- translate([x,dim[1]-t-size_y,dim[2]/2+1.5*bolt_d])
- rotate([-90,0,0])
- cylinder(r=nut_r, h=nut_h);
- }
- }
-
- echo(min_shell_bolt_length=t+size_y);
-}
-
-module pcb_case_shell(dim, t, h, sockets) {
- difference () {
- union() {
- shell_base(dim, t);
- shell_connector(dim, t);
- for (socket = [0:len(sockets)-1]) {
- translate([sockets[socket][0], sockets[socket][1], 0])
- cylinder(d=nut_d+2, h=h);
- }
- }
- for (socket = [0:len(sockets)-1]) {
- translate([sockets[socket][0], sockets[socket][1], 0]) {
- cylinder(d=bolt_d, h=h);
- cylinder(d=0.9*nut_d, h=nut_h);
- }
- }
- }
-}
-
-module pcb_case_shell_bottom(dim, t, h, sockets) {
- pcb_case_shell(dim, t, h, sockets);
-}
-
-module pcb_case_shell_top(dim, t) {
- translate([0,dim[1],dim[2]])
- rotate([180,0,0])
- pcb_case_shell(dim, t, 0, []);
-}
-
-module pcb_case_panel(dim, t) {
- rounded_cube([t,dim[1]-2*t,dim[2]-2*t], t);
-}
-
-module pcb_case_panel_back(dim, t) {
- translate([t,t,t])
- pcb_case_panel(dim, t);
-}
-
-module pcb_case_panel_front(dim, t) {
- translate([dim[0]-2*t,t,t])
- pcb_case_panel(dim, t);
-}