summaryrefslogtreecommitdiff
path: root/tray.scad
diff options
context:
space:
mode:
Diffstat (limited to 'tray.scad')
-rw-r--r--tray.scad161
1 files changed, 161 insertions, 0 deletions
diff --git a/tray.scad b/tray.scad
new file mode 100644
index 0000000..9ea7f60
--- /dev/null
+++ b/tray.scad
@@ -0,0 +1,161 @@
+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;
+
+// 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 front() {
+ intersection() {
+ union() {
+ translate([0, 0, 0*H])
+ tray(front_depth, inlet=[1]);
+
+ for (i = [1:num_hdd_y-1])
+ translate([0, 0, i*H])
+ tray(front_depth);
+
+ translate([0, 0, num_hdd_y*H])
+ tray(front_depth, inlet=[-1], rail=false);
+ }
+
+ translate([0, 0, num_hdd_y*H/2])
+ ccube([2*W, front_depth, num_hdd_y*H + hrail_height]);
+ }
+}
+
+module back() {
+ intersection() {
+ union() {
+ translate([0, 0, 0*H])
+ tray(back_depth, inlet=[1], power_hole=false);
+
+ for (i = [1:num_hdd_y-1])
+ translate([0, 0, i*H])
+ tray(back_depth, power_hole=false);
+
+ translate([0, 0, num_hdd_y*H])
+ tray(back_depth, inlet=[-1], rail=false, power_hole=false);
+ }
+
+ translate([0, 0, num_hdd_y*H/2])
+ ccube([2*W, front_depth, 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(D);
+
+ // 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(D);
+ }
+
+ // 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(D, i, -1);
+ }
+
+ // male side connectors
+ for (i = [-1,1])
+ connector_pos(D, i, 1);
+}
+
+module connector_pos(D, 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(D) {
+ ccube([SW, D, SH]);
+}
+
+module hdd_inlet(D)
+ 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
contact: Jan Huwald // Impressum