Différences entre versions de « Projets:Magic Control 2022 »

De wikilab
 
(36 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
{{Infobox projet
 
{{Infobox projet
 +
|Image principale=Magic control.png
 
|Description=Développement du Magic Control pendant le Fabrikarium 2022
 
|Description=Développement du Magic Control pendant le Fabrikarium 2022
 
|Porteur de projet=Jonathan
 
|Porteur de projet=Jonathan
Ligne 24 : Ligne 25 :
 
* [[Projets:Magic_Control_2021 | Magic Control 2021]] (Fabrikarium 2021) Ajout de l'interface
 
* [[Projets:Magic_Control_2021 | Magic Control 2021]] (Fabrikarium 2021) Ajout de l'interface
 
* [[Projets:Magic_Control_V2 | Magic Control V2]] (Stages INRIA de Brice et Roxanne)
 
* [[Projets:Magic_Control_V2 | Magic Control V2]] (Stages INRIA de Brice et Roxanne)
 +
* [[Projets:Fokus_Magic_control_2022 | Fokus Magic Control 2022]]
 +
 +
 +
{{#ask:
 +
[[Category:Motricité]] [[A image principale::+]] [[A porteur de projet::Utilisateur:Jonathan]] [[A date début projet::>{{#time:2019-10-17}}]]
 +
|?A redirect
 +
|?A description courte
 +
|?A image principale
 +
|?A date début projet
 +
|?A titre
 +
|?A légende
 +
|redirects=A redirect
 +
|widths=100
 +
|heights=100
 +
|limit=50
 +
|transpose=yes
 +
|imageproperty=A image principale
 +
|autocaptions=no
 +
|captionproperty=A légende
 +
|overlay=no
 +
|sort=A date début projet
 +
|order=descending
 +
|searchlabel =Autres résultats
 +
|format=template |template=ResponsivePolaroidImages_date |headers=hide |link=none |offset=
 +
}}
 +
 +
<br clear=all>
 +
 +
==== Autres ressources ====
 +
 +
* [https://github.com/myhumankit/MagicJoystick2020  Dépôt github du projet] contient tous les composants déjà développé sur Raspberry PI
 +
** configuration Raspberry pi
 +
** configuration mqtt
 +
** interface RNET raspberry
 +
** interface graphique
 +
 +
* [https://github.com/myhumankit/Magic-control-2022  Dépôt github du portage de la partie RNET sur M5Stack]
  
 
=== Chantiers pour ce Fabrikarium ===
 
=== Chantiers pour ce Fabrikarium ===
Ligne 39 : Ligne 77 :
 
* Apprentissage de trames infrarouge pour remplacer des télécommandes (Contrôle de la télé, ouverture des portes)
 
* Apprentissage de trames infrarouge pour remplacer des télécommandes (Contrôle de la télé, ouverture des portes)
  
== Déroulé du Fabrikarium ==
+
== État précédent ==
 +
 
 +
=== Schéma de principe ===
 +
 
 +
* Schéma de principe électronique
 +
* Architecture logicielle
 +
 
 +
=== Raspberry pi ===
 +
 
 +
 
 +
* Installation -> setup.sh
 +
* Gestion des tâchessupervisord
 +
* Gestion du réseau + idée d'amélioration tethering
 +
 
 +
=== Interface ===
 +
 
 +
 
 +
'''Documentation server http / api rest / mqtt'''
 +
 
 +
* L'interface web est fournie par un serveur http qui utilise le microframework python <code>flask</code>.
 +
* Le serveur fourni une API REST à l'aide de la bibliothèque <code>flask-RESTful</code>.
 +
* Cette api est reliée au système de message MQTT.
 +
 
 +
 
 +
== R-NET CTRL de Raspberry Pi à M5Stack ==
 +
 
 +
=== Pourquoi ? ===
 +
 
 +
Utiliser la raspberry pi pour faire l'interface entre le magic-joystick et le fauteuil pose quelques problèmes :
 +
* le fauteuil doit être déconnecté du JSM d'origine du fauteuil
 +
* le raspberry pi doit être allumé en permanence même si on utilise le JSM
 +
 
 +
Or il est aussi possible de se connecter au fauteuil en tant que second JSM, ce qui permet de conserver la connexion du JSM d'origine. Par contre, cela complique l'apprentissage des séquences d'initialisation qu'il est nécessaire de reproduire pour émuler un joystick à partir du microcontrôleur.
 +
 
 +
 
 +
Pour rappel, pour se connecter avec le BUS CAN au contrôleur du fauteuil, il faut "rejouer" une trame afin de se faire identifier comme un JSM.
 +
 
 +
 
 +
Il y a aussi une limite dans l'utilisation du raspberry pi comme interface car il doit décoder et recoder les trames du JSM, et n'a parfois pas la vélocité pour faire tout ce qu'on veut.
 +
 
 +
 
 +
=== Nouvelle architecture matérielle ===
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
 
 +
Le M5Stack remplace donc le module PiCAN2 utilisé auparavant, tel que le décrit le schéma suivant :
 +
 
 +
 
 +
[[File:Magic_Control_2022_archi_hard_21_22.png|900px]]
 +
 
 +
 
 +
La nouvelle architecture matérielle telle qu'elle a été testé pendant le Fabrikarium est la suivante :
 +
 
 +
 
 +
[[File:Magic_Control_2022_archi_hard_2022.png|900px]]
 +
 
 +
 
 +
A plus ou moins long terme, on peut imaginer que le magic joystick soit connecté directement au M5Stack (Projection 1).
 +
 
 +
 
 +
On peut aussi envisager que le M5Stack remplace complètement le Raspberry Pi (Projection 2)
 +
 
 +
 
 +
[[File:Magic_Control_2022_archi_hard_projection.png|900px]]
 +
 
 +
=== Apprentissage ===
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
 
 +
On a besoin d'un module supplémentaire COMMU pour le bus CAN, ainsi que deux interfaces CAN.
 +
 
 +
Composants utilisés :
 +
 
 +
<gallery>
 +
File:Magic_Control_2022_M5_Module.png | [https://shop.m5stack.com/products/esp32-basic-core-iot-development-kit-v2-6  M5Stack esp32 basic core iot]
 +
File:Magic_Control_2022_M5_COMMU.png | [https://shop.m5stack.com/collections/m5-modules/products/commu-module M5Stack module COMMU]
 +
File:Magic_Control_2022_M5_CAN.png | [https://shop.m5stack.com/products/canbus-unitca-is3050g  Module Bus CAN] x 2
 +
</gallery>
 +
 
 +
 
 +
 
 +
[[File:MAgic_Control_2022_apprentissage_m5Stack.png|900px]]
 +
 
 +
   
 +
En période d'apprentissage, au lieu de se faire passer pour le JSM d'origine du fauteuil, on utilise un second JSM (JSM_1) qui n'est utilisé que pour l'apprentissage.
 +
 
 +
 
 +
On a alors besoin d'enregistrer deux séquences d'initialisation :
 +
* Celle qui est émise par <code>JSM_1</code> (le deuxième JSM: celui qu'on veut émuler plus tard) lorqsue c'est lui qui démarre le fauteuil.
 +
* Celle qui est émise par <code>JSM_1</code> lorsque le fauteuil est démarré par <code>JSM_0</code>.
 +
 
 +
 
 +
À noter que seul le JSM qui a démarré le fauteuil peut prendre la main sur le déplacement du fauteuil.
 +
 
 +
 
 +
On en profite pour enregister deux autres séquences, les séquences "sablier", qui sont émise par le <code>JSM_1</code> en cas de panne. Encore une fois, ces séquences sont différentes si le fauteuil a été allumé par <code>JSM_0</code> (<code>dicSablierJSM.bin</code>) ou <code>JSM_1</code> (<code>dictSablierLocal.bin</code>)
 +
 
 +
 
 +
Pour cela, il faut simuler la déconnection du <code>JSM_0</code> pour faire "planter" le système, puis enregister la séquence sablier émise.
 +
 
 +
 
 +
Le système complet pour enregistrer les séquences (Arduino + M5Stack/COMMU + tranceiver CAN) est indépendant du système installé sur le fauteuil. Les séquences enregistrées sont écrites dans des fichiers sur une carte SD qui peut doit être insérée dans le M5Stack qui est sur le fauteuil.
 +
 
 +
 
 +
==== Circuit d'apprentissage ====
 +
 
 +
 
 +
<gallery>
 +
File:Magic_Control_2022_can_0.jpg
 +
File:Magic_Control_2022_can_1.jpg
 +
File:Magic_Control_2022_can_2.jpg
 +
File:Magic_Control_2022_can_3.jpg
 +
File:Magic_Control_2022_can_4.jpg
 +
</gallery>
 +
 
 +
 
 +
 
 +
==== Essais pendant le fabrikarium ====
 +
 
 +
 
 +
C'était trop court pour tester la nouvelle architecture avec le Magic Joystick. Nous avons cependant pu tester le bon fonctionnement du contrôle des moteurs via l'interface web à partir d'une page de conduite dédiée. Le contrôle se fait alors à partir de requêtes <code>http</code> vers un serveur qui tourne sur le M5Stack.
 +
 
 +
 
 +
[[File:Magic_Control_2022_M5Stack_fauteuil.jpg|900px]]
 +
 
 +
 
 +
TODO: capture d'écran interface
 +
 
 +
 
 +
==== Prochaines étapes ====
 +
 
 +
 
 +
Il reste donc à prendre le contrôle du fauteuil via le Magic Joystick et le M5Stack
 +
 
 +
== Serveur WEB / Interface ==
 +
 
 +
=== Serveur statique ===
 +
<span style="color:#FFFFFF; background:#ff6600; padding:5px">En cours</span>
 +
 
 +
 
 +
Un script python permet de télécharger une version statique toutes les pages html produites par flask dans une liste définie.
 +
 
 +
 
 +
Une option a été ajoutée dans le serveur flask pour choisir le mode de chargement des ressources statiques.
 +
 
 +
=== Factorisation ===
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
 
 +
* Création d'une arborescence : les fichiers web qui étaient tous dans un dossier <code>html</code> sont répartis dans des dossiers :
 +
** <code>css</code>, <code>js</code>, <code>img</code>, <code>fonts</code>, <code>svg_icons</code>: ressources statiques
 +
** <code>templates</code>: templates html
 +
** <code>resources</code>: API Restfull
 +
 
 +
Dans le cadre de cette factorisation, les ressources, c'est-à-dire les points d'entrée de l'API Restfull, sont désormais définies dans le dossier <code>resources</code>.
 +
 
 +
L'interface web est fonctionnelle, ainsi que l'apprentissage et la lecture de trames infrarouge. Les commandes et l'affichage de l'état du fauteuil n'ont cependant pas été testées.
 +
 
 +
 
 +
=== Ressources IR dans l'interface ===
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
 
 +
Pour l'instant, des ressources sont définies séparément pour l'enregistrement et la lecture infrarouge et sont spécifiques à l'utilisation d'une télécommande de TV.
 +
 
 +
Une nouveau point d'entrée de l'API défini désormais une ressource générique <code>IR</code>, qui prend en charge l'enregistrement et la lecture.
 +
 
 +
Il reste à passer les commandes de la TV dans ce nouveau format.
 +
 
 +
== Enregistrement et lecture des trames infrarouge avec le Raspberry Pi ==
 +
 
 +
=== Principe Raspberry pi / ir-ctl ===
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
 
 +
Sur la version raspberry pi, on utilise un capteur et des leds infrarouges directement reliées au GPIO.
 +
 
 +
 
 +
L'utilitaire en ligne de commande <code>ir-ctl</code> pour enregistrer des trames infrarouges dans des fichiers et les relire. Il s'installe à partir du paquet <code>v4l-utils</code>.
 +
 
 +
 
 +
Il est nécessaire de configurer les deux broches GPIO dans le fichier <code>boot/config.txt</code>.
 +
 
 +
<pre>
 +
# MagicJoy IR config starts =========
 +
# Uncomment this to enable the infrared module
 +
#for receiver, enable to receive IR signals
 +
dtoverlay=gpio-ir,gpio_pin=18,rc-map-name=ir-keytable
 +
#for transmitter, enable to send IR signals
 +
dtoverlay=gpio-ir-tx,gpio_pin=17
 +
# MagicJoy IR config stops ==========
 +
</pre>
 +
 
 +
 
 +
On peut utiliser <code>--one-shot</code> pour ne pas avoir à ajouter une temporisation. Dans ce cas le processus d'enregistrement s'arrête dès qu'il identifie la fin d'une trame.
 +
 
 +
<pre>
 +
# Commande bash pour enregistrer une trame dans le fichier cmd.txt
 +
ir-ctl -r -d /dev/lirc1 --mode2 --one-shot cmd.txt
 +
 
 +
# Commande bash pour lire une trame
 +
sudo ir-ctl -d /dev/lirc0 -s cmd.txt
 +
</pre>
 +
 
 +
Ces commandes sont exécutées à partir des ressources IR et TV qui sont définies dans le dossier <code>bin/IR</code>
 +
 
 +
 
 +
=== Circuit électronique ===
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px">Fonctionnel</span>
 +
<span style="color:#FFFFFF; background:#ff6600; padding:5px">À améliorer</span>
 +
 
 +
 
 +
Un circuit électronique sur stripboard permet d'ajouter un capteur et un émetteur infrarouge.
 +
 
 +
 
 +
[[File:Magic_Control_2022_IR_photo.jpg|900px]]
 +
 
 +
 
 +
Dès les premiers essais, il nous semble cependant que le circuit d'émission ne fonctionne pas très bien : la portée est très réduite et il faut viser avec beaucoup de précision.
 +
 
 +
 
 +
Des modifications ont du être apportées à ce circuit :
 +
 
 +
* ajout d'un circuit de découplage pour le capteur tel que préconisé par le datasheet du capeur TSOP21.
 +
* Les LEDS étaient alimentée par une broche GPIO, ce qui pose problème car il est nécessaire de l'activer (dans le script python IR) et elle ne peut pas fournir assez de courant.
 +
* La resistance de charge des led infrarouge n'etait pas correctement dimensionnée.
 +
 
 +
 
 +
Le nouveau circuit électronique est le suivant :
 +
 
 +
 
 +
[[File:Magic_Control_2022_IR_elec.png|900px]]
 +
 
 +
 
 +
Le calcul de la nouvelle valeur de la résistance est détaillé ci-après :
 +
 
 +
 
 +
[[File:Magic_Control_2022_IR_calcul_R.jpg|400px]]
 +
 
 +
 
 +
Après ces modifications, le circuit d'émission fonctionne mieux mais pas aussi bien qu'on peut l'espérer...
 +
 
 +
 
 +
== Interface ==
 +
 
 +
 
 +
=== Rappel de l'interface actuelle ===
 +
 
 +
 
 +
<gallery>
 +
File:Magic_control_2022_actuel_0_accueil.png
 +
File:Magic_control_2022_actuel_1_fauteuil.png
 +
File:Magic_control_2022_actuel_2_IR.png
 +
File:Magic_control_2022_actuel_10_lumieres.png
 +
File:Magic_control_2022_actuel_12_verrins.png
 +
File:Magic_control_2022_actuel_20_TV_IR.png
 +
File:Magic_control_2022_actuel_21_TV_IR_record.png
 +
</gallery>
 +
 
 +
 
 +
=== Changement de la couleur du fond ===
 +
 
 +
 
 +
Nouvelle couleur 31 73 125
 +
 
 +
TODO: pourquoi ?
 +
 
 +
 
 +
=== Nouvel écran d'accueil ===
 +
 
 +
 
 +
Un nouvel écran d'accueil a été imaginé, qui reprend les entrées les plus fréquemment utilisée par Jonathan.
 +
 
 +
 
 +
[[File:Magic_Control_2022_interface_accueil.png|800px]]
 +
 
 +
 
 +
=== Prodédure d'apprentissage Infrafouge ===
 +
 
 +
 
 +
Lorsqu'on appuie dur le bouton IR, on se retrouve par défaut en mode JOUER, avec 3 boutons permettant d'accéder aux catégories d'équipement.
 +
 
 +
 
 +
On passe en mode apprentissage en cliquant sur A, auquel cas chacun des boutons précédents donne accès à l'ajout ou l'apprentissage de commandes correspondantes.
 +
 
 +
 
 +
[[File:Magic_Control_2022_interface_apprentissage.png|700px]]
 +
 
 +
 
 +
 
 +
[[File:Magic_Control_2022_interface_maison.png|500px]]
 +
 
 +
 
 +
[[File:Magic_Control_2022_interface_IR.png|900px]]
 +
 
 +
 
 +
* 1: Choix du type de dispositif. Les différents dispositifs sont tels que définis par le protocol Matter qui est le futur standard de domotique unifié. Il s'appuie sur ZCL (Zeegbee Cluster Library) qui décrit précisément les fonctions de chaque objet connecté. par exemple :
 +
** Une lumière a deux états : éteint / allumé
 +
** Une volet a trois fonctionnalités : ouvrir / fermer / stop
 +
** Une porte a trois états : ouvrir / fermer / stop
 +
 
 +
* 2: Apparition de deux boutons correspondants aux actions possibles pour de dispositif choisis. On appuie sur l'action dont on veut réaliser l'apprentissage.
 +
 
 +
* 3: Passage en grisé lors de l'enregistrement de la trame infrarouge.
 +
 
 +
* 4: passage en vert lorsque l'enregistrement a bien été effectué
 +
 
 +
* 5-6: idem 3 et 4
 +
 
 +
* 7 choix du nom du dispositif
 +
 
 +
 
 +
 
 +
[[File:Magic_Control_2022_interface_jouer.png|500px]]
 +
 
 +
 
 +
=== Remarque ===
 +
 
 +
 
 +
Comment on modifie ou supprime une commande enregistrée ?
  
=== Mardi 18 octobre ==
 
  
* Présentation de l'équipe et du projet
+
====Interface à jour avec ajout de la suppression d'une commande====
* Définition des objectifs
+
Ajout de l'icône poubelle en mode lecture afin de pouvoir supprimer une commande enregistrée
  
Question existentielles :
+
[[File:suppression_commande_IR_ok3.png|700px|thumb|left|scénario avec les interfaces pour supprimer une commande IR ]]
  
* Raspberry pi ou pas ?
+
<br clear=all>
  
Économie de la batterie :
+
== Modélisation ==
  
A minima, n'utiliser le raspberry pi que quand l'interface est utilisée : R-NET CTRL et le joystick sont contrôlés avec un microcontrôleur indépendant.
 
  
* Home assistant ou pas ?
+
=== Casquette téléphone ===
** Démo home assistant par Marc
+
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
** Utiliser home assistant pour la partie domotique, conserver la partie IR sur le fauteuil
 
  
  
* Problème du double wifi
+
Un des problème que rencontre Jonathan dans l'utilisation de son téléphone est l'éblouissement du au soleil. Pour y remédier, Kristi a modélisé une casquette adaptée à ce téléphone
- ne pas utiliser le wifi pour relier le smartphone à l'ordinateur de bord
 
  
 +
[[File:casquette_tel_magic_control_v5.stl]]
  
'''Point fin de journée'''
+
[[File:Magic_Control_2022_casquette_modele.png|900px]]
  
* Remplacement du raspberry pi par microcontrôleur
 
* Interface par des fichiers statique pour ne plus utiliser de serveur web python
 
* Travail de l'interface (Jean-Christophe, Delphine, Jonathan)
 
* Protection solaire
 
  
  
== Cahier des charges ==
+
[[File:Magic_Control_2022_casquette.jpg|900px]]
  
== Analyse de l'existant et liens utiles==
 
  
== Matériel ==
+
=== Boîtier M5Stack ===
 +
[[File:M5Stack 1 v2.stl|Télécharger le STL du boitier M5Stack]]
  
==Outils==
 
  
==Coût==
+
Une idée possible est de disposer le M5Stack de contrôle du fauteuil de façon à ce qu'il soit accessible par Jonathan et d'utiliser l'écran comme un retour d'information sans passer par le téléphone. Dans cette optique, Kristi a modélisé un boitier pour le M5Stack qu'il est possible d'attacher sur un bras flexible.
  
==Fichiers source==
+
[[File:Magic_Control_2022_boitier_M5Stack.png|500px]]
  
==Etapes de fabrication pas à pas==
+
===Infos utiles===
 +
* user:pibrice
 +
* mdp : raspberry
 +
* ip fixe : 192.168.0.100

Version actuelle datée du 21 juin 2024 à 09:30

Magic Control 2022

Magic control.png

Informations
Description Développement du Magic Control pendant le Fabrikarium 2022
Catégorie Mobilité Motricité
Etat d'avancement En cours
Techniques
Durée de fabrication
Coût matériel
Niveau
Licence by-sa
Date de création 2022-10-18
Équipe
Porteur de projet Jonathan
Contributeurs Delphine, LaurentM
Animateur Delphine
Fabmanager Delphine
Référent documentation LaurentM
Nom humanlab Humanlab_MHK
Documentation
Statut de la documentation Partielle
Relecture de la documentation Non vérifiée

Description du projet

Historique

Rappel des épisodes précédents en quelques mots



Magic control.png

Magic Control 2022
18 octobre 2022

Magic-control-v2.png

Magic Control V2
30 septembre 2022

Magic joystick 2022.jpg

Magic control.png

Magic Control 2021
19 octobre 2021

Fauteuil controle manette.jpg

Can2RNET
18 octobre 2019

Fauteuil controle manette.jpg

Magic Joystick
17 octobre 2019


Autres ressources

  • Dépôt github du projet contient tous les composants déjà développé sur Raspberry PI
    • configuration Raspberry pi
    • configuration mqtt
    • interface RNET raspberry
    • interface graphique

Chantiers pour ce Fabrikarium

Utilisation de M5Stack

Objectif : Se passer de raspberry pi pour économiser de la batterie

Amélioration de l'interface

  • Revoir la page d'accueil

Intégration de la domotique

  • Apprentissage de trames infrarouge pour remplacer des télécommandes (Contrôle de la télé, ouverture des portes)

État précédent

Schéma de principe

  • Schéma de principe électronique
  • Architecture logicielle

Raspberry pi

  • Installation -> setup.sh
  • Gestion des tâchessupervisord
  • Gestion du réseau + idée d'amélioration tethering

Interface

Documentation server http / api rest / mqtt

  • L'interface web est fournie par un serveur http qui utilise le microframework python flask.
  • Le serveur fourni une API REST à l'aide de la bibliothèque flask-RESTful.
  • Cette api est reliée au système de message MQTT.


R-NET CTRL de Raspberry Pi à M5Stack

Pourquoi ?

Utiliser la raspberry pi pour faire l'interface entre le magic-joystick et le fauteuil pose quelques problèmes :

  • le fauteuil doit être déconnecté du JSM d'origine du fauteuil
  • le raspberry pi doit être allumé en permanence même si on utilise le JSM

Or il est aussi possible de se connecter au fauteuil en tant que second JSM, ce qui permet de conserver la connexion du JSM d'origine. Par contre, cela complique l'apprentissage des séquences d'initialisation qu'il est nécessaire de reproduire pour émuler un joystick à partir du microcontrôleur.


Pour rappel, pour se connecter avec le BUS CAN au contrôleur du fauteuil, il faut "rejouer" une trame afin de se faire identifier comme un JSM.


Il y a aussi une limite dans l'utilisation du raspberry pi comme interface car il doit décoder et recoder les trames du JSM, et n'a parfois pas la vélocité pour faire tout ce qu'on veut.


Nouvelle architecture matérielle

Testé et fonctionnel


Le M5Stack remplace donc le module PiCAN2 utilisé auparavant, tel que le décrit le schéma suivant :


Magic Control 2022 archi hard 21 22.png


La nouvelle architecture matérielle telle qu'elle a été testé pendant le Fabrikarium est la suivante :


Magic Control 2022 archi hard 2022.png


A plus ou moins long terme, on peut imaginer que le magic joystick soit connecté directement au M5Stack (Projection 1).


On peut aussi envisager que le M5Stack remplace complètement le Raspberry Pi (Projection 2)


Magic Control 2022 archi hard projection.png

Apprentissage

Testé et fonctionnel


On a besoin d'un module supplémentaire COMMU pour le bus CAN, ainsi que deux interfaces CAN.

Composants utilisés :


MAgic Control 2022 apprentissage m5Stack.png


En période d'apprentissage, au lieu de se faire passer pour le JSM d'origine du fauteuil, on utilise un second JSM (JSM_1) qui n'est utilisé que pour l'apprentissage.


On a alors besoin d'enregistrer deux séquences d'initialisation :

  • Celle qui est émise par JSM_1 (le deuxième JSM: celui qu'on veut émuler plus tard) lorqsue c'est lui qui démarre le fauteuil.
  • Celle qui est émise par JSM_1 lorsque le fauteuil est démarré par JSM_0.


À noter que seul le JSM qui a démarré le fauteuil peut prendre la main sur le déplacement du fauteuil.


On en profite pour enregister deux autres séquences, les séquences "sablier", qui sont émise par le JSM_1 en cas de panne. Encore une fois, ces séquences sont différentes si le fauteuil a été allumé par JSM_0 (dicSablierJSM.bin) ou JSM_1 (dictSablierLocal.bin)


Pour cela, il faut simuler la déconnection du JSM_0 pour faire "planter" le système, puis enregister la séquence sablier émise.


Le système complet pour enregistrer les séquences (Arduino + M5Stack/COMMU + tranceiver CAN) est indépendant du système installé sur le fauteuil. Les séquences enregistrées sont écrites dans des fichiers sur une carte SD qui peut doit être insérée dans le M5Stack qui est sur le fauteuil.


Circuit d'apprentissage


Essais pendant le fabrikarium

C'était trop court pour tester la nouvelle architecture avec le Magic Joystick. Nous avons cependant pu tester le bon fonctionnement du contrôle des moteurs via l'interface web à partir d'une page de conduite dédiée. Le contrôle se fait alors à partir de requêtes http vers un serveur qui tourne sur le M5Stack.


Magic Control 2022 M5Stack fauteuil.jpg


TODO: capture d'écran interface


Prochaines étapes

Il reste donc à prendre le contrôle du fauteuil via le Magic Joystick et le M5Stack

Serveur WEB / Interface

Serveur statique

En cours


Un script python permet de télécharger une version statique toutes les pages html produites par flask dans une liste définie.


Une option a été ajoutée dans le serveur flask pour choisir le mode de chargement des ressources statiques.

Factorisation

Testé et fonctionnel


  • Création d'une arborescence : les fichiers web qui étaient tous dans un dossier html sont répartis dans des dossiers :
    • css, js, img, fonts, svg_icons: ressources statiques
    • templates: templates html
    • resources: API Restfull

Dans le cadre de cette factorisation, les ressources, c'est-à-dire les points d'entrée de l'API Restfull, sont désormais définies dans le dossier resources.

L'interface web est fonctionnelle, ainsi que l'apprentissage et la lecture de trames infrarouge. Les commandes et l'affichage de l'état du fauteuil n'ont cependant pas été testées.


Ressources IR dans l'interface

Testé et fonctionnel


Pour l'instant, des ressources sont définies séparément pour l'enregistrement et la lecture infrarouge et sont spécifiques à l'utilisation d'une télécommande de TV.

Une nouveau point d'entrée de l'API défini désormais une ressource générique IR, qui prend en charge l'enregistrement et la lecture.

Il reste à passer les commandes de la TV dans ce nouveau format.

Enregistrement et lecture des trames infrarouge avec le Raspberry Pi

Principe Raspberry pi / ir-ctl

Testé et fonctionnel


Sur la version raspberry pi, on utilise un capteur et des leds infrarouges directement reliées au GPIO.


L'utilitaire en ligne de commande ir-ctl pour enregistrer des trames infrarouges dans des fichiers et les relire. Il s'installe à partir du paquet v4l-utils.


Il est nécessaire de configurer les deux broches GPIO dans le fichier boot/config.txt.

# MagicJoy IR config starts =========
# Uncomment this to enable the infrared module
#for receiver, enable to receive IR signals
dtoverlay=gpio-ir,gpio_pin=18,rc-map-name=ir-keytable
#for transmitter, enable to send IR signals
dtoverlay=gpio-ir-tx,gpio_pin=17
# MagicJoy IR config stops ==========


On peut utiliser --one-shot pour ne pas avoir à ajouter une temporisation. Dans ce cas le processus d'enregistrement s'arrête dès qu'il identifie la fin d'une trame.

# Commande bash pour enregistrer une trame dans le fichier cmd.txt
ir-ctl -r -d /dev/lirc1 --mode2 --one-shot cmd.txt

# Commande bash pour lire une trame
sudo ir-ctl -d /dev/lirc0 -s cmd.txt

Ces commandes sont exécutées à partir des ressources IR et TV qui sont définies dans le dossier bin/IR


Circuit électronique

Fonctionnel À améliorer


Un circuit électronique sur stripboard permet d'ajouter un capteur et un émetteur infrarouge.


Magic Control 2022 IR photo.jpg


Dès les premiers essais, il nous semble cependant que le circuit d'émission ne fonctionne pas très bien : la portée est très réduite et il faut viser avec beaucoup de précision.


Des modifications ont du être apportées à ce circuit :

  • ajout d'un circuit de découplage pour le capteur tel que préconisé par le datasheet du capeur TSOP21.
  • Les LEDS étaient alimentée par une broche GPIO, ce qui pose problème car il est nécessaire de l'activer (dans le script python IR) et elle ne peut pas fournir assez de courant.
  • La resistance de charge des led infrarouge n'etait pas correctement dimensionnée.


Le nouveau circuit électronique est le suivant :


Magic Control 2022 IR elec.png


Le calcul de la nouvelle valeur de la résistance est détaillé ci-après :


Magic Control 2022 IR calcul R.jpg


Après ces modifications, le circuit d'émission fonctionne mieux mais pas aussi bien qu'on peut l'espérer...


Interface

Rappel de l'interface actuelle


Changement de la couleur du fond

Nouvelle couleur 31 73 125

TODO: pourquoi ?


Nouvel écran d'accueil

Un nouvel écran d'accueil a été imaginé, qui reprend les entrées les plus fréquemment utilisée par Jonathan.


Magic Control 2022 interface accueil.png


Prodédure d'apprentissage Infrafouge

Lorsqu'on appuie dur le bouton IR, on se retrouve par défaut en mode JOUER, avec 3 boutons permettant d'accéder aux catégories d'équipement.


On passe en mode apprentissage en cliquant sur A, auquel cas chacun des boutons précédents donne accès à l'ajout ou l'apprentissage de commandes correspondantes.


Magic Control 2022 interface apprentissage.png


Magic Control 2022 interface maison.png


Magic Control 2022 interface IR.png


  • 1: Choix du type de dispositif. Les différents dispositifs sont tels que définis par le protocol Matter qui est le futur standard de domotique unifié. Il s'appuie sur ZCL (Zeegbee Cluster Library) qui décrit précisément les fonctions de chaque objet connecté. par exemple :
    • Une lumière a deux états : éteint / allumé
    • Une volet a trois fonctionnalités : ouvrir / fermer / stop
    • Une porte a trois états : ouvrir / fermer / stop
  • 2: Apparition de deux boutons correspondants aux actions possibles pour de dispositif choisis. On appuie sur l'action dont on veut réaliser l'apprentissage.
  • 3: Passage en grisé lors de l'enregistrement de la trame infrarouge.
  • 4: passage en vert lorsque l'enregistrement a bien été effectué
  • 5-6: idem 3 et 4
  • 7 choix du nom du dispositif


Magic Control 2022 interface jouer.png


Remarque

Comment on modifie ou supprime une commande enregistrée ?


Interface à jour avec ajout de la suppression d'une commande

Ajout de l'icône poubelle en mode lecture afin de pouvoir supprimer une commande enregistrée

scénario avec les interfaces pour supprimer une commande IR


Modélisation

Casquette téléphone

Testé et fonctionnel


Un des problème que rencontre Jonathan dans l'utilisation de son téléphone est l'éblouissement du au soleil. Pour y remédier, Kristi a modélisé une casquette adaptée à ce téléphone

Fichier:Casquette tel magic control v5.stl

Magic Control 2022 casquette modele.png


Magic Control 2022 casquette.jpg


Boîtier M5Stack

Fichier:M5Stack 1 v2.stl


Une idée possible est de disposer le M5Stack de contrôle du fauteuil de façon à ce qu'il soit accessible par Jonathan et d'utiliser l'écran comme un retour d'information sans passer par le téléphone. Dans cette optique, Kristi a modélisé un boitier pour le M5Stack qu'il est possible d'attacher sur un bras flexible.

Magic Control 2022 boitier M5Stack.png

Infos utiles

  • user:pibrice
  • mdp : raspberry
  • ip fixe : 192.168.0.100