Simulation d’un ordinateur mécanique en scriptant sous FreeCAD

Magazine
Marque
Hackable
Numéro
35
Mois de parution
octobre 2020
Spécialité(s)


Résumé

L’évolution du traitement du signal est une histoire fascinante largement déroulée par David Mindell dans ses divers ouvrages [1] et citations [2]. Partant de l’ordinateur mécanique avec ses rouages, poulies, bielles et crémaillères, le passage à l’électrique au début du 20ème siècle, puis à l’électronique intégrée avec l’avènement du transistor et des circuits intégrés (VLSI) nous ont fait oublier les stades initiaux qui ont amené à notre statut actuel d’ordinateurs infiniment puissants, précis et compacts. Alors que cette histoire semble s’accompagner du passage de l’analogique au numérique – de la manipulation de grandeurs continues en grandeurs discrètes avec son gain en stabilité et reproductibilité – il n’en est en fait rien : un boulier fournit déjà les bases du calcul discrétisé mécanique, tandis que [3] introduit les concepts du calcul mécanique avec les traitements numériques avant de passer aux traitements analogiques.


Body

De tels dispositifs ont été utilisés en pratique jusqu’à la Seconde Guerre mondiale, tel qu’en atteste [4] dans le contexte de l’étude des méthodes cryptographiques en mentionnant « The navy had asked the practical engineers at the Navy Yard under Don Seiler for help fighting code systems before the war began. By 1940 he built a fifty-wheel cam and gear device that was driven by hand cranks. It tested cipher and additives for divisibility by three. ».

Notre curiosité sur les ordinateurs mécaniques a été attisée par l’analyseur harmonique de Michelson (le même qui a monté l’interféromètre pour démontrer l’indépendance de la vitesse de la lumière avec la direction de déplacement de la Terre dans l’Espace). De façon générale, tout système linéaire peut s’exprimer dans le domaine spectral comme somme de composantes harmoniques par série de Fourier, fournissant une méthode de résolution en régime permanent bien plus efficace qu’une résolution dans le domaine temporel.

Pour rappel, l’analyse de Fourier s’appuie sur le fait que les combinaisons linéaires de fonctions périodiques conservent nécessairement les composantes spectrales du signal incident puisque A exp(jω1 t) + B exp(jω2 t) ne saurait contenir d’autres composantes spectrales que ω1 et ω2. L’invariance dans le temps des coefficients A et B garantit que la solution est stationnaire : il s’agit de la classe des systèmes linéaires invariants en temps, ou LTI (Linear Time Invariant).

Parmi les problèmes célèbres qui se résolvent selon cette approche, la position des astres dans le ciel ou la hauteur des marées ont eu un rôle social ou stratégique (date du débarquement concluant la Seconde Guerre mondiale en Europe [5]) déterminant.

Nous proposons une analyse restreinte du phénomène classique de Gibbs qui est la cause des sauts en début et fin des créneaux de signaux électriques rapides observés sur un oscilloscope lent (les termes « rapides » et « lents » prendront leur sens plus tard) au moyen de l’analyseur harmonique. S’agissant d’une mise en œuvre d’un ordinateur mécanique, il serait souhaitable d’aboutir à une réalisation concrète : nous compenserons notre incapacité à réaliser quoi que ce soit de fonctionnel en mécanique par une simulation dynamique sous FreeCAD.

1. L’analyseur harmonique

L’analyseur harmonique est un instrument mécanique conçu pour sommer des termes trigonométriques pondérés par la position d’un levier sur une tige mise en mouvement par une roue dentée. Une vidéo de son fonctionnement est disponible à [6] et l’ouvrage accompagnant la vidéo donne quelques informations techniques en s’étendant principalement sur les aspects esthétiques de la réalisation, sans entrer dans les détails du fonctionnement.

Pour résumer les grands principes que nous tirons de l’analyse de ces vidéos :

  • un pignon fixé en bord de roue parcourt, lors de la rotation de la roue, les coordonnées cos(ω t),sin(ω t). Ainsi, un arbre suivant l’ordonnée du pignon présente une position sin(ω t) soit une fonction trigonométrique ;
  • deux roues adjacentes de rayon R1 et R2 tournent aux vitesses angulaires ω1 et ω2 telles que R1ω1=R2ω2 (condition de non-glissement à l’interface), mais en sens opposé ;
  • un ressort étiré de Δ z de sa position au repos induit une force F=kΔ z avec k la raideur du ressort (loi de Hooke) ;
  • à l’équilibre, la somme vectorielle des forces agissant sur un solide s’annule, soit ∑F=0 si toutes les forces sont orientées dans la même direction.

