diff options
-rw-r--r-- | connector_pole.scad | 44 | ||||
-rw-r--r-- | full_model.scad | 15 | ||||
-rw-r--r-- | parameters.scad | 5 |
3 files changed, 63 insertions, 1 deletions
diff --git a/connector_pole.scad b/connector_pole.scad new file mode 100644 index 0000000..7661365 --- /dev/null +++ b/connector_pole.scad @@ -0,0 +1,44 @@ +include <parameters.scad> + +use <screw_hole.scad> + +module connector_pole(units, depth, border_top=true, border_bottom=true, cable_funnel=true) { + height = tray_height * units; + overlap = bar_thickness + pole_overlap_shunt; + + difference() { + // pole + translate([0, 0, (border_bottom ? 0 : -overlap)]) + cube([bar_thickness, pole_depth, height + + (border_bottom ? 0 : overlap) + + (border_top ? 0 : overlap)]); + + // screw holes + for (i = [0:units]) + for (s = [-1, 1]) + translate([bar_thickness/2, depth, i * tray_height + s * bar_thickness/2]) + rotate([90, 0, 0]) + screw_hole(nut_depth = nut_height); + + // cable funnel + if (cable_funnel) + for (i = [0:units-1]) + translate([0, 0, i * tray_height + bar_thickness]) + cube([bar_thickness, pole_cable_funnel_width, tray_height - 2 * bar_thickness]); + + // receptors for lower/upper poles + for (i = [[border_bottom, 0, 0], + [border_top, depth/2, height]]) + if (!i[0]) + translate([0, i[1], i[2]-overlap]) + cube([bar_thickness, depth/2, 2*overlap]); + } +} + +connector_pole(2, 20); + +translate([50,0,0]) connector_pole(2, 20, border_bottom=false); + +translate([100,0,0]) connector_pole(2, 20, border_top=false, border_bottom=false); + +translate([150,0,0]) connector_pole(2, 20, border_top=false); diff --git a/full_model.scad b/full_model.scad index fa34e79..9ea1b4a 100644 --- a/full_model.scad +++ b/full_model.scad @@ -2,6 +2,7 @@ include <parameters.scad> use <connector_back.scad> use <connector_front.scad> +use <connector_pole.scad> use <hdd.scad> use <rail.scad> use <backplane.scad> @@ -24,7 +25,7 @@ translate([bar_thickness/2 + x*tray_width, 0, y*tray_height]) { border_bottom = y == 0 ); - // TODO: back connector + // back connector rand_color([0.0, 0.8, 0.0], y, x) translate([0, hdd_length - hdd_standout - bar_thickness, 0]) back_connector( @@ -53,6 +54,18 @@ translate([bar_thickness/2 + x*tray_width, 0, y*tray_height]) { } } +// back connector pole +// TODO: split correctly if size exceeds printing area +for (x = [0:num_hdd_x]) + assign(border = (x==0 || x==num_hdd_x)) + translate([x*tray_width, + hdd_length - hdd_standout + (border ? 0 : backplane_thickness), + y*tray_height]) + connector_pole(num_hdd_y, + pole_depth - (border ? 0 : backplane_thickness), + cable_funnel = !border); + + // thread rods for (x = [0:num_hdd_x]) translate([bar_thickness/2 + x * tray_width, bar_thickness/2, -tray_height/2]) diff --git a/parameters.scad b/parameters.scad index 3af2af7..c0291cd 100644 --- a/parameters.scad +++ b/parameters.scad @@ -16,6 +16,11 @@ bar_thickness = 10; // length hdd is standing out to be grabbed hdd_standout = 25; +// back connector pole depth and shunt space (only used when multipe +// parts are required to build one pole) +pole_depth = 20; +pole_overlap_shunt = 2; +pole_cable_funnel_width = 3; /// METAL PARTS: SCREWS AND RAILS |