123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- include <math.scad>
- /***************************************************************************************
- Modules pour créer un ressort spirale
- ressort_coord prend en arguments :
- x1 l'abscisse du point de départ
- y1 l'ordonnée du point de départ
- x2 l'abscisse du point d'arrivé
- y2 l'ordonnée du point d'arrivé
- tour désigne le nombre de tour qui devront être effectué pour passer du point de départ au point d'arrivé
- largeur désigne la largeur du bras de la spirale
- hauteur
- fix_int désigne le diamètre interne du trou de fixation
- fix_ext désigne le diamètre externe de la fixation
- ressort_point prend en arguments:
- A un vecteur représentant le point de départ
- B un vecteur représentant le point d'arrivé
- tour désigne le nombre de tour qui devront être effectué pour passer du point de départ au point d'arrivé
- largeur désigne la largeur du bras de la spirale
- hauteur
- fix_int désigne le diamètre interne du trou de fixation
- fix_ext désigne le diamètre externe de la fixation
- ***************************************************************************************/
- module ressort_coord(x1 = -10, y1 = -10, x2 = -30, y2 = -30, tours = 2, largeur = 1, hauteur = 2, fix_int = 3, fix_ext = 5)
- {
- difference()
- {
- union()
- {
- //création des fixations
- //point de départ
- translate([x1, y1])
- {cylinder(d = fix_ext, h = hauteur);}
- //point d'arrivé
- translate([x2, y2])
- {cylinder(d = fix_ext, h = hauteur);}
- //création de la spirale
- theta2 = calcule_angle_2d(x2, y2);
- theta1 = norm([x1, y1]) == 0 ? theta2 - tours * 360 : calcule_angle_2d(x1, y1);
- linear_extrude(hauteur)
- {
- spirale_log_coord(
- x1 + ((fix_ext - largeur)/2 ) * cos(theta1),
- y1 + ((fix_ext - largeur)/2 ) * sin(theta1),
- x2 + ((fix_ext - largeur)/2 ) * cos(theta2),
- y2 + ((fix_ext - largeur)/2 ) * sin(theta2),
- tours, largeur);
- }
- }
- //création des trous de fixations
- //point de départ
- translate([x1, y1, -0.5])
- {cylinder(d = fix_int, h = hauteur + 1);}
- //point d'arrivé
- translate([x2, y2, -0.5])
- {cylinder(d = fix_int, h = hauteur + 1);}
- }
- }
- module ressort_point(A = [0, 0], B = [10, 10], tours = 2, largeur = 1, hauteur = 2, fix_int = 3, fix_ext = 5)
- {
- ressort_coord(A[0], A[1], B[0], B[1], tours, largeur, hauteur, fix_int, fix_ext);
- }
- /***************************************************************************************
- Modules pour les écrous
- https://fr.wikipedia.org/wiki/%C3%89crou_hexagonal
- ***************************************************************************************/
- module ecrou(largeur, hauteur)
- {
- linear_extrude(hauteur)
- {polygone_regulier(cotes = 6, rayon = largeur/sqrt(3));}
- }
- module ecrou_M1(marge = 0.5, marge_h = 0, h = 0.8)
- {ecrou(largeur = 2.5 + marge, hauteur = h + marge_h);}
- module ecrou_M2(marge = 0.5, marge_h = 0, h = 1.6)
- {ecrou(largeur = 4 + marge, hauteur = h + marge_h);}
- module ecrou_M3(marge = 0.5, marge_h = 0, h = 2.4)
- {ecrou(largeur = 5.5 + marge, hauteur = h + marge_h);}
- module ecrou_M4(marge = 0.5, marge_h = 0, h = 3.2)
- {ecrou(largeur = 7 + marge, hauteur = h + marge_h);}
- module ecrou_M5(marge = 0.5, marge_h = 0, h = 4.7)
- {ecrou(largeur = 8 + marge, hauteur = h + marge_h);}
- module ecrou_M6(marge = 0.5, marge_h = 0, h = 5.2)
- {ecrou(largeur = 10 + marge, hauteur = h + marge_h);}
- module ecrou_M8(marge = 0.5, marge_h = 0, h = 6.8)
- {ecrou(largeur = 13 + marge, hauteur = h + marge_h);}
- module ecrou_M10(marge = 0.5, marge_h = 0, h = 8.4)
- {ecrou(largeur = 17 + marge, hauteur = h + marge_h);}
|