meca.scad 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. include <math.scad>
  2. /***************************************************************************************
  3. Modules pour créer un ressort spirale
  4. ressort_coord prend en arguments :
  5. x1 l'abscisse du point de départ
  6. y1 l'ordonnée du point de départ
  7. x2 l'abscisse du point d'arrivé
  8. y2 l'ordonnée du point d'arrivé
  9. tour désigne le nombre de tour qui devront être effectué pour passer du point de départ au point d'arrivé
  10. largeur désigne la largeur du bras de la spirale
  11. hauteur
  12. fix_int désigne le diamètre interne du trou de fixation
  13. fix_ext désigne le diamètre externe de la fixation
  14. ressort_point prend en arguments:
  15. A un vecteur représentant le point de départ
  16. B un vecteur représentant le point d'arrivé
  17. tour désigne le nombre de tour qui devront être effectué pour passer du point de départ au point d'arrivé
  18. largeur désigne la largeur du bras de la spirale
  19. hauteur
  20. fix_int désigne le diamètre interne du trou de fixation
  21. fix_ext désigne le diamètre externe de la fixation
  22. ***************************************************************************************/
  23. module ressort_coord(x1 = -10, y1 = -10, x2 = -30, y2 = -30, tours = 2, largeur = 1, hauteur = 2, fix_int = 3, fix_ext = 5)
  24. {
  25. difference()
  26. {
  27. union()
  28. {
  29. //création des fixations
  30. //point de départ
  31. translate([x1, y1])
  32. {cylinder(d = fix_ext, h = hauteur);}
  33. //point d'arrivé
  34. translate([x2, y2])
  35. {cylinder(d = fix_ext, h = hauteur);}
  36. //création de la spirale
  37. theta2 = calcule_angle_2d(x2, y2);
  38. theta1 = norm([x1, y1]) == 0 ? theta2 - tours * 360 : calcule_angle_2d(x1, y1);
  39. linear_extrude(hauteur)
  40. {
  41. spirale_log_coord(
  42. x1 + ((fix_ext - largeur)/2 ) * cos(theta1),
  43. y1 + ((fix_ext - largeur)/2 ) * sin(theta1),
  44. x2 + ((fix_ext - largeur)/2 ) * cos(theta2),
  45. y2 + ((fix_ext - largeur)/2 ) * sin(theta2),
  46. tours, largeur);
  47. }
  48. }
  49. //création des trous de fixations
  50. //point de départ
  51. translate([x1, y1, -0.5])
  52. {cylinder(d = fix_int, h = hauteur + 1);}
  53. //point d'arrivé
  54. translate([x2, y2, -0.5])
  55. {cylinder(d = fix_int, h = hauteur + 1);}
  56. }
  57. }
  58. module ressort_point(A = [0, 0], B = [10, 10], tours = 2, largeur = 1, hauteur = 2, fix_int = 3, fix_ext = 5)
  59. {
  60. ressort_coord(A[0], A[1], B[0], B[1], tours, largeur, hauteur, fix_int, fix_ext);
  61. }
  62. /***************************************************************************************
  63. Modules pour les écrous
  64. https://fr.wikipedia.org/wiki/%C3%89crou_hexagonal
  65. ***************************************************************************************/
  66. module ecrou(largeur, hauteur)
  67. {
  68. linear_extrude(hauteur)
  69. {polygone_regulier(cotes = 6, rayon = largeur/sqrt(3));}
  70. }
  71. module ecrou_M1(marge = 0.5, marge_h = 0, h = 0.8)
  72. {ecrou(largeur = 2.5 + marge, hauteur = h + marge_h);}
  73. module ecrou_M2(marge = 0.5, marge_h = 0, h = 1.6)
  74. {ecrou(largeur = 4 + marge, hauteur = h + marge_h);}
  75. module ecrou_M3(marge = 0.5, marge_h = 0, h = 2.4)
  76. {ecrou(largeur = 5.5 + marge, hauteur = h + marge_h);}
  77. module ecrou_M4(marge = 0.5, marge_h = 0, h = 3.2)
  78. {ecrou(largeur = 7 + marge, hauteur = h + marge_h);}
  79. module ecrou_M5(marge = 0.5, marge_h = 0, h = 4.7)
  80. {ecrou(largeur = 8 + marge, hauteur = h + marge_h);}
  81. module ecrou_M6(marge = 0.5, marge_h = 0, h = 5.2)
  82. {ecrou(largeur = 10 + marge, hauteur = h + marge_h);}
  83. module ecrou_M8(marge = 0.5, marge_h = 0, h = 6.8)
  84. {ecrou(largeur = 13 + marge, hauteur = h + marge_h);}
  85. module ecrou_M10(marge = 0.5, marge_h = 0, h = 8.4)
  86. {ecrou(largeur = 17 + marge, hauteur = h + marge_h);}