mirror of
https://forge.apps.education.fr/blender-edutech/jumeaux-numeriques.git
synced 2024-01-27 06:56:18 +01:00
Ajout du grapheur matplotlib + Qt5
This commit is contained in:
parent
420067c9f7
commit
ce0cdc735f
@ -42,6 +42,10 @@ Les bibliothèques suivantes ne sont pas incluses par défaut dans l'environneme
|
||||
- [**Pylint**](https://pylint.pycqa.org) : vérificateur du code Python
|
||||
- [**pySerial**](https://pyserial.readthedocs.io) : communication sur le port série
|
||||
- [**pyFirmata**](https://pyfirmata.readthedocs.io) : protocole Firmata (protocole générique de communication entre un logiciel et un microcontrôleur)
|
||||
- [**Matplotlib**](https://matplotlib.org) : grapheur (visualisation de données)
|
||||
- [**pyQt5**](https://www.riverbankcomputing.com/software/pyqt/) : interface graphique utilisateur (GUI)
|
||||
|
||||
<!-- - [**whell**](https://pyfirmata.readthedocs.io) : format de paquet Python -->
|
||||
|
||||
Il faut donc les installer localement (dans UPBGE), les étapes sont :
|
||||
- **GNU/Linux** : La configuration ici présente est UPBGE installé sur ~ avec Python 3.9 :
|
||||
@ -50,10 +54,14 @@ Il faut donc les installer localement (dans UPBGE), les étapes sont :
|
||||
- Installer Pylint : $ ./pip install pylint -t ~/UPBGE-0.30-linux-x86_64/3.0/python/lib/python3.9/site-packages
|
||||
- Installer pySerial : $ ./pip install pyserial -t ~/UPBGE-0.30-linux-x86_64/3.0/python/lib/python3.9/site-packages
|
||||
- Installer pyFirmata : $ ./pip install pyfirmata -t ~/UPBGE-0.30-linux-x86_64/3.0/python/lib/python3.9/site-packages
|
||||
- Installer Matplotlib : $ ./pip install matplotlib -t ~/UPBGE-0.30-linux-x86_64/3.0/python/lib/python3.9/site-packages
|
||||
- Installer PyQt5 : $ ./pip install PyQt5 -t ~/UPBGE-0.30-linux-x86_64/3.0/python/lib/python3.9/site-packages
|
||||
|
||||
- **Windows** : La configuration ici présente est UPBGE installé sur le bureau utilisateur (prenom.nom) avec la distribution Anaconda installée :
|
||||
- Avec Anaconda Navigator ouvrir un terminal Powershell
|
||||
- Installer Pylint : pip install pylint -t C:\Users\prenom.nom\Desktop\UPBGE-0.30-windows-x86_64\3.0\python\lib\site-packages
|
||||
- Installer pySerial : pip install pyserial -t C:\Users\prenom.nom\Desktop\UPBGE-0.30-windows-x86_64\3.0\python\lib\site-packages
|
||||
- Installer pyFirmata : pip install pyfirmata -t C:\Users\prenom.nom\Desktop\UPBGE-0.30-windows-x86_64\3.0\python\lib\site-packages
|
||||
- Installer Matplotlib : pip install matplotlib -t C:\Users\prenom.nom\Desktop\UPBGE-0.30-windows-x86_64\3.0\python\lib\site-packages
|
||||
- Installer PyQt5 : pip install PyQt5 -t C:\Users\prenom.nom\Desktop\UPBGE-0.30-windows-x86_64\3.0\python\lib\site-packages
|
||||
|
||||
|
@ -9,7 +9,7 @@ import time
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2022 Philippe Roy
|
||||
# @copyright: Copyright (C) 2022-2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2022 Philippe Roy
|
||||
# @copyright: Copyright (C) 2022-2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
|
1
monte_charge/twin_plot.py
Symbolic link
1
monte_charge/twin_plot.py
Symbolic link
@ -0,0 +1 @@
|
||||
/home/phroy/Bureau/seriousgames/blender-edutech/git/digital_twin/twin_plot.py
|
@ -9,7 +9,7 @@ import time
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2020-2022 Philippe Roy
|
||||
# @copyright: Copyright (C) 2020-2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
@ -102,16 +102,31 @@ def mot (cont):
|
||||
if scene.objects['System']['run']:
|
||||
obj = cont.owner
|
||||
vitesse = 0.05
|
||||
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
|
||||
pas_engrenage = math.pi/7 # z = 14
|
||||
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 FIXME à enlever
|
||||
pas_engrenage = math.pi/7 # z = 14 FIXME à enlever
|
||||
|
||||
obj_engrenage = scene.objects['Engrenage']
|
||||
obj_portail = scene.objects['Portail']
|
||||
obj_portail['x']= scene.objects['Portail'].localPosition.x # Affichage de la position du 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)
|
||||
|
||||
# Ouvrir
|
||||
if obj['open']:
|
||||
obj_engrenage.applyRotation((0, 0, -pas_engrenage*vitesse), True)
|
||||
obj_portail.applyMovement((-pas_portail*vitesse, 0, 0), True)
|
||||
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)
|
||||
|
||||
# Modele 3D -> Arduino
|
||||
if scene.objects['System']['twins']:
|
||||
@ -123,8 +138,11 @@ def mot (cont):
|
||||
# Fermer
|
||||
# else: # Pas de priorité
|
||||
if obj['close']:
|
||||
obj_engrenage.applyRotation((0, 0, pas_engrenage*vitesse), True)
|
||||
obj_portail.applyMovement((pas_portail*vitesse, 0, 0), True)
|
||||
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)
|
||||
|
||||
# Modele 3D -> Arduino
|
||||
if scene.objects['System']['twins']:
|
||||
|
@ -41,8 +41,19 @@ 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)
|
||||
|
||||
# Ecrire votre code ici ...
|
||||
gyr(True) # Activer le gyrophare
|
||||
test()
|
||||
while True:
|
||||
pass
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2020-2022 Philippe Roy
|
||||
# @copyright: Copyright (C) 2020-2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
|
||||
from twin_serial import jumeau, jumeau_stop, serial_close # Liaison série
|
||||
# import twin_serial # Liaison série
|
||||
from twin_plot import test # Visualisation données
|
||||
import time
|
||||
|
||||
###############################################################################
|
||||
|
Binary file not shown.
1
portail_coulissant/twin_plot.py
Symbolic link
1
portail_coulissant/twin_plot.py
Symbolic link
@ -0,0 +1 @@
|
||||
/home/phroy/Bureau/seriousgames/blender-edutech/git/digital_twin/twin_plot.py
|
76
twin_plot.py
Normal file
76
twin_plot.py
Normal file
@ -0,0 +1,76 @@
|
||||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||
import sys
|
||||
import matplotlib
|
||||
matplotlib.use('Qt5Agg')
|
||||
|
||||
rom PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar
|
||||
from matplotlib.figure import Figure
|
||||
|
||||
###############################################################################
|
||||
# twin_plot.py
|
||||
# @title: Visualisation des données
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
# UPBGE scene
|
||||
scene = bge.logic.getCurrentScene()
|
||||
|
||||
# Récupérer le brochage du jumeau réel
|
||||
# system=importlib.import_module(scene.objects['Doc']['system']) # Système
|
||||
# pin_config = system.get_pin_config()
|
||||
|
||||
###############################################################################
|
||||
# Fenêtre avec la Toobar
|
||||
###############################################################################
|
||||
|
||||
class MplCanvas(FigureCanvasQTAgg):
|
||||
|
||||
def __init__(self, parent=None, width=5, height=4, dpi=100):
|
||||
fig = Figure(figsize=(width, height), dpi=dpi)
|
||||
self.axes = fig.add_subplot(111)
|
||||
super(MplCanvas, self).__init__(fig)
|
||||
|
||||
|
||||
class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MainWindow, self).__init__(*args, **kwargs)
|
||||
|
||||
sc = MplCanvas(self, width=5, height=4, dpi=100)
|
||||
sc.axes.plot([0,1,2,3,4], [10,1,20,3,40])
|
||||
|
||||
# Create toolbar, passing canvas as first parament, parent (self, the MainWindow) as second.
|
||||
toolbar = NavigationToolbar(sc, self)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout()
|
||||
layout.addWidget(toolbar)
|
||||
layout.addWidget(sc)
|
||||
|
||||
# Create a placeholder widget to hold our toolbar and canvas.
|
||||
widget = QtWidgets.QWidget()
|
||||
widget.setLayout(layout)
|
||||
self.setCentralWidget(widget)
|
||||
|
||||
self.show()
|
||||
|
||||
###############################################################################
|
||||
# Visualisation
|
||||
###############################################################################
|
||||
|
||||
|
||||
##
|
||||
# Test
|
||||
##
|
||||
|
||||
def test():
|
||||
|
||||
# FIXME : mettre le multithreading
|
||||
# app = QtWidgets.QApplication(sys.argv)
|
||||
w = MainWindow()
|
||||
# app.exec_()
|
@ -9,11 +9,11 @@ from serial.tools.list_ports import comports # Détection du port automatique
|
||||
|
||||
###############################################################################
|
||||
# twin_serial.py
|
||||
# @title: Gestion de la laison série
|
||||
# @title: Gestion de la liaison série
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2022 Philippe Roy
|
||||
# @copyright: Copyright (C) 2022-2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
|
@ -10,7 +10,7 @@ import time
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2020-2022 Philippe Roy
|
||||
# @copyright: Copyright (C) 2020-2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
|
1
volet_roulant/twin_plot.py
Symbolic link
1
volet_roulant/twin_plot.py
Symbolic link
@ -0,0 +1 @@
|
||||
/home/phroy/Bureau/seriousgames/blender-edutech/git/digital_twin/twin_plot.py
|
Loading…
Reference in New Issue
Block a user