diff --git a/rack/back_wall.scad b/rack/back_wall.scad new file mode 100644 index 0000000..33c9c7d --- /dev/null +++ b/rack/back_wall.scad @@ -0,0 +1,45 @@ +include + +module back_wall(size, margin, screw_hole, thickness) { + total_size = size + [0, margin[0] + margin[1]]; + feet_size = 5; + padding = 0.2*feet_size; + color("Lime", .5) + linear_extrude(thickness) + difference() { + union() { + square(total_size); + translate([total_size[0]/2, padding, 0]) + circle(r=feet_size, $fn=circle_res); + + translate([0, margin[1]/2-thickness, 0]) { + translate([-thickness, 0, 0]) square(thickness); + translate([total_size[0] , 0, 0]) square(thickness); + } + translate([0, margin[1] + size[1], 0]) { + translate([-thickness, 0, 0]) square(thickness); + translate([total_size[0] , 0, 0]) square(thickness); + } + + } + + translate([size[0]/2, screw_hole/2, 0]) { + translate([0, margin[1]/2-thickness, 0]) { + translate([-size[0]/6, 0, 0]) circle(d=screw_hole, $fn = circle_res); + translate([ size[0]/6, 0, 0]) circle(d=screw_hole, $fn = circle_res); + } + + translate([0, margin[1] + size[1], 0]) { + translate([-size[0]/6, 0, 0]) circle(d=screw_hole, $fn = circle_res); + translate([ size[0]/6, 0, 0]) circle(d=screw_hole, $fn = circle_res); + } + } + + translate([total_size[0]/2, total_size[1]+padding, 0]) + circle(r=feet_size, $fn=circle_res); + + } +} + + +back_wall([pcb_support[0] + safe_padding * 2, nb_nodes * node_clearance], sides_margin, m3, pvc_thickness); diff --git a/rack/config.scad b/rack/config.scad index 9c83815..acc2127 100644 --- a/rack/config.scad +++ b/rack/config.scad @@ -1,23 +1,24 @@ nb_nodes = 2; node_clearance =30; m3 = 3 + 0.5; +m3_length = 10; pvc_thickness = 3; pcb_hole_spacing = [49, 58]; pcb_support_x_margin = 10; pcb_support_y_margin = [5, 23]; pcb_support = pcb_hole_spacing + [pcb_support_x_margin*2, pcb_support_y_margin[0] + pcb_support_y_margin[1]]; safe_padding = 1; rail_pad = [pvc_thickness, 10]; notch = rail_pad + [1, 1]; pad = [pvc_thickness, 5]; sides_margin = [8, 15]; pcb_delta = 10; side_length = pcb_support[1] + pcb_delta * 2; rail_size = [5, side_length]; circle_res = 25; \ No newline at end of file diff --git a/rack/nut_fix.scad b/rack/nut_fix.scad index e786021..4417d03 100644 --- a/rack/nut_fix.scad +++ b/rack/nut_fix.scad @@ -1,15 +1,16 @@ -module nut_fix_m3() { +include +module nut_fix_m3(length, thickness) { //http://www.farnell.com/datasheets/1661818.pdf padding = .2; m3 = 3; nut = [2.4, 5.5]; nut_h = nut + [padding, padding]; m3_h = m3 + padding; - depth = [5, 2]; + safety = 2; + total_depth = length - thickness + safety; union() { - translate([0, -m3_h/2, 0]) square([depth[0] + depth[1] + nut_h[0], m3_h]); - translate([depth[0], -nut_h[1]/2, 0]) square(nut_h); + translate([0, -m3_h/2, 0]) square([total_depth, m3_h]); + translate([total_depth - nut_h[0] - safety, -nut_h[1]/2, 0]) square(nut_h); } } -nut_fix_m3(); diff --git a/rack/rack.scad b/rack/rack.scad index ff286fe..41de8a8 100644 --- a/rack/rack.scad +++ b/rack/rack.scad @@ -1,50 +1,57 @@ include ; -use ; +use ; use ; use ; use ; use ; +use ; translate ([0, -pcb_delta, 0]) { -translate([-(pcb_support[0]/2 + safe_padding), ,0]) { - rotate([0,-90,0]) side_wall(nb_nodes, node_clearance, - side_length, sides_margin, notch, - pvc_thickness, m3, safe_padding); + translate([-(pcb_support[0]/2 + safe_padding), ,0]) { + rotate([0,-90,0]) side_wall(nb_nodes, node_clearance, + side_length, sides_margin, notch, + pvc_thickness, m3, safe_padding); - translate([0,pvc_thickness, -sides_margin[1]/2-pvc_thickness]) - top_bottom_wall([pcb_support[0] + safe_padding * 2, side_length], pad, 3); + translate([0,pvc_thickness, -sides_margin[1]/2-pvc_thickness]) + top_bottom_wall([pcb_support[0] + safe_padding * 2, side_length], pad, pvc_thickness, m3_length); - translate([0,pvc_thickness, node_clearance * nb_nodes]) - top_bottom_wall([pcb_support[0] + safe_padding * 2, side_length], pad, 3); + translate([0,pvc_thickness, node_clearance * nb_nodes]) + top_bottom_wall([pcb_support[0] + safe_padding * 2, side_length], pad, pvc_thickness, m3_length); + + translate([0,side_length, -sides_margin[1]]) rotate([90,0,0]) + back_wall([pcb_support[0] + safe_padding * 2, nb_nodes * node_clearance], sides_margin, m3, pvc_thickness); + } + + translate([pcb_support[0]/2 + safe_padding + pvc_thickness, 0,0]) rotate([0,-90,0]) + side_wall(nb_nodes, node_clearance, + side_length, sides_margin, notch, + pvc_thickness, m3, safe_padding); -} -translate([pcb_support[0]/2 + safe_padding + pvc_thickness, 0,0]) rotate([0,-90,0]) -side_wall(nb_nodes, node_clearance, - side_length, sides_margin, notch, - pvc_thickness, m3, safe_padding); } + + for(p = [1:nb_nodes]) { z = (p-1)*node_clearance; translate([-pcb_support[0]/2,0,z]) pcb_support(p, pcb_hole_spacing, pcb_support_x_margin, pcb_support_y_margin, pvc_thickness, 3); translate([-58/2,-2,pvc_thickness+z]) odroid(); translate([0, - pcb_delta + pvc_thickness, z - pvc_thickness]) { translate([-pcb_support[0]/2 - safe_padding, 0, 0]) { translate([0,0,pvc_thickness * 2 + safe_padding]) rail_top(rail_size, rail_pad, pvc_thickness); rail_bottom(rail_size, rail_pad, pvc_thickness); } translate([pcb_support[0]/2 + safe_padding,0,0]) { translate([0,0,pvc_thickness * 2 + safe_padding]) mirror([1,0,0]) rail_top(rail_size, rail_pad, pvc_thickness); mirror([1,0,0]) rail_bottom(rail_size, rail_pad, pvc_thickness); } } } diff --git a/rack/top_bottom_wall.scad b/rack/top_bottom_wall.scad new file mode 100644 index 0000000..25832b2 --- /dev/null +++ b/rack/top_bottom_wall.scad @@ -0,0 +1,41 @@ +use ; +module top_bottom_wall(side_size, pad, thickness, m3_length) { + size = side_size - [0, thickness*2]; + color("MediumAquamarine", .5) + translate([0,-thickness,0]) + linear_extrude(thickness) + difference () { + translate([0, thickness, 0]) + union() { + square(size); + translate([-pad[0],0 , 0]) { + translate([0, 0,0]) square(pad); + translate([0,size[1]-pad[1],0]) square(pad); + } + translate([size[0],0 , 0]) { + translate([0, 0,0]) square(pad); + translate([0,size[1]-pad[1],0]) square(pad); + } + } + + translate([0, side_size[1]/2, 0]) { + translate([0, -side_size[1]/6, 0]) nut_fix_m3(m3_length, thickness); + translate([0, side_size[1]/6, 0]) nut_fix_m3(m3_length, thickness); + } + translate([size[0], side_size[1]/2, 0]) { + mirror([1,0,0]) { + translate([0, -side_size[1]/6, 0]) nut_fix_m3(m3_length, thickness); + translate([0, side_size[1]/6, 0]) nut_fix_m3(m3_length, thickness); + } + } + + translate([size[0]/2, size[1]+thickness, 0]) { + translate([-size[0]/6, 0, 0]) rotate([0,0,-90]) nut_fix_m3(m3_length, thickness); + translate([ size[0]/6, 0, 0]) rotate([0,0,-90]) nut_fix_m3(m3_length, thickness); + } + + } +} + +include +top_bottom_wall([pcb_support[0] + safe_padding * 2, side_length], pad, pvc_thickness, m3_length);