//Gregoire Lauvin 2018 //unit=mm //general mirror=false; fragNum=30; //curves resolution d:100 earAngle=30; //ear angle d:30 addSupport=false; //supoprt for PVC pipe d 63mm //general size haut=75; //hauteur pavillon d:70 largRatio=.6; //largeur pavillon (ratio) d:.5 helixRatio=.4; //épaisseur helix (ratio) d:.4 projOffset=0; // décalage du pied oreille d:20 //helix Hhaut=4; //helix height d:4 //antiHelix AHhaut=2; //anti helix depth d:2 //conque conqueD=30;//diamètre conque d:27 conqueLimit=4; //conque cut limit H d:4 conqueXLimit=0.5; //conque cut on X conqueYLimit=0.25; //conque cut on Y conqueX=-9; //x pos d:-6 -10 conqueY=-8; //Y pos d:-5 -8 conqueZ=5; //z pos d:5 5 //cut cutPos=-4.5; //where to cut in H plan d:-4 cutHeight=100; //support PVCsupportD=63; //diameter of support d:62 supportH=3; //height of support d:3 //ear canal canalD=8; micD=9.5; micDepth=2; module helix(){ rotate([earAngle,0,0]) translate([0,0,AHhaut-0.01]) difference(){ //main linear_extrude(height=Hhaut, center=false, convexity = 10) scale([1,largRatio]) circle(d=haut, $fn=fragNum); //creux linear_extrude(height=Hhaut+0.01, center=false, convexity = 10) scale([helixRatio*2,helixRatio]) circle(d=haut, $fn=fragNum); } ; } module antiHelix(){ rotate([earAngle,0,0]) union(){ //main linear_extrude(height=AHhaut, center=false, convexity = 10) scale([1,largRatio]) circle(d=haut, $fn=fragNum); //offset translate([0,-(projOffset/2),0]) rotate([180,0,0]) linear_extrude(height=haut/4, center=false, convexity = 10, scale=[0.5,0.5] ) scale([1,largRatio]) translate([0,-projOffset,0]) circle(d=haut, $fn=fragNum) ;//rotate ;//translate }//union ;//rotate 30 } module conque(){ difference(){ translate([conqueX,conqueY,conqueZ]) difference(){ union(){ sphere(d=conqueD, $fn=fragNum); translate([0,0,0]) linear_extrude(height=conqueD, center=false, convexity = 10) circle(d=conqueD+0, $fn=fragNum); } translate([0,0,-((conqueD/2)*3)+conqueLimit]) rotate([0,0,0]) linear_extrude(height=conqueD, center=false, convexity = 10) circle(d=conqueD+100, $fn=fragNum); } ;//translate X Y Z //botom limit, X axe translate([(conqueX-conqueD*2)-((conqueD/2)*conqueXLimit),conqueY-conqueD,conqueZ-conqueD]) cube([conqueD*2,conqueD*2,conqueD*2], center=false); //front cut, Y axe translate([conqueX-conqueD,(conqueY-conqueD*2)-((conqueD/2)*conqueYLimit),conqueZ-conqueD]) cube([conqueD*2,conqueD*2,conqueD*2], center=false); } } module cut(){ translate([0,0,-haut+cutPos]) linear_extrude(height=haut, center=false, convexity = 10) scale([1,1]) circle(d=haut*2, $fn=fragNum); } module support(){ translate([0,0,-supportH+cutPos]) linear_extrude(height=supportH, center=false, convexity = 10) scale([1,1]) circle(d=PVCsupportD, $fn=fragNum); } module canal(){ translate([0,0,cutPos-supportH]) union(){ //canal translate([conqueX,conqueY,0]) linear_extrude(height=100, center=false, convexity = 10) scale([1,1]) circle(d=canalD, $fn=fragNum); //mic slot translate([conqueX,conqueY,0]) linear_extrude(height=micDepth, center=false, convexity = 10) scale([1,1]) circle(d=micD, $fn=fragNum); } ; } module earSupport(){ if(addSupport==true){ union(){ earAssembly(); support(); } } else{ union(){ earAssembly(); translate([0,-3,-supportH+cutPos]) linear_extrude(height=supportH, center=false, convexity = 10) scale([0.9,largRatio]) circle(d=haut, $fn=fragNum); } } } module earAssembly(){ difference(){ union(){ difference(){ antiHelix(); conque(); } helix(); } cut(); } } //helix(); //antiHelix(); //conque(); //cut(); //support(); //canal(); //earSupport(); //earAssembly(); module earComplete(){ difference(){ earSupport(); canal(); } } //earComplete(); if(mirror==true){ mirror([0,1,0]) earComplete(); } else{ earComplete(); }