Fort de ces rappels de mécanique du solide, la bijection entre le signal temporel s(t) supposé de période T et sa décomposition en série de Fourier (Fig. 1) affirme qu’il existe une série de coefficients cn tels que :

formule1 0

et ces coefficients s’identifient par :

formule2 0

Dans le cas particulier du créneau périodique égal à -1 de -T/2 à 0, puis égal à 1 de 0 à +T/2, cn s’identifie analytiquement en considérant que le créneau étant impair, les termes en cosinus (fonction paire) sont nécessairement tous nuls et seuls les termes en sinus (fonction impaire) subsistent. Ainsi, cn=1/T∫-T/2T/2sin(2π n/T x t)dt et comme la primitive de sin est -cos, cette intégrale est égale à :

formule2b

Puisque cos(nπ)=1 si n est pair et cos(nπ)=-1 si n est impair, nous déduisons que cn=1−1=0 si n est pair et cn∝ 1/n si n est impair. Nous retrouvons le développement classique de la série de Fourier du créneau comme somme des termes impairs pondérés par l’inverse du numéro de l’ordre du coefficient.

fig1 2

Figure 1 : Extrait de l’ouvrage de Lord Kelvin [7] sur les séries de Fourier.

2. Modélisation sous FreeCAD

Nous commençons par dessiner la structure sous FreeCAD d’une série de roues dentées tangentes (afin de s’entraîner mutuellement), au bord de chacune desquelles nous plaçons un pignon pour entraîner une pièce en forme de T inversé, barre verticale guidée qui ne peut se déplacer que verticalement (glissière), entraînée par le pignon pouvant glisser le long de la gorge usinée dans la partie horizontale de la pièce. De ce fait, le déplacement vertical du T est le rayon de la roue multiplié par le sinus de l’angle de la roue au cours de sa révolution (Fig. 2) – ce mécanisme est nommé « manivelle-cadre » d’après Wikipédia qui en cite l’utilisation dans https://en.wikipedia.org/wiki/Tide-predicting_machine. Nous supposons que chaque roue est libre de tourner selon l’axe en son centre, que le pignon en bord de roue peut glisser dans la fente horizontale, et que la barre verticale est guidée dans un cylindre (non représenté) à l’aplomb du centre de la roue pour guider selon un mouvement de glissière et interdire tout mouvement horizontal de cette barre (Fig. 2, gauche). La partie brune en sommet de tige, de longueur qui sera variable, représente un ressort qui imposera donc une force proportionnelle à son élongation.

Par condition de contact des roues de rayon Riles unes avec les autres, leur vitesse angulaire ωi respecte R1ω1=R2ω2=R3ω3 de façon à ce que ωi=R1/Riω1 : en choisissant judicieusement le rayon de la ième roue comme le rayon de la première roue divisé par (2i+1), nous avons bien des vitesses de rotation (donc des pulsations du mouvement vertical des pièces en forme de T inversé) qui croissent comme la séquence des harmoniques impairs (2i+1).

Tous les ressorts au sommet des pièces en T inversé sont reliés à une pièce commune guidée dans un mouvement vertical uniquement qui tient une mine en son extrémité : la position de cette mine peut tracer la séquence temporelle formée par la série de Fourier. Cette barre est par ailleurs retenue par un dernier ressort au bâti fixe de la machine pour lui éviter d’aller se coller contre le mécanisme des roues.

Les divers ressorts en parallèle agissent tous pour amener la mine d’ordonnée zm vers le mécanisme des roues selon une somme des forces qui doit balancer, à l’équilibre, la force de rappel du ressort lié au bâti d’ordonnée zb. Si chaque roue Ri place sa pièce en forme de T inversé en ordonnée zi, alors la somme des forces est ∑k (zi−zm) qui doit contrebalancer la force de rappel k(zm−zb) donc ∑(zi−zm)=zm−zb <-> (N+1)zm=zb+∑zi en considérant N harmoniques. Par ailleurs, les roues ayant été sélectionnées de rayon évoluant comme 1/(2i+1), l’élongation du ième ressort décroît comme i, vérifiant la pondération des coefficients de la décomposition en série de Fourier du créneau.

v-fig2 1

Figure 2 : Roue munie d’un pignon en son bord guidant verticalement une pièce en forme de T inversé dont la fente horizontale permet le glissement du pignon, tel que décrite dans [8] (gauche). Milieu gauche : la barre verticale est supposée guidée dans un mouvement de glissière verticale interdisant tout mouvement horizontal. Droite : implémentation sous FreeCAD.

3. Scripter l’évolution dynamique du système en Python

