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