This pad builds on [[hacklab-vacubot/rev.40]], created by suovula & rambo & Jammi & anacron & mokis & [unnamed author] & jari & Harald & SLi Pƶlynimurirobottiprojekti Openscad koodia imuria varten, puolivalmis mm = 1; cm = 10*mm; tau = 6.28318531; $fa=1; fan(); module fan(diameter = 20*cm, height = 8*cm, wallThickness = 2*mm, impellerBaseThickness = 10*mm, impellerTopThickness = 5*mm, clearance = 5*mm, bladeCount = 10, inletDiameter = 6*cm, bladeThickness = 15*mm) { %hull(diameter, height); impeller(diameter * 0.8, height * 0.8, impellerBaseThickness, impellerTopThickness, clearance, bladeCount, inletDiameter, bladeThickness); } module impeller(diam, height, impellerBaseThickness, impellerTopThickness, clearance, bladeCount,inletDiameter, bladeThickness, bladeAngle = 45, curviness = -8, curvePos = 0.15, bladeStart = 1.1, bladeLenScale = 1.05) { angleStep = 360 / bladeCount; bladeLen = (diam / 2 - inletDiameter / 2) * bladeLenScale; bladeHeight = height - impellerBaseThickness - impellerTopThickness; topLidBase = height - impellerTopThickness; color([1,0.5,0]) { translate([0,0,clearance]) { intersection() { difference() { union() { // Top lid translate([0,0,topLidBase]) cylinder(r=diam/2, h = impellerTopThickness); // Bottom lid translate([0,0,0]) cylinder(r=diam/2, h = impellerBaseThickness); // Fins translate([0,0,impellerBaseThickness]) union() { for(i = [1:bladeCount]) { rotate([0,0,i * angleStep]) { translate([bladeStart*(inletDiameter/2),0,0]) fin(bladeLen, bladeHeight, bladeThickness, curviness, curvePos, bladeAngle); } } } } // Air intake cutout translate([0,0,impellerBaseThickness]) cylinder(r=inletDiameter/2, h=height); } // Max fin volume cylinder(r=diam/2, h = height); } } } } function foil(x, curviness, curvePos) = -sin((x+curvePos)*360/2+curvePos)*curviness; function profile(x) = sin(x*360/2)*0.25; module fin(length, height, thickness, curviness = 1, curvePos=0, bladeAngle = -50, steps = 20) { step = 1.0 / steps; color([1,0.3,0]) linear_extrude(height=height, convexity=10, twist=0) { for (i = [0:step:1-step]) { rotate([0, 0, bladeAngle]) { polygon([[ i *length, foil(i, curviness, curvePos) - profile(i) * thickness], [(i+step)*length, foil(i+step, curviness, curvePos) - profile(i+step) * thickness], [(i+step)*length, foil(i+step, curviness, curvePos) + profile(i+step) * thickness], [ i *length, foil(i, curviness, curvePos) + profile(i) * thickness]]); } } } } module hull(diam=100, height=100) { cylinder(r=diam/2, h = height); }