Ayant observé la vidéo de [9] et les scripts fournis en pièces jointes à la vidéo, nous nous sommes inspirés de http://linuxforanengineer.blogspot.com/2015/08/freecad-double-slider-mechanism.html pour animer le modèle d’analyseur harmonique. Le principe de base consiste à associer un timer se déclenchant périodiquement pour appeler une fonction mettant à jour les paramètres géométriques du modèle mécanique. Puisque FreeCAD permet de scripter en Python la position et la géométrie de chaque pièce, il reste à l’auteur d’implémenter les lois de composition des divers degrés de liberté pour évaluer l’évolution des pièces mobiles du système mécanique.

Plutôt que nous lancer dans le système complexe de la roue-pignon-T, considérons dans un premier temps le système simple de deux masses reliées par un ressort et guidées sur une glissière. Le premier ressort entre le bord de la glissière supposée fixe (d’ordonnée 0) et la première masse (d’ordonnée z1) est de même raideur et de même longueur que le second ressort qui relie cette première masse à la seconde masse dont la position z2 est supposée imposée par l’utilisateur. Ainsi, la force -k(z1) entre le point fixe et la première masse est égale à la force +k(z2−z1) entre la seconde masse et la première, et en régime statique où la somme des forces est nulle, il reste -kz1+k(z2-z1)=0 <-> z1=z2/2 (on aurait pu s’en douter intuitivement : il s’agit de l’équivalent mécanique du pont de résistances diviseur de tension). Le programme Python de modélisation du comportement de ce système va donc lire la position de la seconde masse mobile (cm) et en déduire la position de la première masse libre (cl) afin de la placer à la bonne ordonnée. Accessoirement, la masse mobile se voit imposer un mouvement périodique lent (pour vérifier l’hypothèse de conditions quasi statiques de somme des forces nulles).

v-fig3 0

Ces opérations s’automatisent dans la console Python de FreeCAD selon le programme ci-dessus. Nous commençons par charger les bibliothèques permettant d’accéder aux objets de FreeCAD, avant d’instancier les divers objets présents dans la scène que nous avons pris soin de charger. Notre approche pour connaître les noms des objets est, dans la console Python, de commencer à taper FreeCAD.ActiveDocument et d’observer les complétions proposées par l’éditeur. Nous constatons que les parallélépipèdes s’appellent Box, mais les cylindres restent bien Cylinder.

Notons qu’au lieu de directement inclure les commandes Python dans la console de FreeCAD, il est plus efficace d’utiliser son éditeur favori et appeler le script par :

import os
os.chdir('/tmp') # aller dans le répertoire contenant le script
import mon_programme
# import importlib
# importlib.reload(mon_programme)

Cette séquence charge le programme Python mon_programme.py situé dans /tmp et éventuellement le recharge (importlib.reload) lors de la phase de développement.

4. Généralisation à l’analyseur harmonique

Cette rapide analyse se généralise à l’analyseur harmonique par les montages présentés en Fig. 3. Dans ce montage, 3 (gauche) ou 4 (droite) composantes spectrales sont analysées. Les ratios des roues sont de 15:5:3, c’est-à-dire que lorsque la première roue tourne à ω rad/s, la deuxième roue tourne à 3ω rad/s et la troisième roue à 5ω rad/s. Les roues intermédiaires ont pour vocation de changer le signe de la rotation sans changer la vitesse, étant de même diamètre que leur voisine. Finalement, le pignon de chaque roue est situé en bord de rayon, de façon à ce que la force exercée par chaque ressort décroisse comme le rayon, c’est-à-dire 1/(2N+1) pour la Nème roue dont le rayon a été ajusté pour que sa vitesse de rotation soit (2N+1)ω, ω étant la vitesse de rotation de la première roue qui entraîne les autres.

v-fig4 1

Figure 3 : Analyseur harmonique pour 3 composantes spectrales (gauche) et 4 composantes spectrales (droite).

Un extrait du script Python pour contrôler cette séquence est :

p1 = FreeCAD.ActiveDocument.getObject("Connect")
h1 = FreeCAD.ActiveDocument.getObject("Connect001")
c0 = FreeCAD.ActiveDocument.getObject("Cylinder")
c1 = FreeCAD.ActiveDocument.getObject("Cylinder001")
spring1 = FreeCAD.ActiveDocument.getObject("Box003")
p1ini=p1.Placement
h1ini=h1.Placement
springini=spring1.Placement
leninit1=spring1.Width
[... idem pour les autres roues ...]
 
pen=FreeCAD.ActiveDocument.getObject("Box012")
peninit=pen.Placement.Base
i=0
def update():
  global i
  alpha = radians( i )
  y1 = c1.Placement.Base.x*(sin( alpha ))
  p1.Placement=FreeCAD.Placement(p1ini.Base,FreeCAD.Rotation(FreeCAD.Vector(0,0,1),i) )
  h1.Placement=FreeCAD.Placement(h1ini.Base+FreeCAD.Vector(0,y1,0) , h1ini.Rotation )
  spring1.Placement = FreeCAD.Placement( springini.Base+FreeCAD.Vector(0,y1,0),h1ini.Rotation)
  
