/* ******************************************* Objekt Info: Parametriebarer Ventilator ******************************************* Version: 10.07.2023 khf ******************************************* */ //*************** Auswahl ************* //keine //*************** Libraries ************ //keine //***************************************** //*************** Parameter ************* module ventilator( aussenradius = 55, innenradius = 15, blaetter = 5, aussenbreite = 50, innenbreite = 20, materialstaerke = 2, twist = -30, anstellwinkel = 45, ) { module blatt() { innenhoehe = cos( asin( innenbreite / ( 2 * innenradius ) ) ) * innenradius; blatthoehe = aussenradius - innenhoehe; winkel = atan( ( ( aussenbreite / 2 * cos( abs( twist ) ) ) - ( innenbreite / 2 ) ) / blatthoehe ); hoehe = sin( abs( twist ) ) * aussenbreite / 2 + materialstaerke; breite = aussenbreite / 2 - innenbreite / 2; tiefe = sqrt( pow( ( aussenbreite / 2 * cos( abs( twist ) ) ) - ( innenbreite / 2 ), 2 ) + pow( blatthoehe, 2 ) ) + materialstaerke; blattunterteilung = 10; difference(){ intersection(){ rotate( [0, -anstellwinkel, 0] ) difference(){ translate( [0, innenhoehe, 0] ) rotate( [-90, 0, 0] ) linear_extrude( height = blatthoehe, twist = twist, slices = 10 , convexity = 10 ) translate([ -aussenbreite / 2, -materialstaerke / 2 ]) polygon( concat( [for (i = [0 : blattunterteilung]) [i * aussenbreite / blattunterteilung, (i % 2) * 0.0001] ], [for (i = [blattunterteilung : -1 : 0]) [i * aussenbreite / blattunterteilung, materialstaerke + (i % 2) * 0.0001] ] )); for (i = [0 : 1]) mirror( [i, 0, 0] ) translate([ innenbreite / 2, innenhoehe, -hoehe ]) rotate( [0, 0, -winkel] ) translate( [0, -tiefe / 2, 0] ) cube( [breite * 2, tiefe * 1.5, 2 * hoehe] ); } translate( [0, 0, -hoehe] ) cylinder( r = aussenradius, h = 2 * hoehe, $fn = 100 ); } translate( [0, 0, -hoehe] ) cylinder( r = innenradius, h = 2 * hoehe, $fn = 50); } } // nabe naben_hoehe = sin( abs( anstellwinkel ) ) * innenbreite / 2 + materialstaerke; translate( [0, 0, -naben_hoehe] ) cylinder( r = innenradius, h = naben_hoehe * 2, $fn = 50); // blaetter for(i = [0 : 360 / blaetter : 359]) rotate( [0, 0, i] ) blatt(); } /* // obere Hälfte intersection() { luefterrad(); translate([-100,-100,0]) cube([200,200,100]); } // untere Hälfte translate([120,0,0]) rotate([180,0,0]) intersection() { luefterrad(); translate([-100,-100,-100]) cube([200,200,100]); } */ module aufnahme(){ //Getriebemotor Aufnahme $fn=60; translate(v = [0, 0, 9]) { //Achse difference(){ cylinder(h = 18, d = 10); cylinder(h = 26, d = 5.5); } translate(v = [2, -2.5, 0]) { cube(size = [2,5,18]); } translate(v = [-4, -2.5, 0]) { cube(size = [2,5,18]); } } } ventilator(); aufnahme();