2024-01-14 09:08:49 +01:00
import bge # Bibliothèque Blender Game Engine (UPBGE)
import runpy # Exécution de script Python légère (sans import)
2022-12-14 08:03:34 +01:00
###############################################################################
2022-12-15 06:20:48 +01:00
# porcou_doc.py
# @title: Documentation du portail coulissant
# @project: Blender-EduTech
2022-12-14 08:03:34 +01:00
# @lang: fr
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
2024-01-14 09:08:49 +01:00
# @copyright: Copyright (C) 2020-2024 Philippe Roy
2022-12-14 08:03:34 +01:00
# @license: GNU GPL
###############################################################################
2024-01-14 09:08:49 +01:00
# UPBGE scene
scene = bge . logic . getCurrentScene ( )
2023-01-14 18:53:11 +01:00
# Texte en X : 426.474 m
2022-12-15 06:20:48 +01:00
################################################################################
# Documentation du système
################################################################################
2023-01-21 06:56:54 +01:00
system_card = [ " twins-card " , " pin-card " , " data-card " , " daq-card " , " movement-card " , " sensor-card " , " gyro-card " , " board-card " , " model-card " , " firmata-card " , " arduino-card " ]
2023-01-09 02:35:00 +01:00
system_card_description = { }
2022-12-15 06:20:48 +01:00
# Jumeau numérique
2022-12-16 18:39:00 +01:00
card_twins_title = " Jumeau numérique "
2023-02-01 06:06:50 +01:00
card_twins_text = """ jumeau(brochage) -> Démarrer le jumelage. \n
2023-01-31 18:37:22 +01:00
" brochage " permet de faire le lien entre les \n deux jumeaux ( voir la page " Brochage " ) . \n
2023-02-01 06:06:50 +01:00
jumeau_stop ( ) - > Arrêter le jumelage . \n
2023-02-03 05:58:20 +01:00
jumeau_mode ( entrées réelles , entrées \n numériques , sorties réelles , sorties \n numériques ) - > Définit les modes
d ' activation des entrées/sorties : \n - True pour activer (par défaut), \n - False pour désactiver. " " "
2023-01-31 18:37:22 +01:00
# Avec "carte=jumeau(brochage)", on peut \n utiliser l'objet 'carte' pour communiquer \n directement avec le protocole Firmata.
2023-01-09 05:54:31 +01:00
# jumeau_config(port, vitesse) \n -> Définit la configuration de la liaison \n série.\n
# Si le port n'est pas spécifié, il sera \n recherché automatiquement (carte \n Arduino Uno ou Mega). \n
# La vitesse par défaut est 115200 baud."""
2022-12-17 19:00:27 +01:00
card_twins_url = [ ]
2023-01-09 02:35:00 +01:00
system_card_description . update ( { " twins-card " : [ card_twins_title , card_twins_text , card_twins_url ] } )
2022-12-16 18:39:00 +01:00
2023-01-14 18:53:11 +01:00
# Brochage
card_pin_title = " Brochage "
2024-01-14 09:08:49 +01:00
card_pin_text_grove = """ Le brochage est un dictionnaire d ' association \n des objets numériques aux broches réelles.
brochage = { nom : [ type , broche , mode ] } :
- nom : nom de l ' objet 3D,
- type : a ( analogique ) ou d ( binaire ) ,
- broche : numéro de la broche de carte ,
- mode : i ( entrée ) , o ( sortie ) ou p ( pwm ) .
Par exemple : brochage = { ' gyr ' : [ ' d ' , 3 , ' o ' ] } . \n
Les objets numériques sont : ' gyr ' , ' bp_ext ' , \n ' bp_int ' , ' fdc_o ' , ' fdc_f ' , ' ir_emet ' et ' ir_recep ' .
Pour le moteur ( maquette Grove ) : ' mot_s ' \n ( sens , 0 ou 1 ) et ' mot_v ' ( vitesse , 0 à 255 ) . """
card_pin_text_autoprog = """ Le brochage est un dictionnaire d ' association \n des objets numériques aux broches réelles.
2023-01-14 23:13:22 +01:00
brochage = { nom : [ type , broche , mode ] } :
2023-01-14 18:53:11 +01:00
- nom : nom de l ' objet 3D,
2023-02-01 06:06:50 +01:00
- type : a ( analogique ) ou d ( binaire ) ,
2023-01-14 18:53:11 +01:00
- broche : numéro de la broche de carte ,
- mode : i ( entrée ) , o ( sortie ) ou p ( pwm ) .
2023-02-03 05:58:20 +01:00
Par exemple : brochage = { ' gyr ' : [ ' d ' , 3 , ' o ' ] } . \n
2024-01-14 09:08:49 +01:00
Les objets numériques sont : ' gyr ' , ' bp_ext ' , \n ' bp_int ' , ' fdc_o ' , ' fdc_f ' , ' ir_emet ' et ' ir_recep ' .
Pour le moteur ( maquette AutoProg ) : \n ' mot_o ' ( ouvrir ) et ' mot_f ' ( fermer ) """
2023-01-14 18:53:11 +01:00
card_pin_url = [ ]
2024-01-14 09:08:49 +01:00
system_card_description . update ( { " pin-card " : [ card_pin_title , card_pin_text_grove , card_pin_url , card_pin_text_autoprog ] } ) # Deux descriptions
2023-01-14 18:53:11 +01:00
2023-01-18 06:06:15 +01:00
# Données
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
2024-01-14 09:08:49 +01:00
Entrées / sorties : ' bp_ext ' , ' bp_int ' , ' fdc_o ' , \n ' fdc_f ' , ' mot_o ' , ' mot_f ' , ' gyr ' , ' ir_emet ' et
' ir_recep ' . Maquette Grove ( en + ) : ' mot_s ' \n ( sens , 0 ou 1 ) et ' mot_v ' ( vitesse , 0 - 255 ) . \n
Entrées réels ( si il y a jumelage ) : ' bp_ext_r ' , \n ' bp_int_r ' , ' fdc_o_r ' , ' fdc_f_r ' , ' ir_recep_r ' .
2023-01-19 02:27:47 +01:00
Autres variables : ' t ' ( temps ) , ' mot_angle ' , \n ' mot_vitesse ' , ' portail_x ' , ' portail_vitesse ' . """
2023-01-18 06:06:15 +01:00
card_data_url = [ ]
system_card_description . update ( { " data-card " : [ card_data_title , card_data_text , card_data_url ] } )
2022-12-17 19:00:27 +01:00
2023-01-14 23:13:22 +01:00
# Monitoring
2023-01-21 06:56:54 +01:00
card_daq_title = " Acquisition de données "
# card_daq_text="aaa"+"\u2192"+"ddd"
2023-01-29 01:23:51 +01:00
card_daq_text = """ daq([variables]) \n -> Déclenche l ' acquisition de données afin \n de générer un fichier de données CSV à \n l ' arrêt du cycle.
2023-01-21 06:56:54 +01:00
Par exemple : daq ( [ ' bp_ext ' , ' portail_x ' ] ) . \n
2023-01-26 00:40:06 +01:00
plot ( [ variables ] ) \n - > Affiche le chronogramme à l ' arrêt du
2023-01-21 06:56:54 +01:00
cycle . Le chronogramme interactif est en \n cours d ' implémentation. \n
2023-01-18 06:06:15 +01:00
Les variables pouvant être suivies sont les \n mêmes que celles de la page " Données " . """
# Blender étant cadencé à 60 fps, la fréquence \n d'acquisition est 16 ms."""
2023-01-21 06:56:54 +01:00
card_daq_url = [ [ " Wikipedia Français : fichier CSV " , " https://fr.wikipedia.org/wiki/Comma-separated_values " ] ,
[ " Bibliothèque Matplotlib " , " https://matplotlib.org/ " ] ]
system_card_description . update ( { " daq-card " : [ card_daq_title , card_daq_text , card_daq_url ] } )
2023-01-14 23:13:22 +01:00
2022-12-16 18:39:00 +01:00
# Ouvrir et fermer
card_movement_title = " Ouvrir et fermer "
2024-01-14 09:08:49 +01:00
card_movement_text = """ mot_o(True | False) -> Ouvrir le portail.
mot_f ( True | False ) - > Fermer le portail . \n
2023-01-19 02:27:47 +01:00
fdc_o ( ) \n - > Capteur fin de course portail ouvert .
fdc_f ( ) \n - > Capteur fin de course portail fermé . \n
2024-01-14 09:08:49 +01:00
mot_vitesse ( vitesse ) - > Change la vitesse \n du moteur numérique en rad / s .
mot_vitesse_r ( vitesse ) - > Change la vitesse \n du moteur réel en rad / s ( maquette Grove ) .
Si ' vitesse ' est ommis , elle sera réinitialisée . """
2023-01-19 02:27:47 +01:00
# 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
2022-12-16 18:39:00 +01:00
card_movement_url = [ ]
2023-01-09 02:35:00 +01:00
system_card_description . update ( { " movement-card " : [ card_movement_title , card_movement_text , card_movement_url ] } )
2022-12-16 18:39:00 +01:00
# Capteurs
2022-12-24 03:10:30 +01:00
card_sensor_title = " Capteur "
2022-12-31 03:37:23 +01:00
card_sensor_text = """ ir_emet(True | False) \n -> Activer l ' émetteur infrarouge (IR). \n
ir_recep ( ) \n - > Récepteur barrage infrarouge ( IR ) . \n Retourne True s ' il n ' y a pas d ' obstacle. " " "
2022-12-16 18:39:00 +01:00
card_sensor_url = [ ]
2023-01-09 02:35:00 +01:00
system_card_description . update ( { " sensor-card " : [ card_sensor_title , card_sensor_text , card_sensor_url ] } )
2022-12-16 18:39:00 +01:00
# Gyrophare
card_gyro_title = " Gyrophare "
2022-12-24 03:10:30 +01:00
card_gyro_text = """ gyr(True | False) \n -> Activer le gyrophare. """
2022-12-16 18:39:00 +01:00
card_gyro_url = [ ]
2023-01-09 02:35:00 +01:00
system_card_description . update ( { " gyro-card " : [ card_gyro_title , card_gyro_text , card_gyro_url ] } )
2022-12-16 18:39:00 +01:00
# Pupitre
card_board_title = " Pupitre "
2022-12-24 03:10:30 +01:00
card_board_text = """ bp_ext() \n -> Bouton poussoir coté rue. \n Retourne True si le bouton est pressé. \n
bp_int ( ) \n - > Bouton poussoir coté cour . \n Retourne True si le bouton est pressé . """
2022-12-16 18:39:00 +01:00
card_board_url = [ ]
2023-01-09 02:35:00 +01:00
system_card_description . update ( { " board-card " : [ card_board_title , card_board_text , card_board_url ] } )
2022-12-15 06:20:48 +01:00
2022-12-17 19:00:27 +01:00
# Maquette
card_model_title = " Maquette "
2024-01-14 09:08:49 +01:00
card_model_text = """ Le modèle 3D est basé sur la maquette \n développée par l ' entreprise A4 \n Technologie. Il existe aussi une maquette \n auto-construite à partir de modules Grove. \n
Tous deux sont diffusées librement sous \n licence Creative Commons BY - NC - SA . \n
2022-12-31 03:37:23 +01:00
Le pilotage de la maquette se fait par une \n carte Arduino ( Uno ou Mega ) reliée à \n l ' ordinateur via la liaison série (USB) et le \n protocole Firmata. " " "
2024-01-14 09:08:49 +01:00
card_model_url = [ [ " Maquette A4 Technologie " , " https://www.a4.fr/wiki/index.php?title=Portail_coulissant_(BE-APORT-COUL) " ] ,
[ " Maquette auto-construite " , " https://forge.aeif.fr/blender-edutech/blender-edutech-modeles3d/-/tree/main/portail_coulissant " ] ,
[ " Système Grove " , " https://wiki.seeedstudio.com/Grove_System/ " ] ]
2023-01-09 02:35:00 +01:00
system_card_description . update ( { " model-card " : [ card_model_title , card_model_text , card_model_url ] } )
2022-12-17 19:00:27 +01:00
2023-01-18 06:06:15 +01:00
# Firmata
card_firmata_title = " Protocole Firmata "
2023-01-31 18:37:22 +01:00
card_firmata_text = """ Firmata est le protocole de communication \n entre les deux jumeaux via la liaison série.
2023-02-01 06:06:50 +01:00
Lors du jumelage , il faut récupérer l ' objet \n " carte " avec carte = jumeau(brochage). \n
2023-01-31 18:37:22 +01:00
broche = carte . get_pin ( ' type:numéro:mode ' ) \n - > Créer une entrée / sortie ( broche ) : \n - type : a ( analogique ) ou d ( numérique ) , \n - mode : i ( entrée ) , o ( sortie ) ou p ( pwm ) . \n
valeur = broche . read ( ) - > Lit la broche . \n
2023-02-03 05:58:20 +01:00
broche . write ( valeur ) - > Écrire sur la broche . """
2023-01-18 06:06:15 +01:00
card_firmata_url = [ [ " Protocole Firmata : pyFirmata " , " https://github.com/tino/pyFirmata " ] ]
system_card_description . update ( { " firmata-card " : [ card_firmata_title , card_firmata_text , card_firmata_url ] } )
2022-12-17 19:00:27 +01:00
# Arduino
card_arduino_title = " Arduino "
2023-01-01 17:34:01 +01:00
card_arduino_text = """ Arduino une plateforme open-source de \n développement électronique basée sur le \n microcontrôleur de la famille ATmega.
2022-12-17 19:00:27 +01:00
2023-01-01 17:34:01 +01:00
Elle est utilisée pour la création d ' objets \n électroniques interactifs et connectés : \n IoT, domotique, robotique, ...
2022-12-17 19:00:27 +01:00
2022-12-31 03:37:23 +01:00
Le langage de programmation est le C . Par \n la bibliothèque Arduino l ' accès aux entrées \n et sorties de la carte est particulièrement
aisé . Les platines permettent l ' ajout \n d ' extensions : relais , Grove , RFID , GPS , . . . """
2022-12-17 19:00:27 +01:00
card_arduino_url = [ [ " Plateforme Arduino " , " https://www.arduino.cc/ " ] ]
2023-01-09 02:35:00 +01:00
system_card_description . update ( { " arduino-card " : [ card_arduino_title , card_arduino_text , card_arduino_url ] } )
2022-12-17 19:00:27 +01:00
2022-12-15 06:20:48 +01:00
##
# Envoi des données
##
def get_system_card ( ) :
return system_card
2023-01-09 02:35:00 +01:00
def get_system_card_description ( ) :
return system_card_description
2024-01-14 09:08:49 +01:00
# # Mise en place de la variante
# print ("aa")
# print (scene.objects['System']['script'])
# print ("bb")
# # runpy.run_path(scene.objects['System']['script'], run_name='init')
# # if scene.objects['System']['variant'] ==2:
# # system_card_description.update({"pin-card" : [card_pin_title, card_pin_text_autoprog, card_pin_url]})
# # else:
# # system_card_description.update({"pin-card" : [card_pin_title, card_pin_text_grove, card_pin_url]})
# return system_card_description