Configuration des capteurs (config/sensors_config.json)
Ce fichier décrit les capteurs physiques, les capteurs calculés et le mode émulation du backend.
La configuration est chargée au démarrage par ConfigLoader (src/core/config_loader.py) puis utilisée par:
ServiceManager(src/core/service_manager.py) pour démarrer les ports série (port + baudrate)SensorManager(src/core/services/sensor_manager.py) pour décider quels capteurs sont connectés/émulés et calculerARCGraphique(src/core/processing/graphique.py) etTestManager(src/core/services/test_manager.py) pour les libellés et échelles de graphe
Fichier JSON actuel
{
"emulation": [],
"sensors": {
"FORCE": {
"baud": 115200,
"description": "Force sensor (capteur de force)",
"display_name": "Force (N)",
"serial_id": "usb-1a86_USB2.0-Serial-if00-port0",
"max": 1000,
"enabled": true
},
"DISP_1": {
"baud": 115200,
"description": "Motion sensor 1 (capteur de mouvement 1)",
"display_name": "Fleche centrale (mm)",
"max": 14,
"serial_id": "usb-Adafruit_Adafruit_Feather_M0_BF31609450304C4B552E3120FF042E0C-if00",
"enabled": true
},
"DISP_2": {
"baud": 115200,
"description": "Motion sensor 2 (capteur de mouvement 2)",
"display_name": "Deplacement 2 (mm)",
"max": 14,
"serial_id": "usb-Adafruit_Adafruit_Feather_M0_714ACFDC50304C4B552E3120FF052C1A-if00",
"enabled": true
},
"DISP_3": {
"baud": 115200,
"description": "Motion sensor 3 (capteur de mouvement 3)",
"display_name": "Deplacement 3 (mm)",
"max": 14,
"serial_id": "usb-Adafruit_Adafruit_Feather_M0_B3EE8F3050304C4B552E3120FF08061F-if00",
"enabled": true
},
"DISP_4": {
"baud": 115200,
"description": "Motion sensor 4 (capteur de mouvement 4)",
"display_name": "Deplacement 4 (mm)",
"max": 14,
"serial_id": "usb-Adafruit_Adafruit_Feather_M0_C6C61DEE50304C4B552E3120FF022A31-if00",
"enabled": true
},
"DISP_5": {
"baud": 115200,
"description": "Motion sensor 5 (capteur de mouvement 5)",
"display_name": "Deplacement 5 (mm)",
"max": 14,
"serial_id": "usb-Adafruit_Adafruit_Feather_M0_96D2E6055154384153202020FF182B13-if00",
"enabled": true
}
},
"calculated_sensors": {
"ARC": {
"description": "Calculated arc (circular deflection)",
"display_name": "Fleche d'arc (mm)",
"dependencies": [
"DISP_1",
"DISP_2",
"DISP_3"
],
"max": 1
}
}
}
Structure générale
Le fichier est composé de 3 sections:
emulation: liste de capteurs à simuler (par nom d'enum, ex:"FORCE")sensors: capteurs physiques branchés sur ports sériecalculated_sensors: capteurs virtuels calculés à partir d'autres capteurs
Utilité détaillée de chaque champ
1. Section emulation
- Type:
string[] - Valeur actuelle:
[](aucune émulation forcée depuis le JSON)
Utilité:
- Si un capteur est listé ici, il est généré artificiellement dans
SensorManager._emulation_loop. - Le mode peut être surchargé par la variable d'environnement
EMULATION_MODE(danssrc/main.py). - En cas d'échec de démarrage et si l'émulation est autorisée, l'application peut basculer en émulation complète.
2. Section sensors (capteurs physiques)
Clés autorisées: FORCE, DISP_1, DISP_2, DISP_3, DISP_4, DISP_5.
Chaque capteur contient:
baud(int): vitesse de communication série. Utilisé lors de la création duSerialHandler.serial_id(string): suffixe du chemin/dev/serial/by-id/. Utilisé pour ouvrir le bon port physique.enabled(bool): active/désactive logiquement le capteur. Influence la connectivité logique (is_sensor_enabled) et l'émulation.display_name(string): nom affiché sur les axes des graphiques.max(float): borne supérieure pour l'échelle des graphiques.description(string): texte descriptif (documentation/métadonnées).
Important:
- Si
serial_idest vide, le capteur est ignoré côté acquisition matérielle. enabled=falseretire le capteur des capteurs actifs (et donc impacte aussi les capteurs calculés qui en dépendent).
3. Section calculated_sensors (capteurs virtuels)
Clé actuelle: ARC.
Champs:
dependencies(string[]): capteurs d'entrée nécessaires au calcul.display_name: libellé d'axe/affichage.max: échelle graphique max.description: description fonctionnelle.
Utilité dans le code:
ConfigLoaderconvertit les dépendances en références vers les capteurs réels.SensorManagerrecalculeARCà chaque nouvelle donnée de dépendance.-
Formule actuelle:
\[ARC = DISP_1 - \frac{DISP_2 + DISP_3}{2}\] -
Le capteur
ARCest considéré connecté uniquement si toutes ses dépendances sont connectées.
Configuration active résumée
Capteurs physiques
| Capteur | Activé | Baud | Max | Affichage | Serial ID |
|---|---|---|---|---|---|
| FORCE | oui | 115200 | 1000 | Force (N) | usb-1a86_USB2.0-Serial-if00-port0 |
| DISP_1 | oui | 115200 | 14 | Fleche centrale (mm) | usb-Adafruit_Adafruit_Feather_M0_BF31609450304C4B552E3120FF042E0C-if00 |
| DISP_2 | oui | 115200 | 14 | Deplacement 2 (mm) | usb-Adafruit_Adafruit_Feather_M0_714ACFDC50304C4B552E3120FF052C1A-if00 |
| DISP_3 | oui | 115200 | 14 | Deplacement 3 (mm) | usb-Adafruit_Adafruit_Feather_M0_B3EE8F3050304C4B552E3120FF08061F-if00 |
| DISP_4 | oui | 115200 | 14 | Deplacement 4 (mm) | usb-Adafruit_Adafruit_Feather_M0_C6C61DEE50304C4B552E3120FF022A31-if00 |
| DISP_5 | oui | 115200 | 14 | Deplacement 5 (mm) | usb-Adafruit_Adafruit_Feather_M0_96D2E6055154384153202020FF182B13-if00 |
Capteur calculé
| Capteur | Dépendances | Max | Affichage |
|---|---|---|---|
| ARC | DISP_1, DISP_2, DISP_3 | 1 | Fleche d'arc (mm) |
Emulation
- Valeur actuelle: liste vide (
[]), donc priorité au mode matériel. - Si
EMULATION_MODEest défini dans l'environnement, cette variable prend la priorité sur le JSON.
Valeurs par défaut et robustesse
Si une clé manque dans le JSON, ConfigLoader applique des valeurs par défaut:
baud:9600description:""display_name:""serial_id:""max:0.0enabled:true
Si le fichier est absent ou invalide, un fallback interne est chargé (_get_default_config).
Bonnes pratiques de modification
- Conserver exactement les noms d'enum (
FORCE,DISP_1, etc.). - Vérifier que chaque
serial_idexiste réellement dans/dev/serial/by-id/. - Adapter
maxaux plages physiques réelles pour éviter des graphiques peu lisibles. - Ne pas définir
ARCdanssensors(il doit rester danscalculated_sensors). - Garder les dépendances
ARCcohérentes avec la formule métier.