mirror of
https://forge.apps.education.fr/blender-edutech/jumeaux-numeriques.git
synced 2024-01-27 06:56:18 +01:00
173 lines
10 KiB
Python
173 lines
10 KiB
Python
###############################################################################
|
|
# volrou_doc.py
|
|
# @title: Documentation du volet roulant
|
|
# @project: Blender-EduTech
|
|
# @lang: fr
|
|
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
|
# @copyright: Copyright (C) 2022-2023 Philippe Roy
|
|
# @license: GNU GPL
|
|
###############################################################################
|
|
|
|
################################################################################
|
|
# Documentation du système
|
|
################################################################################
|
|
|
|
system_card=["twins-card", "pin-card", "data-card", "daq-card", "movement-card", "sensor-card", "board-card", "model-card", "firmata-card", "arduino-card"]
|
|
system_card_description ={}
|
|
|
|
# Jumeau numérique
|
|
card_twins_title="Jumeau numérique"
|
|
card_twins_text=""" jumeau(brochage) -> Démarrer le jumelage.\n
|
|
"brochage" permet de faire le lien entre les \n deux jumeaux (voir la page "Brochage").\n
|
|
jumeau_stop() -> Arrêter le jumelage.\n
|
|
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."""
|
|
# Avec "carte=jumeau(brochage)", on peut \n utiliser l'objet 'carte' pour communiquer \n directement avec le protocole Firmata.
|
|
# 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."""
|
|
card_twins_url=[]
|
|
system_card_description.update({"twins-card" : [card_twins_title, card_twins_text, card_twins_url]})
|
|
|
|
# Brochage
|
|
card_pin_title="Brochage"
|
|
card_pin_text_grove_bg_auto=""" 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 = { 'bp_m':['d',2,'i'] }.\n
|
|
Les objets numériques sont : 'bp_m', 'bp_a', \n 'bp_d', 'fdc_h', 'fdc_b', 'bg_auto', 'voy_auto' et \n 'lum'. Le moteur (maquette Grove) : 'mot_s' \n (sens, 0 ou 1) et 'mot_v' (vitesse, 0 à 255)."""
|
|
|
|
card_pin_text_grove_bp_auto=""" 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 = { 'bp_m':['d',2,'i'] }.\n
|
|
Les objets numériques sont : 'bp_m', 'bp_a', \n 'bp_d', 'fdc_h', 'fdc_b', 'bp_auto', 'voy_auto' et \n 'lum'. 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 qui permet \n d'associer les objets 3D du jumeau \n numérique aux broches du jumeau réel,
|
|
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 = { 'bp_m':['d',2,'i'] }.\n
|
|
Les objets numériques sont : 'bp_m', 'bp_a', \n 'bp_d', 'mot_m', 'mot_d', 'fdc_h', 'fdc_b', \n 'bp_auto', 'voy_auto' et 'lum'."""
|
|
card_pin_url=[]
|
|
system_card_description.update({"pin-card" : [card_pin_title, [card_pin_text_grove_bg_auto, card_pin_text_grove_bp_auto, card_pin_text_autoprog] , card_pin_url]}) # 3 descriptions
|
|
|
|
# Données
|
|
card_data_title="Accès aux données"
|
|
card_data_text_grove_bg_auto=""" 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', 'bg_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', 'lum_r', \n 'bg_auto_r', 'mot_v', 'mot_s', 'mot_vitesse_r'.\n
|
|
Autres : 't' (temps), 'mot_angle', 'mot_vitesse'."""
|
|
|
|
card_data_text_grove_bp_auto=""" 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', 'lum_r', \n 'bp_auto_r', 'mot_v', 'mot_s', 'mot_vitesse_r'.\n
|
|
Autres : 't' (temps), 'mot_angle', 'mot_vitesse'."""
|
|
|
|
card_data_text_autoprog=""" 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 : 't' (temps), 'mot_angle', 'mot_vitesse'."""
|
|
|
|
card_data_url=[]
|
|
system_card_description.update({"data-card" : [card_data_title, [card_data_text_grove_bg_auto, card_data_text_grove_bp_auto, card_data_text_autoprog], card_data_url]})
|
|
|
|
# Monitoring
|
|
card_daq_title="Acquisition de données"
|
|
# card_daq_text="aaa"+"\u2192"+"ddd"
|
|
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.
|
|
Par exemple : daq(['bp_m', 'mot_angle']).\n
|
|
plot([variables]) \n -> Affiche le chronogramme à l'arrêt du
|
|
cycle. Le chronogramme interactif est en \n cours d'implémentation.\n
|
|
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."""
|
|
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]})
|
|
|
|
# Monter et descendre
|
|
card_movement_title="Monter et descendre"
|
|
card_movement_text_grove=""" mot_m(True | False) -> Monter le volet.
|
|
mot_d(True | False) -> Descendre le volet. \n
|
|
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 (0-255).
|
|
Si 'vitesse' est ommis, elle sera réinitialisée.\n
|
|
fdc_h() \n -> Capteur fin de course volet en haut.
|
|
fdc_b() \n -> Capteur fin de course volet en bas."""
|
|
|
|
card_movement_text_autoprog=""" mot_m(True | False) -> Monter le volet.
|
|
mot_d(True | False) -> Descendre le volet. \n
|
|
mot_vitesse(vitesse) -> Change la vitesse \n du moteur numérique en rad/s.
|
|
Si 'vitesse' est ommis, elle sera réinitialisée.\n
|
|
fdc_h() \n -> Capteur fin de course volet en haut.
|
|
fdc_b() \n -> Capteur fin de course volet en bas."""
|
|
|
|
card_movement_url=[]
|
|
system_card_description.update({"movement-card" : [card_movement_title, [card_movement_text_grove, card_movement_text_grove, card_movement_text_autoprog], card_movement_url]}) # 2 descriptions
|
|
|
|
# Capteurs
|
|
card_sensor_title="Capteur"
|
|
card_sensor_text=""" lum(True | False) \n -> Capteur de luminosité (LDR).\n Retourne True s'il y a de la lumière \n importante."""
|
|
card_sensor_url=[]
|
|
system_card_description.update({"sensor-card" : [card_sensor_title, card_sensor_text, card_sensor_url]})
|
|
|
|
# Pupitre
|
|
card_board_title="Pupitre"
|
|
card_board_text= """ bp_m() -> Bouton monter le volet.
|
|
bp_a() -> Bouton arrêter le volet.
|
|
bp_d() -> Bouton descendre le volet.\n
|
|
bp_auto() -> Bouton poussoir d'activation \n du mode automatique.\n
|
|
bg_auto() -> Bouton à glissière pour changer \n de mode (manuel/automatique).\n
|
|
voy_auto(True | False) \n -> Allumer le voyant témoin du mode\n automatique."""
|
|
card_board_url=[]
|
|
system_card_description.update({"board-card" : [card_board_title, card_board_text, card_board_url]})
|
|
|
|
# Maquette
|
|
card_model_title="Maquette"
|
|
card_model_text=""" Le modèle 3D est basé sur la maquette \n développée par l'entreprise A4 \n Technologie. \n
|
|
Les documents techniques et \n pédagogiques signés A4 Technologie \n sont diffusés librement sous licence \n Creative Commons BY-NC-SA. \n
|
|
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."""
|
|
card_model_url=[["A4 Technologie","https://www.a4.fr"],
|
|
["Maquette A4 Technologie","https://www.a4.fr/wiki/index.php?title=Volet_roulant"]]
|
|
system_card_description.update({"model-card" : [card_model_title, card_model_text, card_model_url]})
|
|
|
|
# Firmata
|
|
card_firmata_title="Protocole Firmata"
|
|
card_firmata_text=""" Firmata est le protocole de communication \n entre les deux jumeaux via la liaison série.
|
|
Lors du jumelage, il faut récupérer l'objet \n "carte" avec carte = jumeau(brochage). \n
|
|
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
|
|
broche.write(valeur) -> Écrire sur la broche."""
|
|
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]})
|
|
|
|
# Arduino
|
|
card_arduino_title="Arduino"
|
|
card_arduino_text=""" Arduino une plateforme open-source de \n développement électronique basée sur le \n microcontrôleur de la famille ATmega.
|
|
|
|
Elle est utilisée pour la création d'objets \n électroniques interactifs et connectés : \n IoT, domotique, robotique, ...
|
|
|
|
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, ... """
|
|
|
|
card_arduino_url=[["Plateforme Arduino","https://www.arduino.cc/"]]
|
|
system_card_description.update({"arduino-card" : [card_arduino_title, card_arduino_text, card_arduino_url]})
|
|
|
|
##
|
|
# Envoi des données
|
|
##
|
|
|
|
def get_system_card():
|
|
return system_card
|
|
|
|
def get_system_card_description():
|
|
return system_card_description
|