| Description |
|---|
| Cette macro crée une nouvelle pièce comportant une esquisse représentant le profil d'une came mécanique. Les paramètres à saisir sont le rayon, l'angle de départ et l'angle de fin de chaque intervalle de pause de la came. Les intervalles de transition de la came sont calculés à l'aide de la fonction cycloïdale, puis approximés par des B-splines. Version macro : 0.0.1 Date dernière modification : 2026-06-01 Version FreeCAD : Toutes Téléchargement : Text-x-python.png Auteur: Garlic |
| Auteur |
| Garlic |
| Téléchargement |
| Text-x-python.png |
| Liens |
| Documentation de Cam Cycloid Page des macros Comment installer une macro Comment créer une barre d'outils |
| Version Macro |
| 0.0.1 |
| Dernière modification |
| 2026-06-01 |
| Version(s) FreeCAD |
| Toutes |
| Raccourci clavier |
| None |
| Voir aussi |
| None |
Notez que vous ne devez effectuer les étapes suivantes qu'une seule fois :
Vous trouverez ici plus d'informations sur la manière d'installer manuellement des macros.
Les exemples suivants montrent comment utiliser ce script.
Pour que l'algorithme fonctionne, vous devez ouvrir la console Python dans FreeCAD et exécuter le code ci-dessous (c'est-à-dire copier-coller chaque ligne du code ci-dessous séparément et appuyer à chaque fois sur Entrée).
import CamCycloid
camCycloidObj = CamCycloid.CamCycloid()
camCycloidObj.createCamProfile()
Notez qu'une fois FreeCAD ouvert, vous devez copier-coller les deux premières lignes de ce code une seule fois (la première ligne importe le script et la deuxième ligne crée un objet). Ensuite, chaque fois que vous souhaitez exécuter l'algorithme du script (afin de lire les données de la feuille de calcul, lancer le solveur et présenter les résultats), il suffit de copier-coller la troisième ligne du code ci-dessus, puis d'appuyer sur Entrée.
Le message suivant s'affichera dans la console Python :
Please enter the number of knots (points) that the B-spline (which will approximate the cycloid curve) will have (i.e. number of steps in discretization). Number must be more than 2 (20 is a good choice):
Vous pouvez écrire 20 puis appuyer sur Entrée.
Ensuite, le message suivant s'affiche dans la console Python :
Please enter the data of the cam in the format: Radius_Of_1st_Dwell_Interval,Start_Angle_Of_1st_Dwell_Interval,End_Angle_Of_1st_Dwell_Interval,Radius_Of_2nd_Dwell_Interval,Start_Angle_Of_2nd_Dwell_Interval,End_Angle_Of_2nd_Dwell_Interval and so on, until you write as many dwell intervals the cam will have. Angles must be in degrees and radius in mm. Use dot for decimal separator. Positive angles are from X axis (x > 0) turning counterclockwise:
Dans cet exemple, nous allons saisir les données d'entrée suivantes :
60,20,70,80,200,250
puis, lorsque l'on appuie sur Entrée, une nouvelle pièce comportant un corps avec une esquisse est créée.
Lorsque vous ouvrez l'esquisse, le profil de la came s'affiche.
Le premier intervalle de pause du profil de la came a un rayon de 60 mm. Il commence à un angle de 20° et se termine à un angle de 70° (par rapport à l'axe x). Pendant la rotation de la came mécanique, lorsque le suiveur de came est en contact avec l'intervalle de repos de la came, la course du mécanisme ne change pas (c'est-à-dire qu'il n'y a pas de mouvement lorsque cette partie du profil de la came est en contact avec le suiveur de came).
Le deuxième intervalle de pause du profil de la came a un rayon de 80 mm. Il commence à un angle de 200° et se termine à un angle de 250° (par rapport au sens positif de l'axe x, c'est-à-dire y = 0 et x > 0).
Notez que lorsque deux intervalles de pause se chevauchent, un message d'erreur s'affiche dans la console Python :
Error: Dwell intervals are overlapping! Please check the angles of the dwell intervals.
De même, le rayon d'un intervalle de pause doit toujours être positif, et son angle de fin toujours supérieur à son angle de départ.
La transition entre le premier intervalle de pause et le deuxième intervalle de pause, ainsi qu'entre le deuxième intervalle de pause et le premier intervalle de pause, est calculée à l'aide de la fonction cycloïdale :
yOfCycloid = stroke/math.pi * (math.pi*thetaAngleInRad/angleRangeInRad – 0.5*math.sin(2*math.pi*thetaAngleInRad/angleRangeInRad))
yOfCycloid = stroke*thetaAngleInRad/angleRangeInRad – stroke/(2*math.pi)*math.sin(2*math.pi*thetaAngleInRad/angleRangeInRad)
où :
yOfCycloid correspond au déplacement du suiveur de came (en mm) lorsque la came a effectué une rotation de thetaAngleInRad (comme illustré sur l'image ci-dessous).stroke du 1er intervalle de transition correspond à la différence entre le rayon du deuxième intervalle de pause et celui du premier intervalle de pause.AngleRangeInRad du 1er intervalle de transition correspond à la différence entre l'angle de départ du deuxième intervalle de pause et l'angle de fin du premier intervalle de pause.Dans cet exemple, la course de l'intervalle de transition 1st est de 20 mm (soit 80 mm – 60 mm), et la plage angulaire est de 130° (soit 200° – 70°), ce qui équivaut à 2.268928 rad.
Pour plus d'informations sur la fonction cycloïdale d'une came mécanique, vous pouvez consulter le lien suivant :
https://mech.poriyaan.in/topic/cycloidal-follower-motion-31880
La courbe de la fonction cycloïdale est approximée par une B-spline. Plus vous choisissez de nœuds pour la B-spline, plus l'approximation sera précise.
Dans la console Python, tapez :
camCycloidObj.createCamProfile()
puis appuyez sur Entrée.
Dans le premier message d'invite, saisissez 20 puis appuyez sur Entrée.
Dans le deuxième message d'invite, écrivez :
60,-30,20,80,150,200
puis appuyez sur Entrée.
Vous pouvez constater que, dans ce cas, l'axe des x passe par la courbe du premier intervalle de pause (puisque l'angle de départ est de -30° par rapport à l'axe des x). Gardez à l'esprit que l'algorithme convertit tous les angles en angles positifs, puis réorganise les intervalles de maintien (par ordre croissant), mais cela n'a pas d'importance, sauf si vous souhaitez modifier ou améliorer l'algorithme.
Dans la console Python, tapez :
camCycloidObj.createCamProfile()
puis appuyez sur Entrée.
Dans le premier message d'invite, saisissez 20 puis appuyez sur Entrée.
Dans le deuxième message d'invite, écrivez :
60,20,50,80.5,110,140,60,220,240,80.5,310,340
puis appuyez sur Entrée.
Le profil de la came comportant quatre phases de pause a été créé.
Vous pouvez extruder l'esquisse et ajouter d'autres fonctions afin de créer le modèle 3D de la came. L'image ci-dessous illustre une came dotée d'un trou, destinée à être montée sur un arbre. Vous pouvez ajouter davantage de détails, par exemple en divisant la came en deux parties et en les assemblant à l'aide de vis, afin de la fixer à l'arbre.
Avant de créer la nouvelle pièce à l'aide de la fonction camCycloidObj.createCamProfile() dans la console Python, vous pouvez modifier certains paramètres de l'algorithme, si vous le souhaitez.
Si vous écrivez dans la console Python :
camCycloidObj.useAngleOfDiscretization = True
et appuyez sur Entrée ; l'algorithme placera alors un point de nœud dans la B-spline tous les 10° environ (vous ne serez pas invité à saisir le nombre de nœuds).
Si vous écrivez ensuite dans la console Python :
import math
et ensuite :
camCycloidObj.angleOfDiscretization = math.radians(5)
L'algorithme placera alors un point de nœud sur la B-spline tous les 5° environ (à chaque nouvelle partie que vous créerez à l'aide de la fonction camCycloidObj.createCamProfile()).
Si vous écrivez dans la console Python :
camCycloidObj.allowAuxPoints = True
l'algorithme créera alors un point de construction entre chaque paire de nœuds adjacents, qui sera un point de la courbe cycloïdale calculée (c'est-à-dire que ces points de construction sont des solutions exactes de la fonction cycloïdale).
Vous pouvez alors utiliser ces points pour évaluer l'erreur d'approximation de la fonction cycloïdale par la B-spline, en mesurant la distance entre l'un de ces points auxiliaires et la courbe B-spline.
Si vous écrivez dans la console Python :
camCycloidObj.auxPointsAreConstructionGeom = False
alors ces points auxiliaires seront des points géométriques.
Si vous écrivez dans la console Python :
camCycloidObj.allowBsplineInternalAlignment = False
dans ce cas, les nœuds des B-splines ne seront pas contraints sur les B-splines.
Si vous écrivez dans la console Python :
camCycloidObj.allowBsplineConstraints = False
Dans ce cas, les points de départ et d'arrivée des B-splines ne seront pas contraints aux points de départ et d'arrivée des arcs représentant les intervalles de pause. Vous pouvez définir ces paramètres sur false si une erreur survient lors de la mise en place automatique de ces contraintes.
Vous trouverez le fichier CamCycloid.py via le lien suivant :
https://git.disroot.org/CrowdDiscussesAlternatives/ScriptsForFreeCAD/src/branch/master/CamCycloid
La version du script est indiquée dans la première ligne du script. La licence du code est indiquée dans les premières lignes du script.
Discussion sur le forum : Présentation de la macro CamCycloid
La documentation de ce script au format pdf : Cam Cycloid Documentation