[... Idem pour les autres roues : alpha = (2N+1)*i pour roue N>=0 ...]
  
  yvar=(y1+y2+y3+y4)/3   # la force de rappel est un terme constant choisi a 0
  spring1.Width=leninit1.Value-y1+yvar
  spring2.Width=leninit2.Value-y2+yvar
  spring3.Width=leninit3.Value-y3+yvar
  spring4.Width=leninit4.Value-y4+yvar
  pen.Placement.Base.y=peninit.y+yvar

Ce script Python fait tourner la roue (p1.Placement dont l’argument FreeCAD.Rotation prend en argument une rotation autour de l’axe de normale z) et déplace la hauteur de la barre horizontale du T pour suivre le mouvement de la roue (h1.Placement dont l’argument h1ini.Base est modifié de FreeCAD.Vector( 0,y1,0 ) avec y1 l’ordonnée du pignon sur la roue) pour finalement calculer la force appliquée à la barre horizontale reliant les divers ressorts et en déduire la position comme yvar=(y1+y2+y3+y4)/2. Cette relation est un cas particulier de la démonstration précédente qui indiquait que la barre qui porte une mine afin de tracer la courbe résultante du calcul et reliée par un ressort de même raideur k que tous les M autres ressorts au bâti statique de la machine vérifie :

formule3

en choisissant arbitrairement zbati=0. Nous trichons quelque peu, car nous avons résolu les équations et introduisons la solution en plaçant les éléments du modèle avec le bon angle ou la bonne position : il aurait été plus satisfaisant d’imposer des contraintes dans le modèle tel que décrit à https://www.freecadweb.org/wiki/Sketcher_Workbench et de ne faire évoluer que l’angle de la première roue pour voir, par conséquence des contraintes entre les pièces (entraînement, glissière...), les autres pièces se mettre en mouvement. Cette méthode nécessite de partir du plan 2D (sketch) et d’extruder les pièces contraintes entre elles au lieu, comme nous l’avons fait, d’assembler des éléments 3D.

Observer le mouvement du mécanisme décrit en Fig. 4 est hypnotisant, car malgré la trivialité de la démonstration, l’observation de la combinaison des forces introduites par les roues en mouvement se conclut par un mouvement selon une forme de créneau du stylo fixé en bout de barre fixe.

v-fig5 2

Figure 4 : Capture d’écran du mécanisme en mouvement.

5. Résultats

L’observation qualitative d’un mouvement s’apparentant à un mouvement en créneau est peu satisfaisante pour une analyse quantitative. Nous sauvons donc dans un fichier les positions successives de yvar. Nous constatons (Fig. 5) le parfait accord avec le modèle de somme des harmoniques impaires pondéré par l’inverse du numéro de l’harmonique. Nous avons aussi indiqué (orange) la conséquence d’oublier les roues intermédiaires : dans ce cas, l’harmonique 3 tourne dans la direction opposée des harmoniques 1 et 5 et la somme des forces résultantes ne ressemble pas à un créneau.

v-fig6 0

Figure 5 : Évolution de la position du stylo fixé à la barre sommant les forces induites par les ressorts fixés par leur autre extrémité aux roues en rotation, en fonction du temps. Le motif de créneau se dessine d’autant plus clairement (violet, puis vert) que le nombre d’harmoniques sommées augmente. Se tromper de sens de rotation d’une roue (jaune) induit une réponse qui ne correspond pas au motif de créneaux attendu. Nous avons automatisé la réalisation du système à 20 harmoniques (bleu) pour nous approcher du créneau visé.

6. Automatisation de la synthèse du modèle

Atteindre l’objectif de l’analyseur harmonique de Michelson avec ses vingt composantes spectrales est passablement fastidieux, si chaque pièce est réalisée manuellement. Nous pouvons automatiser la création des pièces dans le script au lieu d’instancier des pièces dessinées à la main. FreeCAD a le bon goût de fournir dans la console Python les commandes correspondant à chaque opération manuelle, à la subtilité près que les positions sont sans unité alors que les longueurs sont données en mm, deux représentations incompatibles lors des opérations arithmétiques : les unités sont éliminées en considérant la propriété .Value d’une longueur.

À titre d’exemple de l’assemblage de la roue principale et de son pignon, le code ci-dessous illustre l’instanciation de deux cylindres, la définition de leurs paramètres (hauteur, rayon et position), puis de leur fusion.

