Macro Cam Cycloid/fr

Generic macro icon Cam Cycloid

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
Version Macro
0.0.1
Dernière modification
2026-06-01
Version(s) FreeCAD
Toutes
Raccourci clavier
None
Voir aussi
None

Installation

Notez que vous ne devez effectuer les étapes suivantes qu'une seule fois :

  1. Dans le menu de FreeCAD, allez dans Macro → Macros.
  2. Repérez le chemin d'accès indiqué dans le champ Emplacement des macros utilisateur.
  3. Ouvrez ce dossier à l'aide de l'explorateur de fichiers (ou de toute autre application de gestion de fichiers).
  4. Téléchargez le fichier CamCycloid.py depuis https://git.disroot.org/CrowdDiscussesAlternatives/ScriptsForFreeCAD/src/branch/master/CamCycloid et collez-le dans ce dossier.
  5. Fermer la boîte de dialogue Exécuter une macro.

Vous trouverez ici plus d'informations sur la manière d'installer manuellement des macros.

Utilisation

Les exemples suivants montrent comment utiliser ce script.

Exemple 1

Exécution du 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.

Fonction cycloïdale permettant de calculer les intervalles de transition

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ù :

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.

Exemple 2

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.

Exemple 3

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éé.

Création du modèle 3D de la came mécanique

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.

Modification des paramètres par défaut de l'algorithme

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.

Scripts

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.

Liens

Discussion sur le forum : Présentation de la macro CamCycloid

La documentation de ce script au format pdf : Cam Cycloid Documentation

Références

  1. https://mech.poriyaan.in/topic/cycloidal-follower-motion-31880
  2. https://fr.wikipedia.org/wiki/Cyclo%C3%AFde
  3. https://fr.wikipedia.org/wiki/Came_(m%C3%A9canique)