M0UNTAIN 0F C0DE

Heat Sink Fan Duct

3D model

This model funnels the air flow of a 60 mm computer fan through a 40x90 mm heat sink. The whole thing is then mounted to the wall. The design is optimised for simple printing without any support.

$fn=80;

heatSinkWidth=90.2;
heatSinkHeight=40.2;
heatSinkLength=80;

fanWidth=60.7;
fanHeight=38;

module heatsink() {
    cube([heatSinkLength,heatSinkWidth,heatSinkHeight], center=true);
}

module fan() {
    cube([fanWidth,fanWidth,fanHeight], center=true);
}

%translate([0,0,(heatSinkLength/2)+fanHeight+heatSinkHeight]) rotate([0,90,0]) heatsink();
%translate([(fanWidth/2)-(heatSinkHeight/2),0,fanHeight/2])  fan();


module duct() {
    wallWidth=1;
    
    module right() {
        hull() {
            translate([(wallWidth/2),(heatSinkWidth/2)+(wallWidth/2),fanHeight+heatSinkHeight]) rotate([0,90,0]) cube([0.001,wallWidth,heatSinkHeight+wallWidth], center=true);
            
            translate([(fanWidth/2)-(heatSinkHeight/2)+(wallWidth/2),(fanWidth/2)+(wallWidth/2),fanHeight]) cube([fanWidth+wallWidth,wallWidth,0.001], center=true);
        }
    }
    
    module left() {
        hull() {
            translate([(wallWidth/2),(-heatSinkWidth/2)-(wallWidth/2),fanHeight+heatSinkHeight]) rotate([0,90,0]) cube([0.001,wallWidth,heatSinkHeight+wallWidth], center=true);
            
            translate([(fanWidth/2)-(heatSinkHeight/2)+(wallWidth/2),-(fanWidth/2)-(wallWidth/2),fanHeight]) cube([fanWidth+wallWidth,wallWidth,0.001], center=true);
        }
    }
    
    module front() {
        hull() {
            translate([(heatSinkHeight/2)+(wallWidth/2),0,fanHeight+heatSinkHeight]) rotate([0,90,0]) cube([0.001,heatSinkWidth+(wallWidth*2),wallWidth], center=true);
            
            translate([(fanWidth/2)-(heatSinkHeight/2)+(fanWidth/2)+(wallWidth/2),0,fanHeight]) cube([wallWidth,fanWidth+wallWidth,0.001], center=true);
        }
    }
    
    right();
    left();
    front();
}

module fanMountPlate() {
    module base() {
        hull() {
            cube([fanWidth,fanWidth,0.001], center=true);
            translate([0,0,2]) cube([fanWidth,fanWidth+2,0.001], center=true);
        }
    }
    
    translate([(fanWidth/2)-(heatSinkHeight/2),0,1]) difference() {
        base();
        translate([0,0,-5]) cylinder(d=60,h=10); // fan hole
        
        translate([25,25,-4.5]) cylinder(d=4,h=10);
        translate([25,-25,-4.5]) cylinder(d=4,h=10);
        translate([-25,25,-4.5]) cylinder(d=4,h=10);
        translate([-25,-25,-4.5]) cylinder(d=4,h=10);
    }
}

module back() {
    difference() {
        translate([-(heatSinkHeight/2)+(1/2),0,(40.2/2)+fanHeight]) cube([1,heatSinkWidth+(1*2),40.2], center=true);
    
        translate([-(heatSinkHeight/2)+(1/2),0,(40.2/2)+fanHeight]) translate([-5,-40,-15]) rotate([0,90,0]) cylinder(d=3,h=10);
        translate([-(heatSinkHeight/2)+(1/2),0,(40.2/2)+fanHeight]) translate([-5,40,-15]) rotate([0,90,0]) cylinder(d=3,h=10);
    }
}

back();

translate([0,0,37]) fanMountPlate();
duct();