for k in range(nbharmonics):
tmproue=FreeCAD.ActiveDocument.addObject("Part::Cylinder","Cylinder"+str(k))
tmproue.Height=1
tmproue.Radius=100/(2*k+1)
tmproue.Placement.Base.z=-1
pignon=FreeCAD.ActiveDocument.addObject("Part::Cylinder","Pignon"+str(k))
pignon.Height=1
pignon.Radius=0.5
pignon.Placement.Base.x=tmproue.Radius.Value # -1
tmprouepignon=FreeCAD.ActiveDocument.addObject("Part::MultiFuse","Fusion")
tmprouepignon.Shapes = [tmproue,pignon]
rouepignon.append(tmprouepignon)
[...]
 
k=0
position=0
for r in roue:
if k==0:
  position=r.Radius
else:
  rouepignon[k].Placement.Base.x=position+r.Radius+2*r.Radius
  roue2[k].Placement.Base.x=position+r.Radius
  position=position+2*r.Radius+2*r.Radius
k+=1

L’assemblage du dispositif complet avec ses 20 composantes spectrales est illustré en Fig. 6. Évidemment avec un tel nombre de pièces et en particulier le redimensionnement dynamique de la longueur des ressorts, le modèle devient plus lent à simuler, mais reste relativement fluide.

v-fig7 3

Figure 6 : Modèle synthétisé automatiquement pour sommer les contributions de 20 harmoniques. Les ressorts, pièces de longueur variable, sont indiqués en orange.

7. Modèle réalisable : remplacer les cylindres par des roues dentées

La découverte du greffon (workbench) FCGears pour la conception de roues dentées permet d’envisager de passer d’un modèle virtuel à un modèle réel. En effet, en remplaçant le rayon des cylindres par le nombre de dents dans la roue, nous obtenons un modèle réaliste d’entraînement, qui nécessite uniquement de transformer le rayon de valeur positive quelconque en nombre entier de dents, dont nous verrons les conséquences dans la prochaine section. Les attributs définissables de la roue dentée sont son épaisseur height et le nombre de dents teeth :

import freecad.gears.commands
tmproue=freecad.gears.commands.CreateInvoluteGear.create()
tmproue.height=1
tmproue.teeth=math.floor(R/(2*k+1))
tmproue.Placement.Base.z=-1
[...]
if (k>0):
  roueinter=freecad.gears.commands.CreateInvoluteGear.create()
  roueinter.height=1
  roueinter.teeth=math.floor(R/(2*k+1))
  roueinter.Placement.Base.z=-1

En passant l’attribut simple de la roue dentée de false à true, nous constatons qu’une roue dentée de M dents est équivalente à un cylindre de diamètre M mm. Par rapport à notre modèle précédent où les distances étaient paramétrées sur les rayons des cylindres, nous devons diviser toutes les dimensions par 2.

v-fig8 0

8. Sources d’incertitudes

Nous répétons à qui veut l’entendre la supériorité de l’électronique numérique sur les solutions analogiques, voire mécaniques. Que nous apprend ce modèle mécanique sur le sujet ?

  • Remplacer les cylindres lisses par des roues dentées élimine le problème de glissement des surfaces les unes sur les autres, problème classiquement décrit dans les intégrateurs dans lesquels une roue glisse sur un disque en rotation [11]. Ce problème met d’ailleurs en évidence pratique le problème d’adaptation d’impédance couramment mis en œuvre en électronique analogique par le montage suiveur : comment garantir l’absence de couple sur le système entraîné (la roue intégratrice) pour éviter le glissement, compte tenu de la faible force de frottement avec le disque ? Ce problème est illustré dans [1] avec l’exemple de l’entraînement d’une tourelle de canon par un système de visée manipulé par un opérateur [11].
  • Le pignon entraînant la pièce en T inversé chargée de convertir la rotation de la roue en mouvement de translation en sinus de l’angle ne peut se trouver sur la circonférence, induisant une pondération du mouvement qui n’est pas exactement en l’inverse de la pulsation.
  • De façon générale, la pondération de la kième harmonique peut être autre que 1/k telle qu’illustré ici et en section 9 en plaçant le pignon d’entraînement de la pièce en T inversé ailleurs que sur la circonférence, avec l’incertitude d’usinage de cette position.
  • La condition d’engrenage peut imposer une condition de phase entre roues adjacentes qui n’est pas exactement nulle comme le voudrait la théorie.

v-fig9 0

Figure 7 : Erreurs de calcul (flèches rouges) suite aux incertitudes sur le modèle mécanique : 100 dents et un pignon à 2 mm du bord de la roue dentée ; 100 dents et le pignon en bord de roue ; 105 dents ; 945 dents pour revenir au cas idéal.

