Stand for your AMD case fan

If you’re as lazy as I am, you might have soldered up one of these AMD case fans that @Jarrett posted here this spring but done nothing about stabilizing it. Mine spent the summer rattling around on my desk waiting for an opportunity to fall over.

But no more! The attached OpenSCAD model makes a simple little printable clip-on base that holds the fan quite firmly on my desk. All the excitement is gone, for better or for worse. (okay, only for the better)

module rcube(size=[30, 20, 10], radius=[3, 2, 1], center=false)
    hull() {
        translate( center ? [0,0,0] : size/2 ) {
            cube(size-2*radius+[2*radius[0],0,0],center=true);
            cube(size-2*radius+[0,2*radius[1],0],center=true);
            cube(size-2*radius+[0,0,2*radius[2]],center=true);
 
            for(x = [-0.5,0.5], y = [-0.5,0.5], z = [-0.5,0.5])
                translate([x * ( size[0] - 2*radius[0]),
                           y * ( size[1] - 2*radius[1]),
                           z * ( size[2] - 2*radius[2])])
                    scale([radius[0], radius[1], radius[2]])
                        sphere(1.0,$fn=4*4);
        }
    }

module base(size=[30,20,10], radius=[3, 2, 1]) {
    bottom_size=[size[0], size[1], size[2]/2];
    bottom_radius=[radius[0], radius[1], 0];
    rcube(size=bottom_size, radius=bottom_radius, center=false);
    rcube(size=size, radius=radius, center=false);
}

module bracket(size) {
    length = size[0];
    width  = size[1];
    height = size[2];
    r = [0.25, 0.25, 0.25];

    base(size=size, radius=[0.5, 0.5, 0.25]);

    translate([1, 0, 0])
        rcube(size=[2, width, height+2.5], radius=r);

    translate([1, 0, height+1.8])
        rcube(size=[3.5, width, 1.2], radius=r);

    translate([length-3, 0, 0])
        rcube(size=[2, width, height+8], radius=r);

    translate([length-5, 0, height+7])
        rcube(size=[4, width, 2], radius=r);

    translate([length-7, 0, height+7.4])
        rcube(size=[6, width, 2], radius=r);
}

bracket(size=[45,10,2]);

translate([10, -35, 0])
    base(size=[25, 80, 2]);

translate([-30, -35, 0])
    base(size=[105, 20, 2]);

translate([-30, 25, 0])
    base(size=[105, 20, 2]);

You might want to first only run the bracket() call, just to make sure you’re happy with the size and shape of the clip. That’s a quick little print by itself, and you might need to tune it for your printer. Then you can do whatever for the rest of the base.

rcube() is from here, the rest is my fault.

4 Likes