mirror of
https://forge.apps.education.fr/blender-edutech/ropy.git
synced 2024-01-27 08:23:20 +01:00
Jumeau numérique Maqueen configurable depuis Ropy
This commit is contained in:
parent
bac3e837e0
commit
2eca28aa35
BIN
ropy-29.blend
BIN
ropy-29.blend
Binary file not shown.
11
rp_cmd.py
11
rp_cmd.py
@ -30,14 +30,15 @@ def commandes():
|
||||
|
||||
# Ecrire votre code ici ...
|
||||
rp_jumeau('/dev/ttyACM0', 115200)
|
||||
# rp_jumeau_config("50", "50", "90") # (vitesse, temps_avancer, temps_rotation)
|
||||
rp_jumeau_config(50, 20, 90) # (vitesse, temps_avancer, temps_rotation)
|
||||
rp_tempo(1)
|
||||
|
||||
rp_gauche()
|
||||
rp_marquer()
|
||||
# rp_marquer()
|
||||
rp_avancer()
|
||||
rp_marquer()
|
||||
rp_avancer()
|
||||
rp_marquer()
|
||||
# rp_marquer()
|
||||
# rp_avancer()
|
||||
# rp_marquer()
|
||||
|
||||
rp_fin() # A garder
|
||||
|
||||
|
29
rp_lib.py
29
rp_lib.py
@ -1106,6 +1106,7 @@ def rp_jumeau(port, speed):
|
||||
|
||||
twins_serial = getSerialOrNone(port,speed)
|
||||
if twins_serial is not None:
|
||||
# twins_serial.set_buffer_size(rx_size = 12800, tx_size = 12800)
|
||||
scene.objects['Commands']['twins'] = True
|
||||
scene.objects['Commands']['twins_port'] = port
|
||||
scene.objects['Commands']['twins_speed'] = speed
|
||||
@ -1125,7 +1126,8 @@ def rp_jumeau(port, speed):
|
||||
|
||||
def getSerialOrNone(port,speed):
|
||||
try:
|
||||
return serial.Serial(port,speed)
|
||||
# return serial.Serial(port,speed, bytesize=100)
|
||||
return serial.Serial(port,speed)
|
||||
except:
|
||||
return None
|
||||
|
||||
@ -1135,12 +1137,29 @@ def rp_jumeau_close():
|
||||
scene.objects['Commands']['twins'] = False
|
||||
scene.objects['Points-Twins-text']['Text'] = "Connection\nfermée"
|
||||
|
||||
# Configuration de la vitesse et des temps (deux caractères (0-99))
|
||||
def rp_jumeau_config(speed, temps_avancer, temps_rotation):
|
||||
# Configuration de la vitesse et des temps
|
||||
def rp_jumeau_config(speed, temps_avancer, temps_tourner):
|
||||
global twins_serial
|
||||
if scene.objects['Commands']['twins']:
|
||||
serial_msg = "CF"+str(speed)+str(temps_avancer)+str(temps_tourner)+"\n"
|
||||
twins_serial.write(serial_msg.encode())
|
||||
serial_msg1 = "CF\n"
|
||||
# print (serial_msg1)
|
||||
twins_serial.write(serial_msg1.encode())
|
||||
rp_tempo (1)
|
||||
serial_msg2 = str(speed)+"\n"
|
||||
# print (serial_msg2)
|
||||
twins_serial.write(serial_msg2.encode())
|
||||
rp_tempo (1)
|
||||
serial_msg2 = str(temps_avancer)+"\n"
|
||||
# print (serial_msg2)
|
||||
twins_serial.write(serial_msg2.encode())
|
||||
rp_tempo (1)
|
||||
serial_msg2 = str(temps_tourner)+"\n"
|
||||
# print (serial_msg2)
|
||||
twins_serial.write(serial_msg2.encode())
|
||||
rp_tempo (1)
|
||||
serial_msg1 = "FC\n"
|
||||
# print (serial_msg1)
|
||||
twins_serial.write(serial_msg1.encode())
|
||||
|
||||
def rp_serie_msg(text):
|
||||
global twins_serial
|
||||
|
@ -19,7 +19,7 @@ import radio
|
||||
attente_image = Image("00000:00000:00300:00000:00000")
|
||||
display.show(attente_image) # Témoin de fonctionnement
|
||||
balise_image = Image("00300:03630:36963:03630:00300")
|
||||
radio.config(group=1, queue=1, length=8)
|
||||
radio.config(group=1, queue=4, length=8)
|
||||
radio.on()
|
||||
|
||||
uart.init(baudrate= 115200) # Initialisation du port série
|
||||
@ -87,11 +87,21 @@ while True:
|
||||
|
||||
# Configuration : CF
|
||||
if msg[0] ==67 and msg[1] ==70 : # Code ASCII : 67 (C) puis 70 (F)
|
||||
# display.scroll ("Configuration :", msg[2],msg[3], msg[4],msg[5], msg[6],msg[7])
|
||||
display.scroll ("Configuration :", msg[2:-1])
|
||||
radio.send(msg[:-1])
|
||||
sleep(10)
|
||||
# FIXME
|
||||
display.scroll ("CF")
|
||||
radio.send("CF")
|
||||
|
||||
# Boucle d'écoute spécifique à la configuration
|
||||
while True:
|
||||
while not uart.any(): # Attente d'un message
|
||||
pass
|
||||
display.show(' ')
|
||||
msg = uart.readline()
|
||||
if msg[0] ==70 and msg[1] ==67 : # Code ASCII : 70 (F) puis 67 (C) -> sortie de la configuration
|
||||
break
|
||||
# display.scroll (msg[:-1])
|
||||
radio.send(str(msg[:-1]))
|
||||
# display.scroll ("FC")
|
||||
radio.send("FC")
|
||||
|
||||
# Fin : FI
|
||||
if msg[0] ==70 and msg[1] ==73 : # Code ASCII : 70 (F) puis 73 (I)
|
||||
|
@ -2,6 +2,8 @@ from microbit import *
|
||||
from machine import *
|
||||
import music
|
||||
import radio
|
||||
import math
|
||||
import time
|
||||
|
||||
###############################################################################
|
||||
# rp_maqueen-robot.py
|
||||
@ -19,97 +21,183 @@ import radio
|
||||
|
||||
attente_image = Image("00000:00000:00900:00000:00000")
|
||||
display.show(attente_image) # Témoin de fonctionnement
|
||||
radio.config(group=1, queue=1, length=8)
|
||||
radio.config(group=1, queue=4, length=8)
|
||||
radio.on()
|
||||
|
||||
# ###############################################################################
|
||||
# Boucle principale
|
||||
# ###############################################################################
|
||||
|
||||
vitesse = 50
|
||||
distance = 50
|
||||
angle = 90
|
||||
|
||||
v_avancer = 50
|
||||
v_tourner = 50
|
||||
v_tourner_faible = 25
|
||||
vmax_roue = 85.5 # Vitesse maxi des roues en tr/min
|
||||
diam_roue = 43 # Diamètre des roues en mm
|
||||
dist_essieu = 70 # Distance entre les roues en mm
|
||||
|
||||
# ###############################################################################
|
||||
# Boucle principale
|
||||
# ###############################################################################
|
||||
|
||||
while True:
|
||||
|
||||
# Lecture de l'ordre
|
||||
ordre=radio.receive()
|
||||
|
||||
# Avancer
|
||||
# Configuration
|
||||
if ordre=="CF":
|
||||
display.scroll("CF")
|
||||
i=1
|
||||
while True:
|
||||
conf=radio.receive()
|
||||
if conf=="FC": # Fin de la configuration
|
||||
# display.show(attente_image) # Témoin de fonctionnement
|
||||
break
|
||||
if conf is not None:
|
||||
if i != 1:
|
||||
text = str(i) + " : "+str(conf[2:-1])
|
||||
# display.scroll(text)
|
||||
if i == 2: # Configuration de la vitesse
|
||||
vitesse = int(str(conf[2:-1]))
|
||||
if i == 3: # Configuration de la distance
|
||||
distance = int(str(conf[2:-1]))
|
||||
if i == 4: # Configuration de l'angle
|
||||
angle = int(str(conf[2:-1]))
|
||||
i+=1
|
||||
|
||||
# Avancer d'un pas
|
||||
if ordre=="AV":
|
||||
display.show(Image.ARROW_N)
|
||||
|
||||
display.show(Image.ARROW_N) # Afficher flèche avancer
|
||||
pin8.write_digital(1) # Led avant gauche
|
||||
pin12.write_digital(1) # Led avant gauche
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, v_avancer])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, v_avancer])) # Moteur droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, vitesse])) # Avance moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, vitesse])) # Avance moteur droit
|
||||
|
||||
v_roue=(vmax_roue/255)*vitesse
|
||||
v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire
|
||||
time.sleep(distance/v_lin)
|
||||
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit
|
||||
pin8.write_digital(0) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant gauche
|
||||
display.clear() # Effacer matrice de leds
|
||||
|
||||
# display.show(Image.ARROW_N)
|
||||
# pin8.write_digital(1) # Led avant gauche
|
||||
# pin12.write_digital(1) # Led avant gauche
|
||||
# i2c.write(0x10, bytearray([0x00, 0x0, v_avancer])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x0, v_avancer])) # Moteur droit
|
||||
|
||||
# Reculer
|
||||
if ordre=="RE":
|
||||
display.show(Image.ARROW_S)
|
||||
|
||||
display.show(Image.ARROW_S) # Afficher flèche reculer
|
||||
pin8.write_digital(1) # Led avant gauche
|
||||
pin12.write_digital(1) # Led avant gauche
|
||||
i2c.write(0x10, bytearray([0x00, 0x1, v_avancer])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x1, v_avancer])) # Moteur droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x1, vitesse])) # Avance moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x1, vitesse])) # Avance moteur droit
|
||||
|
||||
v_roue=(vmax_roue/255)*vitesse
|
||||
v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire
|
||||
time.sleep(distance/v_lin)
|
||||
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit
|
||||
pin8.write_digital(0) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant gauche
|
||||
display.clear() # Effacer matrice de leds
|
||||
|
||||
# display.show(Image.ARROW_S)
|
||||
# pin8.write_digital(1) # Led avant gauche
|
||||
# pin12.write_digital(1) # Led avant gauche
|
||||
# i2c.write(0x10, bytearray([0x00, 0x1, v_avancer])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x1, v_avancer])) # Moteur droit
|
||||
|
||||
# Gauche
|
||||
if ordre=="GA":
|
||||
display.show(Image.ARROW_W)
|
||||
display.show(Image.ARROW_E)
|
||||
pin8.write_digital(1) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x1, vitesse])) # Avance moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, vitesse])) # Avance moteur droit
|
||||
|
||||
v_roue=(vmax_roue/255)*vitesse
|
||||
v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire
|
||||
angle2=(angle/4)*(2*math.pi/360)
|
||||
time.sleep((dist_essieu*angle2)/v_lin)
|
||||
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit
|
||||
pin8.write_digital(0) # Led avant gauche
|
||||
display.clear() # Effacer matrice de leds
|
||||
|
||||
# display.show(Image.ARROW_W)
|
||||
# pin8.write_digital(1) # Led avant gauche
|
||||
# pin12.write_digital(0) # Led avant droit
|
||||
# i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit
|
||||
|
||||
# Avancer + gauche
|
||||
if ordre=="AG":
|
||||
display.show(Image.ARROW_W)
|
||||
pin8.write_digital(1) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, v_tourner_faible])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit
|
||||
# if ordre=="AG":
|
||||
# display.show(Image.ARROW_W)
|
||||
# pin8.write_digital(1) # Led avant gauche
|
||||
# pin12.write_digital(0) # Led avant droit
|
||||
# i2c.write(0x10, bytearray([0x00, 0x0, v_tourner_faible])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit
|
||||
|
||||
# Reculer + gauche
|
||||
if ordre=="RG":
|
||||
display.show(Image.ARROW_W)
|
||||
pin8.write_digital(1) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x1, v_tourner_faible])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x1, v_tourner])) # Moteur droit
|
||||
# if ordre=="RG":
|
||||
# display.show(Image.ARROW_W)
|
||||
# pin8.write_digital(1) # Led avant gauche
|
||||
# pin12.write_digital(0) # Led avant droit
|
||||
# i2c.write(0x10, bytearray([0x00, 0x1, v_tourner_faible])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x1, v_tourner])) # Moteur droit
|
||||
|
||||
# Droite
|
||||
if ordre=="DR":
|
||||
display.show(Image.ARROW_E)
|
||||
pin8.write_digital(0) # Led avant gauche
|
||||
|
||||
display.show(Image.ARROW_W)
|
||||
pin12.write_digital(1) # Led avant droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Moteur droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, vitesse])) # Avance moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x1, vitesse])) # Avance moteur droit
|
||||
|
||||
v_roue=(vmax_roue/255)*vitesse
|
||||
v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire
|
||||
angle2=(angle/4)*(2*math.pi/360)
|
||||
time.sleep((dist_essieu*angle2)/v_lin)
|
||||
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit
|
||||
pin12.write_digital(0) # Led avant droit
|
||||
display.clear() # Effacer matrice de leds
|
||||
|
||||
# display.show(Image.ARROW_E)
|
||||
# pin8.write_digital(0) # Led avant gauche
|
||||
# pin12.write_digital(1) # Led avant droit
|
||||
# i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Moteur droit
|
||||
|
||||
# Avancer + droite
|
||||
if ordre=="AD":
|
||||
display.show(Image.ARROW_W)
|
||||
pin8.write_digital(1) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x0, v_tourner_faible])) # Moteur droit
|
||||
# if ordre=="AD":
|
||||
# display.show(Image.ARROW_W)
|
||||
# pin8.write_digital(1) # Led avant gauche
|
||||
# pin12.write_digital(0) # Led avant droit
|
||||
# i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x0, v_tourner_faible])) # Moteur droit
|
||||
|
||||
# Reculer + droite
|
||||
if ordre=="RD":
|
||||
display.show(Image.ARROW_W)
|
||||
pin8.write_digital(1) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x1, v_tourner])) # Moteur gauche
|
||||
i2c.write(0x10, bytearray([0x02, 0x1, v_tourner_faible])) # Moteur droit
|
||||
# if ordre=="RD":
|
||||
# display.show(Image.ARROW_W)
|
||||
# pin8.write_digital(1) # Led avant gauche
|
||||
# pin12.write_digital(0) # Led avant droit
|
||||
# i2c.write(0x10, bytearray([0x00, 0x1, v_tourner])) # Moteur gauche
|
||||
# i2c.write(0x10, bytearray([0x02, 0x1, v_tourner_faible])) # Moteur droit
|
||||
|
||||
# Stop
|
||||
if ordre=="ST":
|
||||
display.show(attente_image) # Témoin de fonctionnement
|
||||
pin8.write_digital(0) # Led avant gauche
|
||||
pin12.write_digital(0) # Led avant droit
|
||||
i2c.write(0x10, bytearray([0x00, 0x0, 0]))
|
||||
i2c.write(0x10, bytearray([0x02, 0x1, 0]))
|
||||
# if ordre=="ST":
|
||||
# display.show(attente_image) # Témoin de fonctionnement
|
||||
# pin8.write_digital(0) # Led avant gauche
|
||||
# pin12.write_digital(0) # Led avant droit
|
||||
# i2c.write(0x10, bytearray([0x00, 0x0, 0]))
|
||||
# i2c.write(0x10, bytearray([0x02, 0x1, 0]))
|
||||
|
||||
# Cadencement
|
||||
# sleep(100)
|
||||
|
Loading…
x
Reference in New Issue
Block a user