summaryrefslogtreecommitdiff
path: root/case/pcb_case/shell.scad
diff options
context:
space:
mode:
Diffstat (limited to 'case/pcb_case/shell.scad')
-rw-r--r--case/pcb_case/shell.scad116
1 files changed, 116 insertions, 0 deletions
diff --git a/case/pcb_case/shell.scad b/case/pcb_case/shell.scad
new file mode 100644
index 0000000..18139f6
--- /dev/null
+++ b/case/pcb_case/shell.scad
@@ -0,0 +1,116 @@
+include <bolt.scad>
+include <nut.scad>
+include <panel.scad>
+
+use <conversion.scad>
+use <rounded_cube.scad>
+
+module shell_base(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ difference() {
+ // full body
+ rounded_cube(dim=dim, radius=t);
+
+ // cut away upper half
+ translate([0,0,dim[2]/2])
+ cube([dim[0], dim[1], dim[2]/2]);
+
+ // main PCB space
+ translate([3*t, t, t])
+ rounded_cube([dim[0]-6*t, dim[1]-2*t, dim[2]-2*t], t);
+
+ // remove front and back
+ translate([0, 2*t, 2*t])
+ rounded_cube([dim[0], dim[1]-4*t, dim[2]-4*t], t);
+
+ // panel holder
+ for (x_off = [t-panel_dim_0_tol/2, dim[0]-2*t-panel_dim_0_tol/2]) {
+ translate([x_off, t-panel_dim_0_tol/2, t-panel_dim_0_tol/2]) {
+ rounded_cube(
+ [
+ t+panel_dim_0_tol,
+ dim[1]-2*t+panel_dim_1_2_tol,
+ dim[2]-2*t+panel_dim_1_2_tol
+ ],
+ t
+ );
+ }
+ }
+
+ // bolt drillings
+ for (x = [dim[0]/4, dim[0]-dim[0]/4]) {
+ translate([x,0,dim[2]/2-1.5*bolt_ds])
+ rotate([-90,0,0])
+ cylinder(d=bolt_ds+bolt_ds_tol, h=1.1*t, $fn=30);
+ }
+ }
+}
+
+module shell_connector(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ size_x = dim[0]-6*t;
+ size_y = bolt_l-t;
+ size_z = dim[2]/2+3*bolt_ds;
+
+ 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_ds])
+ rotate([90,0,0])
+ cylinder(d=bolt_ds+bolt_ds_tol, h=size_y, $fn=30);
+ }
+
+ // 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_ds])
+ rotate([-90,0,0])
+ cylinder(d=nut_d+nut_d_tol, h=nut_h, $fn=30);
+ }
+ }
+
+ echo(min_shell_bolt_length=t+size_y);
+}
+
+module pcb_case_shell(pcb_dim, drillings, margins, t) {
+ difference () {
+ union() {
+ shell_base(pcb_dim, margins, t);
+ shell_connector(pcb_dim, margins, t);
+ for (drilling = drillings) {
+ translate([
+ 2*t+margins[0][0]+drilling[0],
+ bolt_l+margins[1][0]+drilling[1],
+ 0
+ ]) cylinder(d=nut_d+2, h=t+margins[2][0], $fn=30);
+ }
+ }
+ for (drilling = drillings) {
+ translate([
+ 2*t+margins[0][0]+drilling[0],
+ bolt_l+margins[1][0]+drilling[1],
+ 0
+ ]) {
+ cylinder(d=bolt_ds+bolt_ds_tol, h=t+margins[2][0], $fn=30);
+ cylinder(d=nut_d+nut_d_tol, h=nut_h, $fn=30);
+ }
+ }
+ }
+}
+
+module pcb_case_shell_bottom(pcb_dim, drillings, margins, t) {
+ pcb_case_shell(pcb_dim, drillings, margins, t);
+}
+
+module pcb_case_shell_top(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ translate([0, dim[1], dim[2]])
+ rotate([180,0,0])
+ pcb_case_shell(pcb_dim, [], margins, t);
+}