SixInchRack/RackEnclosure/enclosure.scad
2017-03-05 14:25:00 +01:00

348 lines
8.8 KiB
OpenSCAD
Executable File

// This file contains all the parts for a rack enclosure
// It has the format required for a customizable project on Thingiverse
// Note: Calculated variables does not show up in the customizer, hence the *1;
$fn = 50*1;
part = "f"; // [a:Extrusion no holes,b:Extrusion front holes,c:Extrusion front and side holes,d:End open,e:End grid,f:End chimney,g:End closed,h:Nut-less Trap,i:Panel,j:Panel with handle,k:Handle]
Units = 3;
//Hole size for 4mm screws or freedom unit equivalent
Four_mm_screw = 3.8;
//Hole size for 5mm screws or freedom unit equivalent
Five_mm_screw = 4.8;
//Constants, do not change !
sixinch = 155*1; // cm = 6"
width = 155-20-20; // 11.5cm between rails
unit = (44.5/19)*6; // 1U = 14.05cm
gauge = 3*1;
gauge_box = 2*1;
slip = 0.35*1; // extra slip between parts
go();
module go(){
if (part=="a"){
extrusion(Units,true,false,false);
}else if (part=="b"){
extrusion(Units,true,true,false);
}else if (part=="c"){
extrusion(Units,true,true,true);
}else if (part=="d"){
rack_end(0);
}else if (part=="e"){
rack_end(1);
}else if (part=="f"){
rack_end(2);
}else if (part=="g"){
rack_end(3);
}else if (part=="h"){
trap(Units);
}else if (part=="i"){
sidepanel(Units,false);
}else if (part=="j"){
sidepanel(Units,true);
}else if (part=="k"){
tophandle();
translate([0,30,0]){tophandle();}
}
}
module chimney() {
for(i=[0:8:80]){
echo(i);
translate([20 + (width-80)/2 +i,-1,20]){
minkowski(){
cube([0.01,50,30]);
sphere(d=2,h=1);
}
}
}
}
// Nut-less Trap
module trap(u){
difference(){
union(){
translate([-2.4,0,4]){
cube([4.8,unit*u,1.5]);
}
translate([-2.4,unit*u,0]){
rotate([90,0,0]){
linear_extrude(unit*u){
polygon(points=[[0,0],[4.8,0],[7,4],[-2.2,4]]);
}
}
}
}
for(i=[1:u]){
translate([0,unit*i-unit/2,-1]){
cylinder(d=Four_mm_screw,h=10);
}
}
}
}
//0: open
//1: grid
//2: chimney
//3: closed
module rack_end(type){
width = sixinch+1;
difference(){
union(){
translate([1.25,1.25,1.25]){
minkowski(){
w = width-2.5;
cube([w, w, gauge-2.5]);
sphere(r=1.25);
}
}
}
if(type==0 || type==1){
translate([20,20,-1]){ cube([width-40,width-40,gauge+2]);}
}
translate([10,10,-0.1]) { cylinder(d=5,h=10); cylinder(d1=10,d2=6,h=3.5);}
translate([width-10,10,-0.1]) { cylinder(d=5,h=10); cylinder(d1=10,d2=6,h=3.5);}
translate([10,width-10,-0.1]) { cylinder(d=5,h=10); cylinder(d1=10,d2=6,h=3.5);}
translate([width-10,width-10,-0.1]){ cylinder(d=5,h=10); cylinder(d1=10,d2=6,h=3.5);}
rotate([-90,0,0]){
if(type==2){
translate([0,-5,0]){chimney();}
translate([0,-5,(width-29)/2]){chimney();}
translate([0,-5,width-29]){chimney();}
}
}
}
if(type==1){
intersection(){
union(){
sz=8;
grid = 15;
for(i=[-grid*8:12:grid*8]){
translate([sz/2+i+70,sz/2+78,gauge/2]){
rotate([0,0,45]){
cube([2,width*1.5,gauge],center=true);
}
}
translate([sz/2+i+70,sz/2+82,gauge/2]){
rotate([0,0,-45]){
cube([2,width*1.5,gauge],center=true);
}
}
}
}
translate([15,15,-1]){cube([125,125,10]);}
}
}
}
module tophandle(){
rotate([0,180,0]){
difference(){
union(){
rotate([0,45,0]){
extrusion(4,false,false,false);
}
translate([sixinch,20,0]){
rotate([0,45,180]){
extrusion(4,false,false,false);
}
}
}
wedge();
translate([90,90,10]){
cube([200,200,20],center=true);
}
translate([10,10,0]){handlescrew();}
translate([sixinch-10,10,0]){handlescrew();}
}
intersection(){
translate([0,0,-27.4]){
extrusion(11,false,false,false);
}
wedge();
}
}
}
module handlescrew(){
translate([0,0,-39]){cylinder(d=5,h=40); }
translate([0,0,-4]){cylinder(d1=10,d2=6,h=3.5);}
translate([0,0,-34]){cylinder(d=10,h=30);}
}
module wedge(){
translate([sixinch/2,-10,15]){
rotate([0,45+45/2,0]){
cube([80,80,30]);
}
translate([0,80,0]){
rotate([0,45+45/2,180]){
cube([80,80,30]);
}
}
translate([-20,0,-100]){
cube([40,80,100]);
}
}
}
module extrusion(u,center,front,side){
len=unit*u;
difference(){
translate([0,2,2]){
minkowski(){
cube([len,16,16]);
sphere(d=4);
}
}
translate([-5,10,1.99]){
rotate([0,90,0]){linear_extrude(len+10){polygon(points=[[0,-2.5],[2,-4],[2,4],[0,2.5]]);}}
}
translate([-5,10,18.01]){
rotate([0,-90,180]){linear_extrude(len+10){polygon(points=[[0,-2.5],[2,-4],[2,4],[0,2.5]]);}}
}
translate([-5,18.01,10]){
rotate([90,0,90]){linear_extrude(len+10){polygon(points=[[0,-2.5],[2,-4],[2,4],[0,2.5]]);}}
}
translate([-5,1.99,10]){
rotate([-90,0,-90]){linear_extrude(len+10){polygon(points=[[0,-2.5],[2,-4],[2,4],[0,2.5]]);}}
}
if(center){
translate([-5,10,10]){
rotate([0,90,0]){
cylinder(d=4.6,h=len+10);
}
}
}
//holes
if(front){
for(i=[0:30]){
translate([unit/2+i*unit,10,-5]){ cylinder(d=3.8,h=30);}
}
}
if(side){
for(i=[0:30]){
translate([unit/2+i*unit,25,10]){ rotate([90,0,0]){cylinder(d=3.8,h=30);}}
}
}
//length cutoff
translate([-2,0,0]){cube([4,60,60],center=true);}
translate([len+2,0,0]){cube([4,60,60],center=true);}
}
}
module screw(){
cylinder(r1=screw_head/2, r2=screw_dia/2, h=screw_head_height);
cylinder(r=screw_dia/2, h=40);
translate([0,0,-0.99]){cylinder(r=screw_head/2, h=1);}
}
module insideprofile(l){
difference(){
union(){
translate([7.6,10,0]){cube([4.8,10,l]);}
translate([0,7.6,0]){cube([20,4.8,l]);}
translate([6.5,10-2.1,0]){cube([7 ,10,l]);}
translate([2.1,6.5,0]){cube([15.8,7 ,l]);}
}
translate([4,4,-1]){
cube([12,12,l+2]);
}
}
translate([20,20,0]){
rotate([0,-90,0]){
linear_extrude(20){
polygon (points=[[0,0],[l,0],[0,l]]);
}
}
}
}
module sidepanel(u,handle){
difference(){
baseplate(u);
if(handle){
translate([(sixinch-80)/2, 9,-4]) { cube([80,20,10]);}
translate([(sixinch-80)/2, 19,-4]) { cylinder(d=20,h=10);}
translate([sixinch-(sixinch-80)/2,19,-4]) { cylinder(d=20,h=10);}
}
}
}
module baseplate(u){
difference(){
union(){
translate([1.25,1.25,1.25]){
minkowski(){
cube([sixinch-2.5,unit*u-2.5,gauge-2.5]);
sphere(r=1.25);
}
}
}
//Rack mount holes
translate([10-0.5,unit/2,-gauge/2]) {cylinder(r=2.3,gauge*2);}
translate([sixinch-10+0.5,unit/2,-gauge/2]) {cylinder(r=2.3,gauge*2);}
translate([10-0.5,u*unit-(unit/2),-gauge/2]) {cylinder(r=2.3,gauge*2);}
translate([sixinch-10+0.5,u*unit-(unit/2),-gauge/2]){cylinder(r=2.3,gauge*2);}
if(u>=5){
translate([10-0.5,(u*unit)/2,-gauge/2]) {cylinder(r=2.3,gauge*2);}
translate([sixinch-10+0.5,(u*unit)/2,-gauge/2]) {cylinder(r=2.3,gauge*2);}
}
}
}