v1: hardcoded 60mm fan 60mm PCB |
- hard to slide along the board because the PCB clips were too large
- it did not have clearance for the reset button, not a fun experience during prints
- not tall enough to clear the thermal fuses on RAMPS
- someone wanted to use it for an 80mm fan
v2 with two instances: a 50mm fan (orange) and a 40mm (pink) fan on RAMPs |
Some of the parameters of the script:
- PCB width
- Fan size/diameter
- Height: how far from the PCB the fan is
- Thickness: how strong the bracket is
- Length: how wide the bracket is
A fan is held by two thin brackets |
Below you can see a more detailed rendering of the bracket showing the basic parts: the legs (blue), PCB clips (dark green), fan cut-out and nut slots (yellow light green) and the cross-brace (orage) which gives this bracket strength:
Here is what happens where the fan is larger than the PCB, the top part is wider and the rest of the bracket retains physical dimensions:
In the last picture above to the left and below you can also see a variant of the bracket that is generated for the full size of the fan instead of the usual thin bracket - the choice between the two is a simple parameter.
Some additional views
A few days ago I posted this as a Customizer script on Thingiverse and it got 50 likes and more than 500 downloads in the first couple days. This is way more than any of my other designs usually get in weeks or months.
You can download the OpenSCAD from below (bugs and all) or from Thingiverse (where you can also find some STL instances).
OpenSCAD rendering |
From left to right: 80mm, 60mm, 50mm and 40mm fans |
Here is what happens where the fan is larger than the PCB, the top part is wider and the rest of the bracket retains physical dimensions:
80mm fan bracket |
Full bracket (left), normal thin bracket (top right) and 120mm bracket (bottom right) |
In the last picture above to the left and below you can also see a variant of the bracket that is generated for the full size of the fan instead of the usual thin bracket - the choice between the two is a simple parameter.
Full bracket rendering |
40mm fan, view from the bottom |
50mm fan |
From left to right: 50mm, 60mm and 40mm fans |
A few days ago I posted this as a Customizer script on Thingiverse and it got 50 likes and more than 500 downloads in the first couple days. This is way more than any of my other designs usually get in weeks or months.
You can download the OpenSCAD from below (bugs and all) or from Thingiverse (where you can also find some STL instances).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | // MOAB - MOther of All fan Brackets // Design by Marius Gheorghescu, October 2013. // Typical values 40, 50, 60, 80 fan_size = 50; // Distance between two fan holes. Typical values: 32.00 for 40mm fan, 40.00 for 50mm fan, 50.00 for 60mm fan, 71.50 for 80mm fan, 105.00 for 120mm fan fan_hole_spacing = 40; // Use 3.25mm for M3, 4.25mm for M4 and so on screw_diameter = 3.25; // how wide is the PCB, common values: 60mm for RAMPS, 53.5mm for Arduino pcb_width = 60; // distance from bottom of the fan to PCB. Recommended value for RAMPS fuse clearance: 35mm bracket_height = 35; // how long the bracket needs to be, typically 10mm for mini brackets, or close to fan size for full brackets bracket_length = 10; // typically 2-4mm bracket_thickness = 3.0; /* [Hidden] */ // how much to go over the PCB lip_size = 1.75; // effective width of the bracket at the top bracket_width = max(pcb_width, fan_size - 4); // how tall is the extra strength bracket needs to be (if too tall it will interfere with components) cross_bracket = bracket_thickness*2; module legs() { difference() { union() { // left clip color([0,0,.5]) translate([-pcb_width/2 + .5, -bracket_height + 2, 0]) rotate([0, 0, 180]) cylinder(r=2.5, h=bracket_length, $fn=6, center=true); // left leg color([0,0,1]) translate([-pcb_width/2 - bracket_thickness, -bracket_height + bracket_thickness/2, -bracket_length/2]) cube([bracket_thickness, bracket_height, bracket_length]); // right clip color([0,0,.5]) translate([pcb_width/2 - .5, -bracket_height + 2, 0]) rotate([0, 0, 180]) cylinder(r=2.5, h=bracket_length, $fn=6, center=true); // right leg color([0,0,1]) translate([pcb_width/2 , -bracket_height + bracket_thickness/2, -bracket_length/2]) cube([bracket_thickness, bracket_height, bracket_length]); } // left cutout translate([-pcb_width/2 + .5, -bracket_height + 2, 0]) rotate([0, 0, 180]) cylinder(r=1, h=bracket_length + 0.1, $fn=6, center=true); // right cutout translate([pcb_width/2 - .5, -bracket_height + 2, 0]) cylinder(r=1, h=bracket_length + 0.1, $fn=6, center=true); // PCB lips clearance translate([0, -bracket_height + bracket_thickness + -.5,0]) cube([pcb_width - 2*lip_size, 12, bracket_length + 0.1], center=true); // PCB translate([0, -bracket_height + 2, 0]) cube([pcb_width - 1, 1.75, 2*fan_size], center=true); } } module fan_mask() { // M3 screw translate([-fan_hole_spacing/2, -fan_hole_spacing/2, 0]) cylinder(r=screw_diameter/2, h=bracket_height, $fn=20, center=true); translate([fan_hole_spacing/2, -fan_hole_spacing/2, 0]) cylinder(r=screw_diameter/2, h=bracket_height, $fn=20, center=true); translate([-fan_hole_spacing/2, fan_hole_spacing/2, 0]) cylinder(r=screw_diameter/2, h=bracket_height, $fn=20, center=true); translate([fan_hole_spacing/2, fan_hole_spacing/2, 0]) cylinder(r=screw_diameter/2, h=bracket_height, $fn=20, center=true); // M3 nuts translate([-fan_hole_spacing/2, -fan_hole_spacing/2, 0]) cylinder(r=3.3, h=4, $fn=6, center=true); translate([fan_hole_spacing/2, -fan_hole_spacing/2, 0]) cylinder(r=3.3, h=4, $fn=6, center=true); translate([-fan_hole_spacing/2, fan_hole_spacing/2, 0]) cylinder(r=3.3, h=4, $fn=6, center=true); translate([fan_hole_spacing/2, fan_hole_spacing/2, 0]) cylinder(r=3.3, h=4, $fn=6, center=true); // fan blade clearance difference() { cylinder(r=fan_size/2, h=bracket_height, $fn=120, center=true); // $TODO - add support around the screws if they are too close to the blades // also need to add support if the bracket is not wide (tall) enough } } module bracket() { difference() { union() { // fan base translate([0, 0, 0]) cube([bracket_width + 2*bracket_thickness, bracket_thickness, bracket_length], center=true); // extra strength color([1,.5,0]) translate([0, -bracket_thickness, -bracket_length/2 + bracket_thickness/4]) cube([pcb_width + 1, cross_bracket, bracket_thickness/2], center=true); legs(); } translate([0, -bracket_thickness, -bracket_length/2 + fan_size/2 + bracket_thickness/2]) rotate([90,0,0]) fan_mask(); } } module assembly() { color([1,0,0]) translate([0, 0, -fan_size/2]) bracket(); color([1,0,0]) //translate([0, 0, fan_size/2]) rotate([0,180,0]) bracket(); color([0,.5,0]) translate([0, -bracket_height + 2, 0]) cube([pcb_width - 1, 1.75, fan_size*1.5], center=true); } //assembly(); bracket(); //fan_mask(); |
No comments:
Post a Comment