Tous ces défauts peuvent bien entendu être corrigés par une conception mécanique adéquate, mais visent à mettre en évidence les risques d’une conception analogique face à une solution numérique, a fortiori implémentée sur des entiers et ne souffrant donc pas des erreurs de calcul sur les nombres à virgule flottante. En figure 7, nous sommes passés d’un modèle avec un nombre arbitraire de dents (100) sur la roue la plus grande vers un nombre multiple des trois premières harmoniques (105=3 x 5 x 7) et des cinq premières harmoniques (945=3 x 5 x 7 x 9) pour finalement revenir au cas idéal. Comme les calculs des coefficients de Fourier sont des intégrales, ces erreurs s’accumulent pour donner un résultat dont l’erreur croît avec le temps.

9. Cas du triangle

Nous avions commencé cette étude par une erreur en plaçant les engrenages adjacents, oubliant de ce fait que les roues tournent en sens inverse et induisent donc un signe négatif dans l’argument de la fonction trigonométrie.

v-fig10 0

Figure 8 : Gauche : générateur de triangle, dans lequel l’utilisation des roues adjacentes garantit l’inversion du signe de l’argument des fonctions trigonométriques successives. Droite : tracé de la fonction résultant de la somme des contributions des termes trigonométriques qui représente bien un triangle (violet), et comparaison avec le mode principal tracé par la roue de plus grand rayon (vert).

Nous retournons cette erreur à notre avantage en considérant les coefficients de la série de Fourier du triangle. La fonction triangle est une fonction linéaire croissante sur la première moitié de sa période et linéaire décroissante sur sa seconde moitié. Ainsi, les coefficients de la série de Fourier impliquent le calcul de la primitive de xsin(x) dont on se rappellera, lors de l’intégration par parties qui nous indique que ∫u’v=[uv]-∫v’u et en prenant u=x et v=−cos (donc u’=1 et v’=sin), que ces intégrales sont de la forme [sin(x)-xcos(x)] pour retrouver la solution classique que le coefficient de la nième harmonique, n impair, est (-1)(n-1)/2/n2. Le terme -1(n-1)/2 représente le changement de direction des roues adjacentes, tandis que la pondération en 1/n2 est respectée en plaçant le pignon dirigeant la pièce en T inversé non sur la circonférence de la roue, mais à 1/n de son rayon (qui lui-même décroît comme 1/n du rayon de la première roue). Une telle conception est illustrée en Fig. 8.

tmproue.Radius=100/(2*k+1)   # composante harmonique impaire (pulsation angulaire)
[...]
pignon.Placement.Base.x=tmproue.Radius.Value/(2*k+1) # pondération = 1/n*1/n=1/n^2
tmprouepignon.Shapes = [tmproue,pignon]

10. Réalisation

Les roues dentées sont réalisées en découpe laser sur plexiglas de 3 mm d’épaisseur (Fig. 9).

v-fig11 0

Figure 9 : En haut à gauche : découpe laser des pièces dans du PMMA de 3 mm d’épaisseur. La plus grande roue, qui n’a aucune raison d’être pleine, a fourni la matière pour les roues plus petites. En haut à droite : malgré les structures fines des roues dentées, les pièces se séparent sans problème de la plaque de matière. Bas : assemblage des pièces.

La contrainte sur la résolution des crans impose la dimension des roues. Partant d’un cran d’au moins 1 mm de longueur/largeur, la roue de 945 crans doit présenter une circonférence de 945 mm, soit un rayon de 150 mm. Ce diamètre de 300 mm va donc imposer l’extension du ressort tiré par la barre en T inversé fixée en périphérie. Or, un ressort ne peut être étiré excessivement sous peine de perdre sa propriété d’élasticité (relation linéaire entre force et extension au travers de la constante de raideur du ressort), mais atteindre un régime de déformation plastique irréversible. Ces contraintes déterminent les dimensions de l’instrument assemblé.

v-fig12 0

Figure 10 : Deux fournisseurs de ressorts avec des caractéristiques à peu près identiques : que ce soit corde à piano ou inox, les raideurs minimales sont de l’ordre de 0,03 à 0,05 N/mm (contrainte rouge) pour une extension d’au moins 30 cm (contrainte verte).

