diff options
Diffstat (limited to 'front.scad')
-rw-r--r-- | front.scad | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/front.scad b/front.scad new file mode 100644 index 0000000..dd98d0a --- /dev/null +++ b/front.scad @@ -0,0 +1,155 @@ +include <parameters.scad> + +use <rail.scad> +use <hdd.scad> + +// bend radius on hdd inlet +R = 2; + +// size of the core box +W = hdd_width + vrail_width/2; +H = hdd_height + hrail_height; +D = 15; + +// strap dimensions +SW=5; +SH=1.5; + +// dimensions of the SATA power connector +spc_width=25; +spc_height=8.2; + +support_bar_width = 10; + +module back() { + translate([0, 0, 0]) + tray(D, bt=[1], power_hole=true, straps=true); + + for (i = [1:num_hdd_y-1]) + translate([0, 0, i*H]) + tray(D, bt=[-1,1], power_hole=true, straps=true); + + translate([0, 0, (num_hdd_y-1)*H]) + tray(D, bt=[-1], power_hole=true, straps=true); +} + +module front() { + intersection() { + union() { + translate([0, 0, 0*H]) + tray(D, inlet=[1]); + + for (i = [1:num_hdd_y-1]) + translate([0, 0, i*H]) + tray(D); + + translate([0, 0, num_hdd_y*H]) + tray(D, inlet=[-1], rail=false); + } + + translate([0, 0, num_hdd_y*H/2]) + ccube([2*W, D, num_hdd_y*H + hrail_height]); + } +} + +module ccube(x) cube(x, center=true); + +module tray(D, power_hole=true, straps=true, inlet=[-1,1], rail=true, support_bar=true) +//translate([0, D/2, H/2]) +union() { + difference() { + union() { + // horizontal rail + ccube([hdd_width, D, hrail_height]); + + // vertical rails + for (i = [-1,1]) + translate([i*(W/2 - vrail_width/8), 0, 0]) + ccube([vrail_width/4, D, H]); + } + + // round corners for easy hdd insertion + for (i = inlet) + translate([0, 0, i*(hdd_height + hrail_height)/2]) + hdd_inlet(); + + // notches to attach cable strap + if (straps) { + // horizontal strap holes + for (i = [-0.65, -0.12, 0.25, 0.65]) + for (k = [-1, 1]) + translate([i*hdd_width/2, 0, k*(hrail_height/2 - SH/2)]) + strap_hole(); + + // vertical strap holes + for (i = [-1, 1]) + translate([i * (hdd_width/2 + SH/2 - epsilon), 0, -hrail_height]) + rotate([0, 90, 0]) + strap_hole(); + } + + // hole for support bar + if (support_bar) + translate([0, D/4, 0]) + ccube([W, D, support_bar_width]); + + // hole for SATA power connector and cable + if (power_hole) + translate([-hdd_width/2 + 30, 0]) + ccube([spc_width, D, spc_height]); + + // space for rail + if (rail) + for (i = [0:1]) + mirror([i, 0, 0]) + translate([-hdd_width/2 - rail_thickness, -D, hrail_height/2 - rail_thickness]) + rail(); + + // female side connectors + for (i = [-1,1]) + connector_pos(i, -1); + } + + // male side connectors + for (i = [-1,1]) + connector_pos(i, 1); +} + +module connector_pos(lr, gender) +translate([lr*(W/2 + vrail_width/4), -D/2, H*lr*gender*0.3]) +connector(); + +module connector() { + intersection() { + translate([0, 2.5, 0]) ccube([vrail_width-4, 5, 10]); + rotate([45, 0, 0]) ccube([vrail_width-4, 5, 5]); + } +} + +module strap_hole() { + ccube([SW, D, SH]); +} + +module hdd_inlet() + render() + for (i = [0,1]) mirror([i, 0, 0]) + for (j = [0,1]) mirror([0, j, 0]) + for (k = [0,1]) mirror([0, 0, k]) + difference() { + union() { + translate([0, D/2-R, 0]) + cube([hdd_width/2 + R, D, hdd_height/2 + R]); + + cube([hdd_width/2, D/2-R, hdd_height/2]); + }; + + translate([hdd_width/2 + R, D/2-R, 0]) + rotate([0, 0, 0]) + cylinder(r=R, h=H, center=true); + + translate([0, D/2-R, hdd_height/2 + R]) + rotate([0, 90, 0]) + cylinder(r=R, h=W, center=true); + } + +front();
\ No newline at end of file |