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);
}