mirror of
https://github.com/pgrondek/SixInchRack.git
synced 2024-11-29 23:07:45 +00:00
348 lines
8.8 KiB
OpenSCAD
348 lines
8.8 KiB
OpenSCAD
|
// 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);}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|