Par ailleurs, le couple raideur du ressort k et extension δ x vont déterminer la force F=k x δx appliquée sur la barre en T inversé ou les axes des roues et donc dimensionner ces éléments. Nous constatons en consultant les divers catalogues de fournisseurs de ressorts qu’il y a une relation entre le diamètre extérieur du ressort et le diamètre du fil : plus un ressort est de diamètre important, plus sa raideur est faible, mais aussi plus le diamètre du fil composant le ressort augmente, augmentant donc la raideur. Nous n’avons pu trouver de ressort de raideur inférieure à 0,05 N/mm, soit une force en pleine extension (30 cm) de 15 N ou l’équivalent exercé par une masse de 1,5 kg dans le champ de gravité terrestre (Fig. 10). Les pièces en T inversé aussi réalisées en plexiglas de 3 mm d’épaisseur sont incapables de résister à une telle force, et une conception plus robuste que la découpe laser de plastique est nécessaire pour ces pièces.

v-fig13 0

Figure 11 : Gauche : positionnement des pièces tangentes pour engrener les pignons. Les roues sont surélevées d’une hauteur d’écrou et de rondelle pour éviter que les guides des barres en T ne butent sur le support. Droite : montage achevé. La règle de 30 cm donne l’échelle.

L’assemblage de l’instrument démontre les limites du prototypage rapide : le jeu excessif et la petite dimension des crans imposent une précision d’assemblage bien meilleure que le montage grossier abordé (Fig. 11). Néanmoins, avec bien des frottements et des passages grippés lorsque les vis guidant les barres en T doivent passer à côté des pignons de la roue dentée voisine, l’assemblage veut bien tourner et entraîner a bon rythme les diverses composantes de la série de Fourier. Cette expérience conduit à d’autant mieux respecter les montages incroyablement complexes des derniers ordinateurs mécaniques [4], avant le passage aux ordinateurs électromécaniques pour aboutir aux systèmes intégrés que nous connaissons actuellement.

Conclusion

fig14

Figure 12 : Description du calculateur analogique de marée comme somme des coefficients de Fourier de la série périodique identifiés empiriquement du niveau de la mer [7].

L’intérêt de l’ordinateur mécanique, peu précis, encombrant et lent, peut paraître discutable à une époque de concentration quasi infinie de portes logiques dans un circuit intégré. Au-delà de son intérêt historique, l’ordinateur mécanique reste d’actualité dans les environnements hostiles dans lesquels la technologie de dopage de silicium ne saurait survivre [12], voire pour des traitements de signaux radiofréquences dont les vitesses ne sont pas (encore) accessibles aux traitements numériques en temps discret [13]. Ces principes s’abordent sans mettre en marche une fraiseuse en prototypant dans le monde virtuel de FreeCAD et ses scripts Python pour manipuler les positions et dimensions des pièces du modèle mécanique.

Le système de Michelson est passablement plus complexe par l’ajout de leviers intermédiaires qui permettent de dynamiquement pondérer la contribution de chaque roue (coefficient de la série de Fourier), sans s’imposer une contribution égale au rayon de la roue. Nous laissons le soin au lecteur de développer le modèle proposé ici pour atteindre la flexibilité de l’instrument de Michelson, voire de prédire par ce biais la prochaine marée.

Tous les scripts et vidéos des systèmes mis en œuvre dans ce document sont disponibles à https://github.com/jmfriedt/harmonic_analyzer_FreeCAD.

Références

[1] D.A. Mindell, Between Human and Machine – Feedback, Control and Computing Before Cybernetics Johns Hopkins University Press (2004) puis D.A. Mindell, Digital Apollo: Human and Machine in Spaceflight, MIT Press (2008)

[2] S. Bennett, A History of Control Engineering, 1930–1955, IET (1993)

[3] F.J. Murray, The theory of mathematical machines, revised edition, Kong’s Crown Press (1948)

[4] C.B. Burke, It Wasn’t All Magic: The Early Struggle to Automate Cryptanalysis, 1930s-1960s, Cryptologic History 6, National Security Agency (2002), p.153

[5] B. Parker, The tide predictions for D-Day, Physics Today 64 (9), 35–40 (2011) ou, plus complet, P. Kennedy, Engineers of Victory: The Problem Solvers who Turned the Tide in the Second World War, Penguin (2014)

[6] B. Hammack, An Old Mechanical Computer: The Harmonic Analyzer à https://www.youtube.com/watch?v=GyYflzRVu6M (YouTube, accédé Déc. 2019)

[7] W. Thomson Baron Kelvin, Mathematical and physical papers, vol. 6 Cambridge University Press, 277- (1911) disponible à https://ia802700.us.archive.org/1/items/mathematicalphys06kelvuoft/mathematicalphys06kelvuoft.pdf avec un exemple de coefficients de Fourier en p.295

[8] Lord Kelvin & P.G. Tait, Treatise on Natural Philosophy, vol.1, Cambridge University Press (1912), section 55, disponible à https://archive.org/details/treatisnatphil01kelvrich/page/n61

