Marc BUFFAT département mécanique, université Lyon 1
%matplotlib inline
import numpy as np
import sympy as sp
import k3d
import matplotlib.pyplot as plt
from IPython.core.display import HTML
from IPython.display import display,Image
from sympy.physics.vector import init_vprinting
init_vprinting(use_latex='mathjax', pretty_print=False)
On s'intéresse à la cinématique d'une nacelle de manège assimilée à une boule de centre A et de rayon r, et entrainée en rotation par un bras AB de longueur L et fixé en B. On a un passager de masse M dans la nacelle, qui représente l'essentiel du poids.
On note $R_0$ le repère fixe d'origine O. On note $R_1$ le repére obtenu à partir de $R_0$ par rotation $\theta$ autour de la vertical $R_0.z$ et on note $\phi$ l'angle du cable avec la verticale. On note $R_2$ le repère lié à la nacelle avec $R_2.z$ orienté suivant la direction du bras.
Les paramêtres sont:
# bibliothéque utilisée
import sympy as sp
from sympy.physics.mechanics import dynamicsymbols, Point, ReferenceFrame
# definition des parametres et des ddl
L, g, M, t = sp.symbols("L g M t")
theta, phi = dynamicsymbols("theta phi")
# definition des points et repère
O = Point("O")
R0 = ReferenceFrame("R_0")
B = Point("B")
B.set_pos(O,L*R0.z)
R1 = ReferenceFrame("R_1")
R1.orient(R0,'Axis',[theta,R0.z])
R2 = ReferenceFrame("R_2")
R2.orient(R1,'Axis',[-phi,R1.y])
A = Point("A")
A.set_pos(B,-L*R2.z)
calculez dans la cellule suivante la position de A dans le repère R0 en utilisant .pos_from() et .express()
print("Position de A dans R0")
on calcule la vitesse de A par composition des vitesses de même que l'accélération
O.set_vel(R0,0)
B.set_vel(R0,0)
A.set_vel(R2,0)
VA = A.v1pt_theory(B,R0,R2)
print("Vitesse de A / R0")
display(VA)
GA = A.a1pt_theory(B,R0,R2)
print("Accélération de A / R0")
display(GA)
calculez dans la cellule suivante la vitesse et l'accélération de A dans le repère R0 en utilisant .vel(), .acc(), .express() et .simplify()
# vitesse de A dans R0
# accélération de A dans R0
Pour simplifier on suppose que l'angle $phi=\phi_0$ reste constant et que la vitesse de rotation du manège est constante: $\dot{\theta}=\omega$ d'où $\theta=\omega t$ (régime stationnaire du manège).
On définit ses conditions sous la forme d'un dictionnaire python (nom,val) pour substituer ensuite dans les expressions précédentes
omega, phi0 = sp.symbols('omega phi_0')
cdts = [(phi,phi0),(theta,omega*t)]
VVA = VA.subs(cdts).simplify()
print("vitesse tangentielle")
display(VVA)
GGA = GA.express(R1).subs(cdts).simplify()
print("acceleration centripéde;")
display(GGA)
En appliquant le principe fondamentale de la dynamique au point A, soumis à la force de gravité $\vec{P}$ et à la tension $\vec{T_c}$ du bras. $$ M \vec{\gamma} = \vec{P} + \vec{T_c} $$ ou $$ \vec{P} + \vec{T_c} - M \vec{\gamma} $$
On peut en déduire la valeur de la tension T et l'angle $\phi_0$ du bras.
T = sp.symbols('T')
Tc = T*R2.z
P = - M*g*R1.z
Bilan = Tc + P - M*GGA
Bilan = Bilan.express(R1).subs(cdts)
print("Bilan :")
display(Bilan)
# solution
TT = sp.solve(Bilan.dot(R1.x),T)[0]
display(sp.Eq(T,TT))
Phi0 = sp.solve(Bilan.dot(R1.z).subs(T,TT),phi0)[1]
display(sp.Eq(phi0,Phi0))
Dans le référentiel fixe, la nacelle est donc soumise à une accélération centripéde, due à la somme des forces de tension et gravité.
Mais pour le passager immobile dans la nacelle, il est en équilibre sous l'effet:
La force centripète et la force centrifuge sont exactement la même force, mais dans des directions opposées, car elles sont éprouvées à partir de cadres de référence différents. Un observateur dans un repère en rotation ressents une force centrifuge, qui corresponds à l'opposé de l'accélération centripède dans le référentiel fixe.
Ecrire vos conclusions dans la cellule suivante, en particulier sur l'équilibre de l'observateur lorsqu'il se penche vers l'axe de rotation ou vers vers l'extérieur.
Ecrire ici votre analyse et conclusion