123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- cage_width = 104.9;
- cage_length = 160.0;
- cage_wall = 1.3;
- cage_hold_large = 12.0;
- cage_hold_small = 8.0;
- cage_hold_length = 19.7;
- cage_hold_off_bot = 13.4;
- cage_hold_off_left = 16.6;
- cage_hold_off_top = 56.9;
- cage_hold_off_right = 49.6;
- cage_lip = 9.9 + 2.0;
- cage_lip_hole = 3.4;
- cage_lip_hole_dist = 37;
- cage_lip_hole_off = 29.0;
- cage_lip_hole_off_y = 2.0;
-
- lip_wall = 1.6;
- lip_width = cage_lip_hole_dist + 10.0;
-
- rail_height = 7.5;
- rail_height_front = 13.0;
- rail_radius = 7.0;
- rail_length = 120;
- rail_width = lip_wall + 2;
- rail_dist = 27.5 - 8;
- rail_off_front = 7.8;
-
- nub_small = 6.6;
- nub_small_height = cage_wall + 0.4;
- nub_large = cage_hold_large - 1.5;
- nub_large_height = 1.5;
-
- stable_cut_height = 15.0;
- stable_cut_depth = 20.0;
- stable_cut_width = 7.5;
-
- add_after_rail = 6;
-
- $fn = 20;
-
- module cage_hold() {
- translate([cage_hold_large / 2, cage_hold_large / 2, 0])
- hull() {
- cylinder(d = cage_hold_large, h = cage_wall + 2);
-
- translate([0, cage_hold_length - (cage_hold_large / 2) - (cage_hold_small / 2), 0])
- cylinder(d = cage_hold_small, h = cage_wall + 2);
- }
- }
-
- module cage() {
- // cage bottom
- difference() {
- cube([cage_width, cage_length, cage_wall]);
-
- translate([cage_hold_off_left, cage_hold_off_bot, -1])
- cage_hold();
-
- translate([cage_hold_off_left + cage_hold_large + cage_hold_off_right, cage_hold_off_bot, -1])
- cage_hold();
-
- translate([cage_hold_off_left, cage_hold_off_bot + cage_hold_length + cage_hold_off_top, -1])
- cage_hold();
-
- translate([cage_hold_off_left + cage_hold_large + cage_hold_off_right, cage_hold_off_bot + cage_hold_length + cage_hold_off_top, -1])
- cage_hold();
- }
-
- // cage lip
- difference() {
- cube([cage_width, cage_wall, cage_lip]);
-
- translate([cage_lip_hole_off, cage_wall + 1, cage_lip / 2 + cage_lip_hole_off_y])
- rotate([90, 0, 0])
- cylinder(d = cage_lip_hole, h = cage_wall + 2);
- translate([cage_lip_hole_off + cage_lip_hole_dist, cage_wall + 1, cage_lip / 2 + cage_lip_hole_off_y])
- rotate([90, 0, 0])
- cylinder(d = cage_lip_hole, h = cage_wall + 2);
- }
- }
-
- module rail() {
- // main rail
- cube([rail_width, rail_length - (rail_height / 2), rail_height]);
-
- // rounded end
- translate([0, rail_length - (rail_height / 2), rail_height / 2])
- rotate([0, 90, 0])
- cylinder(d = rail_height, h = rail_width);
-
- // front hdd insert
- difference() {
- translate([0, 0, -((rail_height_front - rail_height) / 2)])
- cube([rail_width, rail_radius, rail_height_front]);
-
- translate([-1, rail_radius, -rail_radius / 2])
- rotate([0, 90, 0])
- cylinder(d = rail_radius, h = rail_width + 2);
-
- translate([-1, rail_radius, rail_height + rail_radius / 2])
- rotate([0, 90, 0])
- cylinder(d = rail_radius, h = rail_width + 2);
- }
- }
-
- module nub() {
- // nub itself
- translate([0, 0, nub_small_height + nub_large_height])
- cylinder(d = nub_large, h = nub_large_height);
- translate([0, 0, nub_large_height])
- cylinder(d = nub_small, h = nub_small_height);
- cylinder(d = nub_large, h = nub_large_height);
-
- // support pillar up to main plate
- translate([0, 0, nub_small_height + (2 * nub_large_height)])
- cylinder(d = nub_small, h = cage_lip - nub_large_height);
- }
-
- module mount_nubs() {
- translate([cage_hold_off_left + (cage_hold_large / 2), cage_hold_off_bot + cage_hold_length - (cage_hold_small / 2), -nub_large_height - ((nub_small_height - cage_wall) / 2)])
- nub();
-
- translate([cage_hold_off_left + (cage_hold_large / 2) + cage_hold_off_right + cage_hold_large, cage_hold_off_bot + cage_hold_length - (cage_hold_small / 2), -nub_large_height - ((nub_small_height - cage_wall) / 2)])
- nub();
-
- translate([cage_hold_off_left + (cage_hold_large / 2), cage_hold_off_bot + cage_hold_length - (cage_hold_small / 2) + cage_hold_off_top + cage_hold_length, -nub_large_height - ((nub_small_height - cage_wall) / 2)])
- nub();
-
- translate([cage_hold_off_left + (cage_hold_large / 2) + cage_hold_off_right + cage_hold_large, cage_hold_off_bot + cage_hold_length - (cage_hold_small / 2) + cage_hold_off_top + cage_hold_length, -nub_large_height - ((nub_small_height - cage_wall) / 2)])
- nub();
- }
-
- module mount_lip() {
- difference() {
- translate([cage_lip_hole_off - ((lip_width - cage_lip_hole_dist) / 2), 0, 0])
- cube([lip_width, lip_wall, cage_lip]);
-
- translate([cage_lip_hole_off, cage_wall + 1, cage_lip / 2 + cage_lip_hole_off_y])
- rotate([90, 0, 0])
- cylinder(d = cage_lip_hole, h = cage_wall + 2);
- translate([cage_lip_hole_off + cage_lip_hole_dist, cage_wall + 1, cage_lip / 2 + cage_lip_hole_off_y])
- rotate([90, 0, 0])
- cylinder(d = cage_lip_hole, h = cage_wall + 2);
- }
- }
-
- module rail_wall() {
- difference() {
- cube([lip_wall, rail_length + add_after_rail, rail_dist + rail_height + (rail_dist / 3)]);
-
- // bubbles
- translate([-1, 10, 10])
- for (i = [0 : 15 : (rail_length + add_after_rail - 20)]) {
- translate([0, i + 1, 0])
- rotate([0, 90, 0])
- cylinder(d = 7, h = lip_wall + 2);
-
- //translate([0, i + 8, 10])
- // rotate([0, 90, 0])
- // cylinder(d = 7, h = lip_wall + 2);
-
- //translate([0, i + 4, 32.5])
- // rotate([0, 90, 0])
- // cylinder(d = 7, h = lip_wall + 2);
- }
- }
- }
-
- module stabilizer() {
- difference() {
- translate([-lip_wall, 0, -lip_wall])
- cube([stable_cut_width + lip_wall, stable_cut_depth, stable_cut_height + (2 * lip_wall)]);
-
- translate([0, -1, 0])
- cube([stable_cut_width + 1, stable_cut_depth + 2, stable_cut_height]);
- }
- }
-
- module mount() {
- // model of the bottom of the cage
- %cage();
-
- // nubs fitting 2.5" HDD slots on bottom
- mount_nubs();
-
- // screwed-on lip
- translate([0, -lip_wall, 0])
- mount_lip();
-
- // main horizontal plate
- translate([0, -lip_wall, cage_lip])
- cube([cage_width, rail_length + add_after_rail, lip_wall]);
-
- // left rail support
- difference() {
- translate([-lip_wall, -lip_wall, cage_lip])
- rail_wall();
-
- translate([-rail_width + 1, -rail_off_front, cage_lip + rail_dist])
- rail();
- }
-
- // left rail stabilizer
- translate([-stable_cut_width - lip_wall, -lip_wall, cage_lip + rail_dist - (stable_cut_height - rail_height) / 2])
- stabilizer();
-
- // right rail support
- difference() {
- translate([cage_width, -lip_wall, cage_lip])
- rail_wall();
-
- translate([cage_width - 1, -rail_off_front, cage_lip + rail_dist])
- rail();
- }
-
- // right rail stabilizer
- translate([cage_width + stable_cut_width + lip_wall, -lip_wall, stable_cut_height + cage_lip + rail_dist - (stable_cut_height - rail_height) / 2])
- rotate([0, 180, 0])
- stabilizer();
-
- // bottom/top horizontal plate
- difference() {
- translate([-lip_wall, -lip_wall, cage_lip + rail_dist + rail_height + (rail_dist / 3)])
- cube([cage_width + (2 * lip_wall), rail_length + add_after_rail, lip_wall]);
-
- translate([0, 0, cage_lip + rail_dist + rail_height + (rail_dist / 3)])
- union() {
- translate([cage_hold_off_left, cage_hold_off_bot, -1])
- cage_hold();
-
- translate([cage_hold_off_left + cage_hold_large + cage_hold_off_right, cage_hold_off_bot, -1])
- cage_hold();
-
- translate([cage_hold_off_left, cage_hold_off_bot + cage_hold_length + cage_hold_off_top, -1])
- cage_hold();
-
- translate([cage_hold_off_left + cage_hold_large + cage_hold_off_right, cage_hold_off_bot + cage_hold_length + cage_hold_off_top, -1])
- cage_hold();
- }
- }
- }
-
- translate([60, 120, 1])
- rotate([90, 0, -90])
- mount();
|