mirror of
https://forge.apps.education.fr/blender-edutech/jumeaux-numeriques.git
synced 2024-01-27 06:56:18 +01:00
Modification de la vitesse du moteur numérique pour le portail coulissant
This commit is contained in:
parent
13240fd440
commit
1028e85f38
@ -45,7 +45,7 @@ card_data_title="Accès aux données"
|
||||
card_data_text=""" get(variable) \n -> Retourne la valeur de la variable à \n l'instant t. Par exemple : val = get('ba_0').\n
|
||||
Entrées/sorties : 'ba_0', 'ba_1', 'pc_0', 'pc_1', \n 'mot_m', 'mot_d', 'voy_0' et 'voy_1'.\n
|
||||
Variables réels (si il y a jumelage) : 'ba_0_r', \n 'ba_1_r', 'pc_0_r', 'pc_1_r'.\n
|
||||
Autres variables : 'mot_angle', 'mot_vitesse', \n 'cabine_z'."""
|
||||
Autres variables : 't' (temps), 'mot_angle', 'mot_vitesse', \n 'cabine_z'."""
|
||||
card_data_url=[]
|
||||
system_card_description.update({"data-card" : [card_data_title, card_data_text, card_data_url]})
|
||||
|
||||
|
@ -27,6 +27,7 @@ scene = bge.logic.getCurrentScene()
|
||||
# Ce distinguo ne concerne que les entrées, les sorties réelles sont forcées par les sorties numériques et vice-versa.
|
||||
|
||||
public_vars = {
|
||||
't' : [['System','time'], [], []],
|
||||
'bp_ext' : [['Bp cote rue','activated'], ['pin', 'd','i'], ['o','-', 'green', 1]],
|
||||
'bp_ext_r' : [['Bp cote rue','activated_real'], [], ['o','--', 'green', 1]],
|
||||
'bp_int' : [['Bp cote cour','activated'], ['pin', 'd','i'], ['o','-', 'darkgreen', 1]],
|
||||
@ -38,8 +39,11 @@ public_vars = {
|
||||
'mot_o' : [['Moteur','open'], ['pin_open', 'd','o'], ['o','-', 'violet', 1]],
|
||||
'mot_f' : [['Moteur','close'], ['pin_close', 'd','o'], ['o','-', 'darkviolet', 1]],
|
||||
'mot_angle' : [['Moteur','alpha'], [], ['o','-', 'blue', 1]],
|
||||
'mot_vitesse' : [['Moteur','omega'], [], ['o','-', 'darkblue', 1]],
|
||||
'mot_vitesse' : [['Moteur','speed'], [], ['o','-', 'darkblue', 1]],
|
||||
'mot_pas' : [['Moteur','step'], [], []],
|
||||
'portail_x' : [['Portail','x'], [], ['o','-', 'turquoise', 1]],
|
||||
'portail_vitesse' : [['Portail','speed'], [], ['o','-', 'darkturquoise', 1]],
|
||||
'portail_pas' : [['Portail','step'], [], []],
|
||||
'gyr' : [['Led','activated'], ['pin', 'd','o'], ['o','-', 'gold', 1]],
|
||||
'ir_emet' : [['Emetteur IR', 'activated'], ['pin', 'd','o'],['o','-', 'red', 1]],
|
||||
'ir_recep' : [['Recepteur IR','activated'], ['pin', 'd','i'],['o','-', 'darkred', 1]],
|
||||
@ -119,33 +123,30 @@ def get_public_vars():
|
||||
def mot (cont):
|
||||
if scene.objects['System']['run']:
|
||||
obj = cont.owner
|
||||
vitesse = 0.05 # valeur empirique
|
||||
pas_portail = 2.35619/0.3 # pas echelle 1:1 = 2.35619 -> pas à l'échelle de la maquette (0,3) : 2.35619/0.3 = 7,85396 valeur empirique
|
||||
pas_engrenage = math.pi/7 # z = 14 valeur empirique
|
||||
obj_engrenage = scene.objects['Engrenage']
|
||||
obj_portail = scene.objects['Portail']
|
||||
|
||||
# # obj_portail['x']= scene.objects['Portail'].localPosition.x # Affichage de la position du portail
|
||||
# speed= obj['speed'] # 0,5 en tour / seconde -> course de 500 mm en 4s
|
||||
# speed= 0.1
|
||||
# scene.objects['System']['scale']=0.33
|
||||
# # speed= obj['speed'] # 0,2 en tour / seconde -> course de 500 mm en 20s
|
||||
# gear_radius = ((obj_engrenage['diameter'])/2) *(1/scene.objects['System']['scale']) # diametre : 40 mm et scale : 0,0033
|
||||
|
||||
# if obj['close']:
|
||||
# print ("speed :", speed)
|
||||
# print ("gear_radius :", gear_radius)
|
||||
# print ("Vitesse engrenage : ", speed * 2 * math.pi*(1/60), pas_engrenage*vitesse)
|
||||
# print ("Vitesse portail : ", speed * 2 * math.pi * gear_radius*(1/60), pas_portail*vitesse)
|
||||
# print ("Ratio Vitesse portail/ Vitesse engrenage : ",( speed * 2 * math.pi * gear_radius*(1/60))/(speed * 2 * math.pi *(1/60)), pas_portail/pas_engrenage)
|
||||
# Crémaillaire
|
||||
fps = 60 # frame per second
|
||||
pas_dent = 7.85 # 7.85 mm soit 2.35 m (bender)
|
||||
z = 14 # nb dents
|
||||
obj['step']= scene.objects['Moteur']['speed_setting'] / fps # Vitesse du moteur numérique : 1,3 rad /s par défaut
|
||||
obj_portail['step'] = (pas_dent * z)/(2*math.pi) * obj['step']
|
||||
|
||||
# Ouvrir
|
||||
if obj['open']:
|
||||
# obj_engrenage.applyRotation((0, 0, -speed * 2 * math.pi), True)
|
||||
# obj_portail.applyMovement((-speed * math.pi * gear_diameter, 0, 0), True)
|
||||
obj_engrenage.applyRotation((0, 0, -pas_engrenage*vitesse), True)
|
||||
obj_portail.applyMovement((-pas_portail*vitesse, 0, 0), True)
|
||||
|
||||
# Physique
|
||||
obj_engrenage.applyRotation((0, 0, -obj['step']), True)
|
||||
obj['alpha']= obj['alpha']-obj['step']
|
||||
if scene.objects['System']['time'] != obj['last_time']:
|
||||
obj['speed']= (-obj['step'])/(scene.objects['System']['time']-obj['last_time'])
|
||||
obj_portail.applyMovement((-obj_portail['step'], 0, 0), True)
|
||||
obj_portail['x']= obj_portail['x']-obj_portail['step'] # Echelle pris en compte par le scale de 'System' : 0,3)
|
||||
if scene.objects['System']['time'] != obj['last_time']:
|
||||
obj_portail['speed']= -obj_portail['step']/(scene.objects['System']['time']-obj['last_time'])
|
||||
obj['last_time'] = scene.objects['System']['time']
|
||||
|
||||
# Modele 3D -> Arduino
|
||||
if scene.objects['System']['twins']:
|
||||
if scene.objects['Moteur']['pin_o'] is not None:
|
||||
@ -156,10 +157,17 @@ def mot (cont):
|
||||
# Fermer
|
||||
# else: # Pas de priorité
|
||||
if obj['close']:
|
||||
# obj_engrenage.applyRotation((0, 0, speed * 2 * math.pi*(1/60)), True)
|
||||
# obj_portail.applyMovement((speed * 2 * math.pi * gear_radius*(1/60), 0, 0), True)
|
||||
obj_engrenage.applyRotation((0, 0, pas_engrenage*vitesse), True)
|
||||
obj_portail.applyMovement((pas_portail*vitesse, 0, 0), True)
|
||||
|
||||
# Physique
|
||||
obj_engrenage.applyRotation((0, 0, obj['step']), True)
|
||||
obj['alpha']= obj['alpha']+obj['step']
|
||||
if scene.objects['System']['time'] != obj['last_time']:
|
||||
obj['speed']= (obj['step'])/(scene.objects['System']['time']-obj['last_time'])
|
||||
obj_portail.applyMovement((obj_portail['step'], 0, 0), True)
|
||||
obj_portail['x']= obj_portail['x']+obj_portail['step'] # Echelle pris en compte par le scale de 'System' : 0,3)
|
||||
if scene.objects['System']['time'] != obj['last_time']:
|
||||
obj_portail['speed']= obj_portail['step']/(scene.objects['System']['time']-obj['last_time'])
|
||||
obj['last_time'] = scene.objects['System']['time']
|
||||
|
||||
# Modele 3D -> Arduino
|
||||
if scene.objects['System']['twins']:
|
||||
@ -171,6 +179,11 @@ def mot (cont):
|
||||
# Arrêrer
|
||||
if obj['open']== False and obj['close'] == False :
|
||||
|
||||
# Physique
|
||||
obj['speed']= 0
|
||||
obj_portail['speed']= 0
|
||||
obj['last_time'] = scene.objects['System']['time']
|
||||
|
||||
# Modele 3D -> Arduino
|
||||
if scene.objects['System']['twins']:
|
||||
if scene.objects['Moteur']['pin_f'] is not None:
|
||||
@ -178,7 +191,6 @@ def mot (cont):
|
||||
scene.objects['Moteur']['pin_o'].write(0)
|
||||
scene.objects['Moteur']['pin_f'].write(0)
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Capteurs fin de course
|
||||
###############################################################################
|
||||
@ -382,6 +394,13 @@ def system_reset ():
|
||||
scene.objects['Led']['activated']=False
|
||||
scene.objects['Moteur']['open']=False
|
||||
scene.objects['Moteur']['close']=False
|
||||
scene.objects['Moteur']['alpha']=0
|
||||
scene.objects['Moteur']['speed']=0
|
||||
scene.objects['Moteur']['speed_setting']=1.3 # Vitesse du moteur numérique : 1,3 rad /s
|
||||
scene.objects['Moteur']['step']=0
|
||||
scene.objects['Portail']['x']=0
|
||||
scene.objects['Portail']['speed']=0
|
||||
scene.objects['Portail']['step']=0
|
||||
scene.objects['Microrupteur fdc ouvert']['activated']=False
|
||||
scene.objects['Microrupteur fdc ouvert']['activated_real']=False
|
||||
scene.objects['Microrupteur fdc ferme']['activated']=False
|
||||
|
@ -41,17 +41,7 @@ brochage={}
|
||||
|
||||
def commandes():
|
||||
|
||||
# # Mise en place : Fermeture
|
||||
# print ("Version sans sécurité : sans réouverture")
|
||||
# print ("Mise en place : Fermeture")
|
||||
# while fdc_f() ==False :
|
||||
# gyr(True)
|
||||
# mot_o(False)
|
||||
# mot_f(True)
|
||||
# mot_f(False)
|
||||
# gyr(False)
|
||||
|
||||
# Init
|
||||
# Init -> Ouverture
|
||||
while fdc_o() ==False :
|
||||
gyr(True)
|
||||
mot_f(False)
|
||||
@ -60,46 +50,46 @@ def commandes():
|
||||
gyr(False)
|
||||
|
||||
# Fermeture
|
||||
tf_d= get_t()
|
||||
xf_d= get('portail_x')
|
||||
mot_digitset (10) # 1,3 rad/s par défaut
|
||||
|
||||
tf_d,xf_d, af_d= get('t'), get('portail_x'), get('mot_angle')
|
||||
print ("Début fermeture : portail_x : "+str(round(get('portail_x'),3)) + " - mot_angle : " + str(round(get('mot_angle'),3)))
|
||||
while fdc_f() ==False :
|
||||
gyr(True)
|
||||
mot_o(False)
|
||||
mot_f(True)
|
||||
print (get('portail_x'), get('mot_angle'), get('mot_vitesse'))
|
||||
mot_pas, mot_vitesse, portail_pas, portail_vitesse= get('mot_pas'), get('mot_vitesse'), get('portail_pas'), get('portail_vitesse')
|
||||
mot_f(False)
|
||||
gyr(False)
|
||||
tf_f = get_t()
|
||||
xf_f= get('portail_x')
|
||||
print ("Fermeture : "+str(round(tf_f-tf_d,3)) +" s - distance : " +str(round(xf_f-xf_d,3))+" m")
|
||||
|
||||
mot_digitset () # 1,3 rad/s par défaut
|
||||
print ("Fin fermeture : portail_x : "+str(round(get('portail_x'),3)) + " - mot_angle : " + str(round(get('mot_angle'),3)))
|
||||
tf_f,xf_f, af_f= get('t'), get('portail_x'), get('mot_angle')
|
||||
print ("")
|
||||
print ("Fermeture : "+str(round(tf_f-tf_d,3)) +" s - distance : " +str(round(xf_f-xf_d,3))+" mm - angle : " +str(round(af_f-af_d,3))+
|
||||
" rad - portail_vitesse : " +str(round(portail_vitesse,3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse,3))+
|
||||
" rad/s - portail_pas : " +str(round(portail_pas,3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas,3))+" rad/impulsion")
|
||||
|
||||
# Ouverture
|
||||
to_d= get_t()
|
||||
xo_d= get('portail_x')
|
||||
print ("")
|
||||
to_d,xo_d, ao_d= get('t'), get('portail_x'), get('mot_angle')
|
||||
print ("Début ouverture : portail_x : "+str(round(get('portail_x'),3)) + " - mot_angle : " + str(round(get('mot_angle'),3)))
|
||||
while fdc_o() ==False :
|
||||
gyr(True)
|
||||
mot_f(False)
|
||||
mot_o(True)
|
||||
print (get('portail_x'), get('mot_angle'), get('mot_vitesse'))
|
||||
mot_pas, mot_vitesse, portail_pas, portail_vitesse= get('mot_pas'), get('mot_vitesse'), get('portail_pas'), get('portail_vitesse')
|
||||
mot_o(False)
|
||||
gyr(False)
|
||||
to_f = get_t()
|
||||
xo_f= get('portail_x')
|
||||
print ("Ouverture : "+str(round(to_f-to_d,3)) +" s - distance : " +str(round(xf_f-xf_d,3))+" m")
|
||||
|
||||
# plot(['gyr'])
|
||||
# plot(['bp_ext'])
|
||||
# plot(['gyr', 'bp_ext', 'bp_int'])
|
||||
# while True:
|
||||
# print (get_t())
|
||||
# gyr(True)
|
||||
# tempo(0.25)
|
||||
# gyr(False)
|
||||
# tempo(0.25)
|
||||
print ("Fin ouverture : portail_x : "+str(round(get('portail_x'),3)) + " - mot_angle : " + str(round(get('mot_angle'),3)))
|
||||
to_f,xo_f, ao_f= get('t'), get('portail_x'), get('mot_angle')
|
||||
print ("")
|
||||
print ("Ouverture : "+str(round(to_f-to_d,3)) +" s - distance : " +str(round(xo_f-xo_d,3))+" mm - angle : " +str(round(ao_f-ao_d,3))+
|
||||
" rad - portail_vitesse : " +str(round(portail_vitesse,3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse,3))+
|
||||
" rad/s - portail_pas : " +str(round(portail_pas,3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas,3))+" rad/impulsion")
|
||||
|
||||
fin() # A garder
|
||||
|
||||
|
||||
###############################################################################
|
||||
# En: External call << DONT CHANGE THIS SECTION >>
|
||||
# Fr: Appel externe << NE PAS MODIFIER CETTE SECTION >>
|
||||
|
@ -47,7 +47,7 @@ card_data_title="Accès aux données"
|
||||
card_data_text=""" get(variable) \n -> Retourne la valeur de la variable à \n l'instant t. Par exemple : val = get('bp_ext').\n
|
||||
Entrées/sorties : 'bp_ext', 'bp_int', 'fdc_o', \n 'fdc_f', 'mot_o', 'mot_f', 'gyr', 'ir_emet', \n 'ir_recep'.\n
|
||||
Variables réels (si il y a jumelage) : 'bp_ext_r', \n 'bp_int_r', 'fdc_o_r', 'fdc_f_r', 'ir_recep_r'.\n
|
||||
Autres variables : 'mot_angle', \n 'mot_vitesse', 'portail_x'."""
|
||||
Autres variables : 't' (temps), 'mot_angle', \n 'mot_vitesse', 'portail_x', 'portail_vitesse'."""
|
||||
card_data_url=[]
|
||||
system_card_description.update({"data-card" : [card_data_title, card_data_text, card_data_url]})
|
||||
|
||||
@ -64,10 +64,14 @@ system_card_description.update({"plot-card" : [card_plot_title, card_plot_text,
|
||||
|
||||
# Ouvrir et fermer
|
||||
card_movement_title="Ouvrir et fermer"
|
||||
card_movement_text=""" mot_o(True | False) \n -> Ouvrir le portail (moteur sens trigo).\n
|
||||
card_movement_text=""" mot_o(True | False) \n -> Ouvrir le portail (moteur sens trigo).
|
||||
mot_f(True | False) \n -> Fermer le portail (moteur sens horaire).\n
|
||||
fdc_o() \n -> Capteur fin de course portail ouvert.\n Retourne True si le portail est ouvert. \n
|
||||
fdc_f() \n -> Capteur fin de course portail fermé.\n Retourne True si le portail est fermé."""
|
||||
fdc_o() \n -> Capteur fin de course portail ouvert.
|
||||
fdc_f() \n -> Capteur fin de course portail fermé.\n
|
||||
mot_digitset(vitesse) -> Change la vitesse \n du moteur numérique en rad/s. Si 'vitesse' \n est ommis, elle sera réinitialisée."""
|
||||
# fdc_o() \n -> Capteur fin de course portail ouvert.\n Retourne True si le portail est ouvert. \n
|
||||
# fdc_f() \n -> Capteur fin de course portail fermé.\n Retourne True si le portail est fermé.\n
|
||||
|
||||
card_movement_url=[]
|
||||
system_card_description.update({"movement-card" : [card_movement_title, card_movement_text, card_movement_url]})
|
||||
|
||||
|
@ -46,6 +46,13 @@ def mot_o (order):
|
||||
def mot_f (order):
|
||||
scene.objects['Moteur']['close']=order
|
||||
|
||||
# Réglage de la vitesse du moteur numérique
|
||||
def mot_digitset (speed=None):
|
||||
if speed==None:
|
||||
scene.objects['Moteur']['speed_setting']=1.3 # 1,3 rad/s par défaut
|
||||
else:
|
||||
scene.objects['Moteur']['speed_setting']=speed
|
||||
|
||||
# Ordre pour le capteur barrage IR
|
||||
def ir_emet(order):
|
||||
scene.objects['Emetteur IR']['active']=order
|
||||
|
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
<data>
|
||||
<screen>
|
||||
<width>1325</width>
|
||||
<height>745</height>
|
||||
<width>1609</width>
|
||||
<height>905</height>
|
||||
<quality>1</quality>
|
||||
</screen>
|
||||
</data>
|
@ -28,9 +28,10 @@ plot_config = system.get_public_vars()
|
||||
|
||||
def get(data):
|
||||
if data in plot_config:
|
||||
return scene.objects[plot_config[data][0][0]][plot_config[data][0][1]]
|
||||
return(scene.objects[plot_config[data][0][0]][plot_config[data][0][1]])
|
||||
else:
|
||||
print ("Erreur sur l'accès aux variables par get("+data+"), la variable '"+data+"' absente du système.")
|
||||
return None
|
||||
|
||||
###############################################################################
|
||||
# Création du graphique
|
||||
|
@ -45,7 +45,7 @@ card_data_title="Accès aux données"
|
||||
card_data_text=""" get(variable) \n -> Retourne la valeur de la variable à \n l'instant t. Par exemple : val = get('bp_m').\n
|
||||
Entrées/sorties : 'bp_m', 'bp_a', 'bp_d', \n 'mot_m', 'mot_d', 'fdc_h', 'fdc_b', 'bp_auto', \n 'voy_auto', 'lum'.\n
|
||||
Variables réels (si il y a jumelage) : 'bp_m_r', \n 'bp_a_r', 'bp_d_r', 'fdc_h_r', 'fdc_b_r', \n 'bp_auto_r', 'lum_r'.\n
|
||||
Autres variables : 'mot_angle', 'mot_vitesse'."""
|
||||
Autres variables : 't' (temps), 'mot_angle', 'mot_vitesse'."""
|
||||
card_data_url=[]
|
||||
system_card_description.update({"data-card" : [card_data_title, card_data_text, card_data_url]})
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user