2022-09-10 11:01:37 +02:00
|
|
|
// supermicro SC808 (and others) fan holder for 2x 40x40x28mm fans instead of 3x 40x40x56mm
|
|
|
|
// by zeus - 2022-09-09 - CC-BY-NC-SA-4.0 - https://git.kostianix.de/zeus/3d-stuff/openscad/
|
|
|
|
// #####################################
|
|
|
|
$fn=100;
|
|
|
|
mt=1.75;
|
|
|
|
mt_center=22.5;
|
|
|
|
nipple_offset=4.5;
|
|
|
|
fan_w=42.0;
|
|
|
|
fan_h=fan_w;
|
|
|
|
fan_d=28.75;
|
|
|
|
fan_holedist=32.2;
|
|
|
|
fan_block_w=fan_w*0.55;
|
|
|
|
base_w=2*fan_w+2*mt+mt_center;
|
|
|
|
base_d=fan_d+2*mt+2*nipple_offset;
|
|
|
|
base_h=10;
|
|
|
|
base_hole_dist=161.50;
|
|
|
|
base_hole_dia=6.4;
|
|
|
|
base_hole_sleeve_h=4;
|
|
|
|
base_hole_sleeve_dia=base_hole_dia+1.5;
|
|
|
|
|
|
|
|
base_hole_y_offset=8.5;
|
|
|
|
base_w_cpl=base_hole_dist+2*mt;
|
|
|
|
base_w_tab=base_w_cpl/2-mt-mt_center/2-fan_w;
|
|
|
|
// #####################################
|
|
|
|
module fanblock(){
|
|
|
|
union(){
|
|
|
|
difference(){
|
|
|
|
cube([base_w,base_d,base_h],center=true);
|
|
|
|
cube([base_w-2*mt,base_d-2*mt,base_h+0.1],center=true);
|
|
|
|
for (x=[-mt_center/2-fan_w/2,-(-mt_center/2-fan_w/2)],y=[(fan_d+2*nipple_offset)/2-mt,-(fan_d+2*nipple_offset)/2+mt],z=[mt,-mt]){
|
|
|
|
translate([x,y,0]){
|
|
|
|
rotate([90,0,0])translate([0,fan_w/2-base_h/2+mt,z])cylinder(r=fan_w/2,h=2*mt+0.1,center=true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (x=[-mt_center/2-fan_w/2,-(-mt_center/2-fan_w/2)],y=[(fan_d+2*nipple_offset)/2-mt,-(fan_d+2*nipple_offset)/2+mt]){
|
|
|
|
translate([x,y,0]){
|
|
|
|
difference(){
|
|
|
|
cube([fan_block_w,2*mt,base_h],center=true);
|
|
|
|
rotate([90,0,0])translate([0,fan_w/2-base_h/2+mt,0])cylinder(r=fan_w/2,h=2*mt+0.1,center=true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cube([mt_center,fan_d+2*nipple_offset,base_h],center=true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module sleeve(){
|
|
|
|
difference(){
|
|
|
|
cylinder(d=base_hole_sleeve_dia,h=base_hole_sleeve_h,center=true);
|
|
|
|
cylinder(d=base_hole_dia,h=base_hole_sleeve_h+0.1,center=true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module tab(){
|
|
|
|
difference(){
|
|
|
|
hull(){
|
|
|
|
translate([-mt/2,0,0])cube([mt,base_d,mt],center=true);
|
|
|
|
translate([-base_w_tab,-base_hole_y_offset-mt,0])cylinder(r=base_hole_dia/2-1,h=mt,center=true);
|
|
|
|
translate([-base_w_tab,+base_hole_y_offset+mt,0])cylinder(r=base_hole_dia/2-1,h=mt,center=true);
|
|
|
|
}
|
|
|
|
translate([-base_hole_dist/2+base_w/2,base_hole_y_offset,0])cylinder(d=base_hole_dia,h=mt+0.1,center=true);
|
|
|
|
translate([-base_hole_dist/2+base_w/2,-base_hole_y_offset,0])cylinder(d=base_hole_dia,h=mt+0.1,center=true);
|
|
|
|
}
|
|
|
|
translate([-base_hole_dist/2+base_w/2,base_hole_y_offset,base_hole_sleeve_h/2-mt/2])sleeve();
|
|
|
|
translate([base_hole_dist/2+base_w/2,base_hole_y_offset,base_hole_sleeve_h/2-mt/2])sleeve();
|
|
|
|
hull(){
|
|
|
|
translate([-mt/2,0,0])cube([mt,mt,mt],center=true);
|
|
|
|
translate([-mt/2,0,base_h-mt])cube([mt,mt,mt],center=true);
|
|
|
|
translate([-mt/2-base_w_tab,0,0])cube([mt,mt,mt],center=true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module hole_control(){
|
|
|
|
for(x=[-base_hole_dist/2,base_hole_dist/2],y=[-base_hole_y_offset,base_hole_y_offset]){
|
|
|
|
translate([x,y,0])#cylinder(d=base_hole_dia-1,h=4*mt,center=true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// #####################################
|
2022-09-10 12:01:20 +02:00
|
|
|
translate([0,0,base_h/2]){
|
|
|
|
difference(){
|
|
|
|
fanblock();
|
|
|
|
//cable-slot
|
|
|
|
translate([0,0,base_h/2-2*mt+0.1])#cube([2*mt,base_d+0.1,4*mt],center=true);
|
|
|
|
}
|
|
|
|
}
|
2022-09-10 11:01:37 +02:00
|
|
|
translate([-base_w/2,0,mt/2])tab();
|
|
|
|
rotate([0,0,180])translate([-base_w/2,0,mt/2])tab();
|
|
|
|
|
|
|
|
|
|
|
|
//hole_control();
|
|
|
|
|
|
|
|
//translate([-6.25,-10.25,-base_h/2])%import("fanholdersrc.stl",center=true);
|