diff options
Diffstat (limited to 'mech/pcb_case/shell.scad')
-rw-r--r-- | mech/pcb_case/shell.scad | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/mech/pcb_case/shell.scad b/mech/pcb_case/shell.scad new file mode 100644 index 0000000..d7bcecc --- /dev/null +++ b/mech/pcb_case/shell.scad @@ -0,0 +1,80 @@ +use <common.scad> + +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, []); +} |