# FIXE GLISSE - SYSTEME MASSE RESSORT, ENTRAINÉ PAR UN TAPIS ROULANT # SIMULE UNE CRAIE AVEC LE TABLEAU QUI SE 'DÉROULE' DESSOUS # -/\/\/\/\[m] # –––––––––––––––––> tapis roulant... import numpy as np import matplotlib.pyplot as plt t=0 x=0 # allongement intial v0=0.1 # vitesse avec laquelle le tapis roulant avance # c'est aussi celle avec laquelle le tableau # se 'déroule" sous la craie... v=0 # vitesse de glissement initiale (non glissement) k=64000 # raideur très importante simulant une craie assez rigide us=0.5 # coef de fr. statique ud=0.4 # dynamique m=0.001 # masse assez faible de la partie de la craie qui va osciller F=20 # force en newton avec laquelle on appuie sur le tableau g=9.81 duree=5e-3 n=1000 dt=duree/n # routine qui calcul l'accélération de la masse m def acceleration(): if v==0: # si non glissement if abs(k*x)0: # sinon, si ressort étiré vers la droite return -k*x/m+ud*F/m # frottement vers la gauche return -k*x/m-ud*F/m # sinon vers la droite, on sort du non glissement. if v<0: # si glissement vers la gauche return -k*x/m+ud*F/m # frottement vers la droite return -k*x/m-ud*F/m # sinon vers la gauche # on initialise les listes position=[x] vitesse=[v] temps=[t] # méthode d'Euler classique... for i in range(n): x=x+(v+v0)*dt v1=v+acceleration()*dt if v1*v<0: # si la vitesse change de signe, on l'annule v1=0 # on passe en non glissement v=v1 t=t+dt position.append(x) # on "enregistre" vitesse.append(v) temps.append(t) # calcul après coup de la fréquence du phénomène # on aurait pu le faire avant, mais cela aloudit la lecture de la routine # qui calcule l'accélération ! # on recherche les instants où la position passe par un maximum # on les "enregistre" et on calcule la fréquence sur les N périodes periode=[] for i in range(n-2): if position[i+1]>position[i] and position[i+1]>position[i+2]: periode.append(temps[i+1]) if len(periode)>1: # si on a au moins une période, on calcule f f=round((len(periode)-1)/(periode[len(periode)-1]-periode[0])) print("fréquence : ",f,"Hz") else: f=0.0 plt.figure(figsize=(10,4)) plt.grid() # affichage de la position, avec en rouge les phases de non glissement # en bleu le glissement. # on balaie les n valeurs de vitesse et on trace un point de la # bonne couleur sur le graphe en fonction du glissement ou non for i in range(n): if vitesse[i]==0: color='black' else: color='orange' plt.scatter(temps[i]*1000,position[i]*1000,c=color) titre="Fixe-glisse - fréquence :"+str(f)+" Hz" plt.title(titre) plt.xlabel("temps en ms") plt.ylabel("position en mm") plt.show()