Browse Source

modification de l'affichage des vis et correction des roues dentées globoïdes

Jackbot 3 years ago
parent
commit
317cce22ac
2 changed files with 59 additions and 15 deletions
  1. 20 1
      engrenage.scad
  2. 39 14
      vis.scad

+ 20 - 1
engrenage.scad

@@ -489,9 +489,28 @@ module roue_dentee_helicoidale_globoide(z = 40, m = 1, alpha = 20, beta = 60, ep
 	}
 }
 
-module roue_dentee_helicoidale_globoide_vis(z = 40, m = 1, alpha = 20, beta = 60, vis_diam = 10, deport = 0, evider = false)
+module roue_dentee_helicoidale_globoide_vis(z = 40, m = 1, alpha = 20, vis_diam = 10, deport = 0, evider = false)
 {
+	//Calcul de l'angle beta
+	/*C'est la vis qui va imposer son angle beta, car il dépend à la fois de son pas et de son diamètre,
+	alors que pour la roue dentée il peut posséder n'importe quelle valeur.
+	
+	Si on développe une vis sans fin les filets seront des lignes droites espacées du pas de la vis.
+	
+	Par conséquent, la longueur d'un de ces filet vérifie :
+	l*cos(beta) = 2*pi*r = pi*d
+	l*sin(beta) = p
+	
+	avec r le rayon de la vis
+	
+	on en déduit que :
+	p/(pi*d) = tan(beta)
+	beta = atan(p/pi*d)
+	
+	*/
 	//CALCUL DES PARAMETRES APPARENTS
+	beta = -atan(m/vis_diam);
+	
 	ma = m/cos(beta);
 
 	d = ma*z;

+ 39 - 14
vis.scad

@@ -35,12 +35,37 @@ module vis(diam_int = 4, diam_ext = 6, DA = 0.25, BC = 0.25, pas = 1, haut = 10,
 	//par symétrie AB = CD
 	AB = pas/2 - BC/2 - DA/2;
 
-	A = [ for(i=[0 : precision : angle]) [ d1*cos(i)/2, d1*sin(i)/2, i*pas/360 - pas ] ] ;
-	B = [ for(i=[0 : precision : angle]) [ d2*cos(i)/2, d2*sin(i)/2, i*pas/360 - pas + AB ] ];
-	C = [ for(i=[0 : precision : angle]) [ d2*cos(i)/2, d2*sin(i)/2, i*pas/360 - pas + AB + BC] ];
-	D = [ for(i=[0 : precision : angle]) [ d1*cos(i)/2, d1*sin(i)/2, i*pas/360 - pas + AB + BC + AB] ];
-
-	points = concat(A, B, C, D, [[0, 0, 0]], [[0, 0, nbr_tours * pas]]);
+	A = [ for(i=[0 : precision : angle])
+			(i*pas/360 - pas) > 0 ?
+				(i*pas/360 - pas) > haut ?
+					[ d1*cos(i)/2, d1*sin(i)/2, haut ] :			//si Za > haut
+					[ d1*cos(i)/2, d1*sin(i)/2, i*pas/360 - pas ] :	//si 0 < Za < haut
+				[ d1*cos(i)/2, d1*sin(i)/2, 0 ] ];					//si Za < 0
+		
+	B = [ for(i=[0 : precision : angle])
+			(i*pas/360 - pas + AB + BC) > 0 ?
+				(i*pas/360 - pas + AB) > 0 ?
+					(i*pas/360 - pas + AB) > haut ?
+						[ d1*cos(i)/2, d1*sin(i)/2, haut ] :
+						[ d2*cos(i)/2, d2*sin(i)/2, i*pas/360 - pas + AB ] :
+					[ d2*cos(i)/2, d2*sin(i)/2, 0 ] :
+				[ d1*cos(i)/2, d1*sin(i)/2, 0 ] ];
+		
+	C = [ for(i=[0 : precision : angle]) (i*pas/360 - pas + AB + BC) > 0 ?
+			(i*pas/360 - pas + AB) > haut ?
+				[ d1*cos(i)/2, d1*sin(i)/2, haut] :
+					(i*pas/360 - pas + AB + BC) > haut ?
+						[ d2*cos(i)/2, d2*sin(i)/2, haut] :
+						[ d2*cos(i)/2, d2*sin(i)/2, i*pas/360 - pas + AB + BC] :
+			[ d1*cos(i)/2, d1*sin(i)/2, 0] ];
+	
+	D = [ for(i=[0 : precision : angle]) (i*pas/360 - pas + AB + BC + AB) > 0 ?
+			(i*pas/360 - pas + AB + BC + AB) > haut ?
+				[ d1*cos(i)/2, d1*sin(i)/2, haut] :
+				[ d1*cos(i)/2, d1*sin(i)/2, i*pas/360 - pas + AB + BC + AB] :
+			[ d1*cos(i)/2, d1*sin(i)/2, 0] ];
+
+	points = concat(A, B, C, D, [[0, 0, 0]], [[0, 0, haut]]);
 
 	longueur = len(A);
 	index_A = 0;
@@ -75,15 +100,15 @@ module vis(diam_int = 4, diam_ext = 6, DA = 0.25, BC = 0.25, pas = 1, haut = 10,
 					face_fermeture_basse, face_fermeture_haute
 					);
 
-	difference()
-	{
+//	difference()
+//	{
 		polyhedron(points, faces);
-
-		translate([0, 0, -pas])
-		{cylinder(d = 2*d2, h = pas);}
-		translate([0, 0, haut])
-		{cylinder(d = 2*d2, h = 3*pas);}
-	}
+//
+//		translate([0, 0, -pas])
+//		{cylinder(d = 2*d2, h = pas);}
+//		translate([0, 0, haut])
+//		{cylinder(d = 2*d2, h = 3*pas);}
+//	}
 }
 
 module vis_metrique(d = 4, haut = 10, precision = 5, diam_buse = 0.4)