Hack of Customizable Fan Cover - Hacks
Use scad library from:
https://www.thingiverse.com/thing:2802474
Add a random pattern module:
module random_pattern(size, line_size, line_space) { diff = (line_space / 10); seed=17; min_rad = (line_space / 2 * sqrt(3)) / 2 + line_size / 2; y_offset = sqrt(min_rad * min_rad * 4 - min_rad * min_rad); num_x = ceil(size / min_rad / 2) * 1.42; num_y = ceil(size / y_offset) * 1.42; difference() { square([size * 1.42, size * 1.42], center = true); for(y = [floor(-num_y / 2) : ceil(num_y / 2)]) { odd = (y % 2 == 0) ? 0 : min_rad; for(x = [floor(-num_x / 2) : ceil(num_x / 2)]) { translate([x * min_rad * 2 + odd, y * y_offset]) { rotate(30) { single_rand = rands(4,9,1)[0]; circle(d=line_space-diff, $fn=single_rand); } } } } }}
Add a free $fn pattern module:
module free_pattern(size, line_size, line_space, fn_pattern) { diff = (line_space / 10); min_rad = (line_space / 2 * sqrt(3)) / 2 + line_size / 2; y_offset = sqrt(min_rad * min_rad * 4 - min_rad * min_rad); num_x = ceil(size / min_rad / 2) * 1.42; num_y = ceil(size / y_offset) * 1.42; difference() { square([size * 1.42, size * 1.42], center = true); for(y = [floor(-num_y / 2) : ceil(num_y / 2)]) { odd = (y % 2 == 0) ? 0 : min_rad; for(x = [floor(-num_x / 2) : ceil(num_x / 2)]) { translate([x * min_rad * 2 + odd, y * y_offset]) { rotate(30) { circle(d=line_space-diff, $fn=single_rand); } } } } }}
and modify fan_cover module adding new pattern modules:
if(grill_pattern == "random") { random_pattern(cover_size, line_size, line_space); } else if(grill_pattern == "honeycomb") ..... .. } else { free_pattern(cover_size, line_size, line_space, grill_pattern); }
For use free_pattern, grill_pattern var will be a number >= 3 (not a string)
Another interesting hack is introduce spherical projection to the pattern:
// scale intersection (projection) with the sphere scale([1,1,0.2]) intersection() { difference() { sphere(d=cover_size - min_border_size ); sphere(d=cover_size - min_border_size * 3); }; // add cover_size to original linear_extrude height linear_extrude(height = grill_pattern_h+cover_size, convexity = 20) { .... } }
With the spherical projection, you can apply some scale on linear_extrude + eliminate the second sphere (which eliminate the hole) and you obtain funnels for air dispersion (Example 11,12 or 13)
difference() { sphere(d=cover_size - min_border_size ); *sphere(d=cover_size - min_border_size * 3); // eliminate the hole }; linear_extrude(height = grill_pattern_h+cover_size, convexity = 20 , scale=1.5) // add scale for dispersion {....
Finally, add some twist effects and get something like example 14:
linear_extrude(height = grill_pattern_h+cover_size, convexity = 20, scale=1.5 , twist = -50, slices=100) // add twist efect {..
customizable_fan_cover1.stl | 340.4KB | |
customizable_fan_cover10.stl | 733.9KB | |
customizable_fan_cover11.stl | 789.1KB | |
customizable_fan_cover12.stl | 1.2MB | |
customizable_fan_cover13.stl | 641.5KB | |
customizable_fan_cover14.stl | 5.9MB | |
customizable_fan_cover2.stl | 538.0KB | |
customizable_fan_cover3.stl | 379.7KB | |
customizable_fan_cover4.stl | 466.6KB | |
customizable_fan_cover5.stl | 1.8MB | |
customizable_fan_cover6.stl | 1.3MB | |
customizable_fan_cover7.stl | 1.2MB | |
customizable_fan_cover8.stl | 1.1MB | |
customizable_fan_cover9.stl | 1.1MB |