$fn=100; blade_radius1=22; blade_radius2=22; blade_thickness=1.0; blade_length=35; chord_dist=sqrt(pow(blade_radius1,2)-pow(blade_length/2,2)); blade_width=blade_radius1-chord_dist; blade_length2=2*sqrt(pow(blade_radius2,2)-pow(chord_dist,2)); top_radius=blade_length-(blade_length-blade_length2)/2; blade_height=13; num_blades=9; //////////////////////// wheel_base_height=1.05; hub_radius1=12; hub_radius2=3; hub_height=10; axle_radius=1.5; housing_space=0.5; wall_thickness=1.5; inlet_radius=blade_height/2; inlet_length=25; outlet_height=0; outlet_radius=8; axle_space=0.25; slope=(blade_length-top_radius)/blade_height; echo(str("Blade Width is ",blade_width)); echo(str("Blade Length 2 is ",blade_length2)); echo(str("Radius of top of wheel is ",top_radius)); echo(str("intake diameter ",blade_gap*2)); echo(str("external diameter ",blade_length*2)); radial_curvature=20; outer_height=6.5; blade_gap=13; //translate([35,0,0]) rotate([90,0,0]) cylinder(r=2, h=5, center = false); // Линейка difference(){ union(){// wheel(); wheelcover(); } translate([0,0,wheel_base_height])wheelcoverprof(); // translate([0,-100,0]) cube(size=100, center = false); // housing_top(); // housing_bottom(); } module wheelcover(){ intersection(){ difference(){ wheelcoverprof(); translate([0,0,wall_thickness])wheelcoverprof(); cylinder(r=blade_gap, h=100); } cylinder(r=blade_length, h=100); } } module wheelcoverprof(){ union(){ translate([0,0,radial_curvature+outer_height]) rotate_extrude(convexity = 10) translate([blade_length-10, 0, 0]) circle(r = radial_curvature-0.01); difference(){ translate([0,0,outer_height]) cylinder(r=100,h=radial_curvature); translate([0,0,outer_height]) cylinder(r=blade_length-10,h=radial_curvature); } } } module housing_top() { cavity_radius1=blade_length+housing_space; cavity_radius2=top_radius+housing_space; housing_radius1=blade_length+wall_thickness+housing_space+slope*(wall_thickness*2+housing_space*2); housing_radius2=housing_radius1-slope*(blade_height+wheel_base_height+housing_space*2+wall_thickness*2); echo(str("Slope is ",slope)); difference() { union() { translate([0,0,-(wall_thickness+housing_space)]) cylinder(r1=housing_radius1,r2=housing_radius2,h=blade_height+wheel_base_height+housing_space*2+wall_thickness*2); inlet(); cylinder(r=outlet_radius+wall_thickness,h=outlet_height+blade_height+wheel_base_height+housing_space+wall_thickness); } translate([(cavity_radius1+cavity_radius2)/2-inlet_radius-wall_thickness,0,inlet_radius+wall_thickness]) rotate([90,0,0]) cylinder(r=inlet_radius,h=inlet_length); difference() { translate([0,0,wheel_base_height]) cylinder(r1=cavity_radius1, r2=cavity_radius2,h=blade_height+housing_space); translate([0,0,wheel_base_height+blade_height]) cylinder(r=axle_radius+wall_thickness+axle_space,h=housing_space, $fn=100); } translate([0,0,-(wall_thickness+housing_space)]) cylinder(r=cavity_radius1, h=wall_thickness+housing_space*2+wheel_base_height); cylinder(r=axle_radius+axle_space,h=outlet_height+blade_height+wheel_base_height+housing_space+wall_thickness,$fn=10); outlet(); } } module inlet() { housing_height=blade_height+wheel_base_height+housing_space*2+wall_thickness*2; translate([-(inlet_radius*2+wall_thickness-top_radius),0,-(housing_space+wall_thickness)]) rotate([90,0,0]) linear_extrude(height=inlet_length) polygon(points=[[0,0],[0,housing_height],[inlet_radius*2+wall_thickness*2,housing_height],[inlet_radius*2+wall_thickness*2+slope*housing_height,0]], paths=[[0,1,2,3,0]]); } module outlet() { height=outlet_height+blade_height+wheel_base_height+housing_space+wall_thickness; difference() { cylinder(r=outlet_radius,h=height); for (c=[1:3]) rotate([0,0,c*120]) translate([0,-wall_thickness/2,0]) cube([outlet_radius,wall_thickness,height]); cylinder(r=axle_radius+wall_thickness+axle_space,h=height); } } module housing_bottom() { difference() { union() { translate([0,0,-(wall_thickness*2+housing_space)]) cylinder(r=(blade_length+housing_space+wall_thickness),h=wall_thickness); translate([0,0,-(wall_thickness+housing_space)]) cylinder(r=(blade_length+housing_space),h=wall_thickness); translate([0,0,-housing_space]) cylinder(r=axle_radius+wall_thickness+axle_space,h=housing_space, $fn=10); } translate([0,0,-(wall_thickness*2+housing_space)]) cylinder(r=axle_radius+axle_space,h=wall_thickness*2+housing_space,$fn=10); } } module wheel() { intersection(){ difference(){ union() { translate([0,0,wheel_base_height]) for (a=[1:num_blades]) rotate([0,0,a*(360/num_blades)]) translate([0,0,0]) blade(); cylinder(r=blade_length,h=wheel_base_height); hub(); } cylinder(r=axle_radius,h=100); } cylinder(r=blade_length, h=wheel_base_height*2+blade_height);} } module blade() { angle=asin((blade_radius1-blade_width)/blade_radius1); difference(){ translate([0,blade_radius1,0]) rotate([0,0,angle]) difference() { cylinder(r1=blade_radius1,r2=blade_radius2, h=blade_height); translate([0,0,-.1]) cylinder(r1=blade_radius1-blade_thickness,r2=blade_radius2-blade_thickness,h=blade_height+1); translate([blade_width-blade_radius1+10,-blade_radius1,-.1]) cube([blade_radius1*2,blade_radius1*2,blade_height+1]); } translate([0,0,-.1]) cylinder(r1=blade_gap,r2=blade_gap, h=blade_height+.2); } } module hub(){ difference(){ cylinder(r=blade_gap, h=hub_height, center=false); translate([0,0,hub_height+wheel_base_height]) rotate_extrude(convexity = 10) translate([blade_gap, 0, 0]) circle(r = hub_height, $fn = 100); }}