[9] J.G. Egas Ortuño, FreeCAD animation how to à https://www.youtube.com/watch?v=BHbnOlBvpLI (YouTube, accédé Déc. 2019)

[10] B. Hammack, P. Ryan & N. Ziech, Albert Michelson’s Harmonic Analyzer: A Visual Tour of a Nineteenth Century Machine That Performs Fourier Analysis, Articulate Noise Books (2014), disponible à http://www.engineerguy.com/fourier/pdfs/albert-michelsons-harmonic-analyzer.pdf

[11] A.B. Clymer, mechanical analog computers of Hannibal Ford and William Newell, IEEE Annals of the History of Computing 15 (2) pp.19–34 (1993)

[12] L’Automaton Rover for Extreme Environments (AREE) de la NASA, décrite à https://www.nasa.gov/feature/automaton-rover-for-extreme-environments-aree/, est un automate exclusivement mécanique conçu pour survivre aux températures extrêmes de Vénus où les sondes électroniques n’ont fonctionné que quelques dizaines de minutes à la surface de la planète.

[13] C. Ruppel & al., A review of optimization algorithms for the design of the SAW transducers, Proc. IEEE Ultrasonics Symposium pp.73–83 (1991) cite S. Fushimi & M. Morimoto, A design method of FIR filters suitable for SAW filters, Electronics and Communications in Japan (Part I: Communications) 71(2), pp.61–70 (1988). Plus formel, C. Campbell, Surface Acoustic Wave Devices and Their Signal Processing Applications section 8 « Using the Remez Algorithm for SAW filter design », Academic Press (1989)



Article rédigé par

Par le(s) même(s) auteur(s)

Programmation USB sous GNU/Linux : application du FX2LP pour un récepteur de radio logicielle dédié aux signaux de navigation par satellite (1/2)

Magazine
Marque
Hackable
Numéro
57
Mois de parution
novembre 2024
Spécialité(s)
Résumé

Alors que l’USB est souvent abordé comme un bus émulant un port série, tirer pleinement profit de sa bande passante nécessite d’exploiter les interfaces disponibles les plus appropriées, en particulier Human Interface Device (HID) et transferts en volume (Bulk). Nous proposons d’appréhender le bus USB exposé par le noyau Linux en vue d’en tirer le maximum du débit disponible, et appliquer cette connaissance en réalisant un récepteur de radio logicielle dédié à la réception des signaux de navigation par satellite (GNSS) en bande L (1–2 GHz) grâce au MAX2771. Nous démontrons le bon fonctionnement du circuit avec l’acquisition et le traitement de signaux issus de diverses constellations, de GNSS en orbite intermédiaire MEO et Iridium en orbite basse LEO, observés avec une bande passante pouvant aller jusqu’à 44 MHz.

Algèbre linéaire rapide : BLAS, GSL, FFTW3, CUDA et autre bestiaire de manipulation de matrices dans le traitement de signaux de radio logicielle

Magazine
Marque
Hackable
Numéro
56
Mois de parution
septembre 2024
Spécialité(s)
Résumé

L’algèbre linéaire est habituellement introduite comme un formalisme abstrait d’opérations matricielles. Nous proposons quelques applications concrètes de cette algèbre dans le cas du traitement de signaux radiofréquences, ainsi que des mises en œuvre sur processeur généraliste (CPU) et graphique (GPU) en vue de passer d’un post-traitement de signaux enregistrés à un traitement en temps réel. Nous survolerons ainsi quelques fonctions des principales bibliothèques de calcul linéaire pour proposer des implémentations de corrélation ou d’optimisation aux moindres carrés.

Trente ans d’open source... pour en arriver là

Magazine
Marque
GNU/Linux Magazine
Numéro
270
Mois de parution
juillet 2024
Spécialité(s)
Résumé

Été 2024... Exactement 30 ans après la première installation de GNU/Linux sur un 80486 cadencé à 100 MHz, 80 disquettes copiées depuis un CD (distribution Slackware) dont je ne possédais pas le lecteur, avec évidemment la 79e disquette défectueuse pour achever l’installation de X11 (alias XFree86, avant sa reprise en X.Org en 1999). Peu importe, l’interface graphique ne sert à rien d’autre que consommer des ressources inutilement [1]. J’ai oublié la version du noyau (kernel), l’historique indique 1.1, mais je ne développais pas à ce niveau à cette époque. J’ai eu la chance de transiter de MS-DOS à GNU/Linux sans passer par l’étape MS Windows, l’École Normale Supérieure de Lyon à laquelle j’accède en septembre 1994 étant exclusivement munie de stations Sun Microsystems sous Solaris.

Les derniers articles Premiums

Les derniers articles Premium

La place de l’Intelligence Artificielle dans les entreprises

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 98 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous