Différences entre versions de « Projets:Magic Control 2021 »
(59 versions intermédiaires par 3 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | {{Infobox projet | ||
+ | |Image principale=Magic control.png | ||
+ | |Description=Développer un contrôle d'environnement de fauteuil roulant électrique à bas coût. | ||
+ | |Porteur de projet=Jonathan | ||
+ | |Contributeurs=Delphine, Fredgar, Mathilde, Christophe, Fred, Gweltaz, Mélanie, Olivier, Tanguy | ||
+ | |Fabmanager=Delphine | ||
+ | |Référent documentation=Emoc | ||
+ | |Catégorie de handicap=Mobilité, Motricité | ||
+ | |Etat d'avancement=En cours | ||
+ | |Statut de la documentation=Partielle | ||
+ | |Relecture de la documentation=Vérifiée | ||
+ | |Techniques=raspberry pi, bluetooth | ||
+ | |Niveau=Moyen | ||
+ | |Licence=by-sa | ||
+ | |Projet date=2021-10-19 | ||
+ | |Partenaires=ArianeGroup, INRIA | ||
+ | |Nom humanlab=Humanlab_MHK | ||
+ | }} | ||
== Equipe == | == Equipe == | ||
Ligne 7 : | Ligne 25 : | ||
== Description du projet == | == Description du projet == | ||
− | + | Développer un contrôle d'environnement de fauteuil roulant électrique à bas coût permettant de contrôler les fonctions du fauteuil et l'environnement de l'usager via le magic joystick et un contacteur faible pression. | |
=== Génèse du projet === | === Génèse du projet === | ||
Ligne 44 : | Ligne 62 : | ||
* Ajout d'un écran de contrôle d'environnement | * Ajout d'un écran de contrôle d'environnement | ||
* Ajout de fonctions domotiques | * Ajout de fonctions domotiques | ||
+ | |||
+ | == Réalisation des éléments par étape == | ||
+ | |||
+ | === Mise à jour du schéma du magic joystick === | ||
+ | |||
+ | Magic joystick 2021 : réalisé par Christian à distance | ||
+ | |||
+ | [[File:schema_magic_joystick_2021.png|1200px|schéma du magic joystick 2021]] | ||
+ | |||
+ | Fichiers kicad : [[:File:magicjoystick2021_airjoystick_2021.zip|fichiers kicad (zip)]] | ||
+ | |||
+ | Fichiers kicad | ||
+ | |||
+ | '''Fabrication des connecteurs''' | ||
+ | |||
+ | [[File:connecteurs_magic_joystick.jpg|1200px|Fabrication des connecteurs du Magic Joystick 2021]] | ||
+ | |||
+ | === Mise à jour du schéma du air joystick === | ||
+ | |||
+ | Air joystick 2021 : réalisé par Christian à distance | ||
+ | |||
+ | [[File:schema_air_joystick_2021.png|1200px|schéma du air joystick 2021]] | ||
+ | |||
+ | Fichiers kicad : [[:File:magicjoystick2021_airjoystick_2021.zip|fichiers kicad (zip)]] | ||
+ | |||
+ | === Groupe 1, capture des trames R-net === | ||
+ | |||
+ | Mise en place d'une procédure de capture des trames d'initialisation du fauteuil de Jonathan. | ||
+ | |||
+ | * Se connecter au Pi en SSH | ||
+ | * Dans un terminal de commande | ||
+ | |||
+ | <pre> | ||
+ | <nowiki>git clone https://github.com/myhumankit/MagicJoystick2020.git</nowiki> | ||
+ | <nowiki>cd ./MagicJoystick2020/</nowiki> | ||
+ | <nowiki>git branch -a</nowiki> | ||
+ | <nowiki>git checkout -b experimental origin/experimental</nowiki> | ||
+ | <nowiki>cd ./can2RNET/</nowiki> | ||
+ | <nowiki>python3 ./setup.py install</nowiki> | ||
+ | <nowiki>cd ..</nowiki> | ||
+ | <nowiki>cd ./RnetMitm/</nowiki> | ||
+ | <nowiki>python3 ./RnetIntercept.py --dual</nowiki> | ||
+ | </pre> | ||
+ | |||
+ | '''Pourquoi cherche-t-on cette séquence d'initialisation ? ''' | ||
+ | |||
+ | La séquence d'initialisation permet de simuler et remplacer un JSM par Magic Control, il faut donc pouvoir reproduire cette séquence.<br /> | ||
+ | L'étude d'un premier fauteuil avait permis d'enregistrer une séquence d'initialisation, mais un second fauteuil ne démarre pas avec cette séquence.<br /> | ||
+ | Donc les séquences varient selon les modèles, il faut pouvoir les enregistrer pour les rejouer ou chercher une méthode alternative. | ||
+ | |||
+ | === Groupe 1, bouton d'arrêt d'urgence === | ||
+ | |||
+ | Bouton installé en coupure sur le bus R-net : l'interruption des signaux du watchdog stoppe les commandes moteur. Interrupteur de type DPST utilisé en ON/OFF. | ||
+ | |||
+ | Voir [[Projets:Magic_Joystick_2020|Magic Joystick 2020]] pour schéma, composants et fichiers de fabrication du boîtier. | ||
+ | |||
+ | === Groupe 2, simuler une souris bluetooth === | ||
+ | L'objectif est de permettre en appuyant sur un bouton d'utiliser le joystick du fauteuil comme pointeur de navigation dans l'interface du contrôle d'environnement. | ||
+ | Le développement s'appuie sur le script d'émulation développé et documenté par Thanh, en l'adaptant au projet : | ||
+ | * [https://web.archive.org/web/20211017201331/https://thanhle.me/emulate-bluetooth-mouse-with-raspberry-pi/ https://thanhle.me/emulate-bluetooth-mouse-with-raspberry-pi/] (sur archive.org) | ||
+ | * https://github.com/quangthanh010290/keyboard_mouse_emulate_on_raspberry | ||
+ | |||
+ | La procédure d'installation est décrite sur le dépôt github d'origine. | ||
+ | |||
+ | === Groupe 3, calibration logicielle du magic joystick === | ||
+ | |||
+ | Refonte du code | ||
+ | |||
+ | === Groupe 3, design utilisateur du contrôle d'environnement === | ||
+ | |||
+ | Schéma actuel de la navigation dans l'application de contrôle d'environnement (joystick : navigation, clic : sélection) | ||
+ | |||
+ | [[File:schema_controle_environnement.png|800px|schéma actuel de l'application de contrôle d'environnement]] | ||
+ | |||
+ | Détails sur le fichier pdf : [[:File:schema_controle_environnement.pdf|schéma de l'application de contrôle d'environnement (pdf)]] | ||
+ | |||
+ | Voir-ci-dessous pour la nouvelle interface web | ||
+ | |||
+ | == Réalisation du prototype complet == | ||
+ | |||
+ | === Architecture hardware === | ||
+ | |||
+ | [[File:schema_systeme_general_architecture_hardware.png|800px|Schéma général d'architecture hardware]] | ||
+ | |||
+ | [[File:brochage_rpi_magic_control.png|800px|Utilisation des broches du Raspberry Pi 3]] | ||
+ | |||
+ | ==== Matériel requis ==== | ||
+ | |||
+ | Ce projet nécessite de la découpe laser, de l'impression 3D et du matériel de fabrication électronique (réalisation du joystick, des cables, etc.), ainsi que les éléments suivants : | ||
+ | |||
+ | * un [[Projets:Magic_Joystick_2020|magic joystick 2020]] | ||
+ | * un bouton d'arrêt d'urgence (cf. [[Projets:Magic_Joystick_2020|magic joystick 2020]]) | ||
+ | * un cable R-Net avec connecteurs intercalés (cf. [[Projets:Magic_Joystick_2020|magic joystick 2020]]) | ||
+ | * deux [https://wikilab.myhumankit.org/index.php?title=Projets:Contacteur_faible_pression_jack_3.5 contacteurs à faible pression] | ||
+ | * une carte raspberry pi 3 avec système Debian 10 Buster sur carte micro-SD | ||
+ | * une carte PiCAN2 | ||
+ | * (option) un dongle USB-Bluetooth pour se connecter à un ordinateur (afin d'avoir 2 connexions bluetooth sur rpi) | ||
+ | |||
+ | ==== Principe d'initialisation ==== | ||
+ | |||
+ | [[File:sequence_initialisation.png|1200px|Séquence d'initialisation]] | ||
+ | |||
+ | L'initialisation est faite par RNetCtrl selon la séquence suivante : | ||
+ | * '''fig. 1''' : le JSM envoie des trames d'initialisation sur le bus R-Net, RNetCtrl fonctionne en passe-plat, transmettant les trames au moteur. | ||
+ | * '''fig. 2''' : une fois la dernière trame d'initialisation du JSM reconnue, RNetCtrl arrête de transmettre les trames du JSM. En revanche il continue à transmettre les trames du watchdog, toutes les 10 millisecondes, afin que le moteur continue de fonctionner. | ||
+ | * '''fig. 3''' : Et voilà! RNetCtrl transmet au moteur les commandes fournies par le Magic Joystick et les trames du watchdog. | ||
+ | |||
+ | ==== Connectique ==== | ||
+ | |||
+ | [[File:connectique.png|800px|Connectique]] | ||
+ | |||
+ | '''En bleu''' : mini-jack femelle vers connecteur femelle x 2 <br /> | ||
+ | '''En vert''' : connecteur sur mesure (voir schéma magic joystick mis à jour ci-dessus) | ||
+ | |||
+ | === Architecture logicielle === | ||
+ | |||
+ | Après avoir examiné plusieurs scénarii, le choix de l'équipe se porte sur un broker MQTT, qui permet à chaque brique logicielle de publier ou de s'abonner à des flux de données. | ||
+ | |||
+ | '''L'intégralité du code source est accessible dans le dépôt git : https://github.com/myhumankit/MagicJoystick2020''' | ||
+ | |||
+ | [[File:schema_systeme_general_architecture_logicielle.png|800px|Schéma général d'architecture logicielle]] | ||
+ | |||
+ | '''Points de montage MQTT''' | ||
+ | |||
+ | [[File:schema_points_montage_mqtt.png|800px|Schéma des points de montage MQTT]] | ||
+ | |||
+ | === Interface web === | ||
+ | |||
+ | [[File:interface_ecran_magic_control.png|820px|Écrans de l'interface web]] | ||
+ | |||
+ | L'interface est accessible sur un serveur http en wifi depuis le téléphone via Firefox. Il faudra ajouter un couche de sécurité pour que l'interface ne soit accessible que par l'utilisateur. | ||
+ | |||
+ | '''L'ordinateur de bord permet de choisir ce qu'on contrôle via le magic joystick :''' | ||
+ | * la conduite du fauteuil pour se déplacer ainsi que toutes les autres fonctionnalités accessibles : lumières, klaxon, vérins | ||
+ | * naviguer sur le PC ou téléphone via le bluetooth | ||
+ | * afficher l'heure et le niveau de batterie du fauteuil sur tous les écrans | ||
+ | * configurer la température du chauffe-main | ||
+ | * accéder aux paramètres d'alimentation de l'ordinateur de bord pour le mettre en veille, l'arrêter ou le redémarrer | ||
+ | A développer : | ||
+ | * domotique (fenêtre, porte, volets etc..) | ||
+ | * équipement (TV, lecteur DVD, chaîne hifi ) | ||
+ | |||
+ | |||
+ | '''Modalités de navigation dans l'interface :''' | ||
+ | * '''clic long''' avec contacteur pour sortir du mode bluetooth quand le joystick est utilisé comme souris pour naviguer sur PC. | ||
+ | * '''clic court''' avec contacteur pour sortir du mode "conduite" (quand le joystick sert à conduire le fauteuil), et retourner en mode "navigation" dans l'interface. | ||
+ | |||
+ | Pour passer d'un sous-menu à l'autre dans les fonctionnalités du fauteuil (en mode vérins, lumière), on utilise le joystick gauche/droite pour faire défiler les sous-menus.<br /> | ||
+ | En mode lumière, le joystick haut, permet d'activer la fonction, le joystick bas permet de désactiver.<br /> | ||
+ | En mode vérins, le joystick haut et bas permet de monter ou descendre le vérin sélectionné. | ||
+ | |||
+ | '''Reste à implémenter dans l'interface :''' | ||
+ | * Sur l'écran Fauteuil | ||
+ | ** les différents vérins : pied gauche, droit, les deux, le dossier, le lift, l'assise (inclinaison) | ||
+ | ** le sous menu des lumières : clignotant gauche, droit, et warning | ||
+ | * Sur l'écran Bluetooth | ||
+ | ** le choix de l'appareil bluetooth (PC ou tel), le choix des différents clics (gauche, droit, double clic, maintien, triple clic). (icônes à préparer) | ||
+ | ** l'écran Chauffe-main | ||
+ | ** l'écran Alimentation : Veille, Arrêt, Redémarrage, Retour. (icônes à préparer) | ||
+ | |||
+ | '''Pour plus tard :''' | ||
+ | * l'écran domotique | ||
+ | * l'écran maison | ||
+ | |||
+ | Notes sur la nouvelle interface web : | ||
+ | |||
+ | [[File:notes_nouvelle_interface.jpg|200px|notes nouvelle interface web]] | ||
+ | |||
+ | === réalisation, installation et démarrage === | ||
+ | |||
+ | * Fabriquer les éléments (contacteurs faible pression, magic joystick, cables) | ||
+ | * Installer les logiciels sur le Raspberry Pi | ||
+ | ** Installation du système Debian 10 Buster | ||
+ | ** Cloner le dépôt github sur le Raspberry Pi | ||
+ | ** Lancer le script de configuration (procédure décrite sur github) | ||
+ | * Hors tension, relier le circuit de Magic Control au fauteuil | ||
+ | * !TODO! compléter la procédure de démarrage | ||
== Composants et circuits électroniques utilisés == | == Composants et circuits électroniques utilisés == | ||
Ligne 49 : | Ligne 244 : | ||
=== Carte Raspberry Pi 3 model B+ === | === Carte Raspberry Pi 3 model B+ === | ||
− | Pour ce | + | Pour ce projet, la carte est dotée d'un système Debian 10 Buster sur carte micro-SD 8 GO |
https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/ | https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/ | ||
Ligne 62 : | Ligne 257 : | ||
== Lexique == | == Lexique == | ||
+ | |||
+ | '''Broker MQTT''' : Le broker MQTT est un serveur qui reçoit tous les messages des clients et les aiguille vers les clients de destination appropriés. | ||
'''CAN (Controller Area Network)''' : Bus de communication série utilisé en électronique, particulièrement dans l'industrie automobile. Il fonctionne sur le principe du multiplexage ou chaque équipement connecté communique avec tous les autres. https://fr.wikipedia.org/wiki/Bus_de_donn%C3%A9es_CAN | '''CAN (Controller Area Network)''' : Bus de communication série utilisé en électronique, particulièrement dans l'industrie automobile. Il fonctionne sur le principe du multiplexage ou chaque équipement connecté communique avec tous les autres. https://fr.wikipedia.org/wiki/Bus_de_donn%C3%A9es_CAN | ||
'''JSM (Joystick Module)''' (module électronique d'un fauteuil) joystick d'assistance à l'arrière du fauteuil, prioritaire sur le contrôle du déplacement. | '''JSM (Joystick Module)''' (module électronique d'un fauteuil) joystick d'assistance à l'arrière du fauteuil, prioritaire sur le contrôle du déplacement. | ||
+ | |||
+ | '''MQTT (Message Queuing Telemetry Transport)''' : protocole de messagerie *publish-subscribe* basé sur TCP-IP (cf. [https://fr.wikipedia.org/wiki/MQTT MQTT sur wikipedia]) + d'infos : https://mqtt.org/ | ||
'''PiCAN''' : carte additionnelle pour Raspberry Pi, permettant de s'interfacer à un bus CAN. Il en existe plusieurs variantes, celles utilisées pour ce fabrikarium est une PiCAN2 Duo. | '''PiCAN''' : carte additionnelle pour Raspberry Pi, permettant de s'interfacer à un bus CAN. Il en existe plusieurs variantes, celles utilisées pour ce fabrikarium est une PiCAN2 Duo. | ||
Ligne 73 : | Ligne 272 : | ||
'''Raspberry Pi''' : nano-ordinateur sur carte électronique unique équipé d'un système linux Debian. | '''Raspberry Pi''' : nano-ordinateur sur carte électronique unique équipé d'un système linux Debian. | ||
− | '''Trame CAN''' : série de bits | + | '''Trame CAN''' : série de bits envoyée sur le bus CAN et interprêtée par le JSM et le contrôleur de moteur. |
'''Watchdog''' : trame périodique surveillée afin de détecter une éventuelle rupture de communication. | '''Watchdog''' : trame périodique surveillée afin de détecter une éventuelle rupture de communication. | ||
Ligne 85 : | Ligne 284 : | ||
* Définition des objectifs primaires et secondaires du fabrikarium. | * Définition des objectifs primaires et secondaires du fabrikarium. | ||
* Répartition en 3 groupes pour un premier passage en revue des solutions. | * Répartition en 3 groupes pour un premier passage en revue des solutions. | ||
+ | |||
+ | === Premier jour, après-midi === | ||
+ | |||
+ | Poursuites des pistes définies le matin pour les 3 groupes | ||
+ | |||
+ | Synthèse présentée à la présentation de fin de journée | ||
+ | |||
+ | [[File:jour1_presentation_definition.png|1200px|Définition]] | ||
+ | |||
+ | Programme des 3 groupes de travail | ||
+ | |||
+ | [[File:jour1_presentation_pistes.png|1200px|Programme des 3 groupes]] | ||
+ | |||
+ | === Jour 2, matin === | ||
+ | |||
+ | * Amélioration de l'algorithme de calibration (calculs de matrices). | ||
+ | * Design graphique de l'interface utilisateur du nouveau contrôle d'environnement. | ||
+ | * Essai (concluant!) d'une nouvelle méthode d'intégration sur le bus R-net. | ||
+ | * Définition du système client-serveur pour le contrôle d'environnement.(point d'accès wifi, serveur flask). | ||
+ | * Programmation de l'interface web de contrôle d'environnement. | ||
+ | * Mise au point de l'architecture hardware. | ||
+ | |||
+ | === Jour 2, après-midi === | ||
+ | |||
+ | * Réflexion sur l'architecture logicielle, plusieurs pistes sont esquissées. | ||
+ | * Poursuite du design graphique du contrôle d'environnement. | ||
+ | * Développement logiciel par itérations et POCs | ||
+ | |||
+ | '''Document de la restitution du jour 2''' : [[:File:jour2_restitution.pdf|présentation (pdf)]] | ||
+ | |||
+ | === Jour 3, matin === | ||
+ | |||
+ | * Petit point : jusqu'où essaie-t-on d'aller aujourd'hui ? | ||
+ | * Définition des mountpoints de publication MQTT | ||
+ | * Dév. du code intensif | ||
+ | |||
+ | === Jour 3, après-midi === | ||
+ | |||
+ | * Dév. du code intensif | ||
+ | * Bouclage pour préparer la démo | ||
+ | * Préparation de la présentation | ||
+ | |||
+ | '''Restitution finale :''' [[:File:jour3_restitution_finale.pdf|présentation (pdf)]] | ||
[[Category:Projets]] | [[Category:Projets]] | ||
[[Category:En cours]] | [[Category:En cours]] |
Version actuelle datée du 7 avril 2023 à 16:01
Magic Control 2021 | |
---|---|
Informations | |
Description | Développer un contrôle d'environnement de fauteuil roulant électrique à bas coût. |
Catégorie | Mobilité Motricité |
Etat d'avancement | En cours |
Techniques | raspberry pi, bluetooth |
Durée de fabrication | |
Coût matériel | |
Niveau | Moyen |
Licence | by-sa |
Date de création | 2021-10-19 |
Équipe | |
Porteur de projet | Jonathan |
Contributeurs | Delphine, Fredgar, Mathilde, Christophe, Fred, Gweltaz, Mélanie, Olivier, Tanguy |
Fabmanager | Delphine |
Référent documentation | Emoc |
Partenaires: | ArianeGroup, INRIA |
Nom humanlab | Humanlab_MHK |
Documentation | |
Statut de la documentation | Partielle |
Relecture de la documentation | Vérifiée |
Equipe
- Porteurs du projet : Jonathan (MyHumanKit), accompagné par Romane et Marine.
- Contribut/eur/rice/s : Christophe (INRIA), Fred (ArianeGroup), Gweltaz (Les portes logiques), Mathilde (ArianeGroup), Mélanie (ArianeGroup), Olivier (ArianeGroup), Tanguy (ArianeGroup).
- Fabmanageuse référente : Delphine (MyHumanKit).
- Documentation : Pierre (Flossmanuals FR).
Description du projet
Développer un contrôle d'environnement de fauteuil roulant électrique à bas coût permettant de contrôler les fonctions du fauteuil et l'environnement de l'usager via le magic joystick et un contacteur faible pression.
Génèse du projet
Ce projet a démarré au Fabrikarium 2019, organisé avec ArianeGroup sur le site des Mureaux. Cette première étape a permis de développer des premiers prototypes de joystick à faible force (minijoy) et de mettre au point la communication avec le fauteuil par le protocole R-net.
Au Fabrikarium 2020, le projet a été poursuivi en améliorant le joystick par deux prototypes, ainsi qu'en approfondissant l'analyse des trames de communication R-net.
État technique
Plusieurs prototypes existent pour le joystick à faible force. L'interface CAN/R-net est fonctionnelle sur carte raspberry pi.
Documentation des étapes précédentes sur le wiki :
- https://wikilab.myhumankit.org/index.php?title=Projets:Can2RNET
- https://wikilab.myhumankit.org/index.php?title=Projets:Magic_Joystick
- https://wikilab.myhumankit.org/index.php?title=Projets:Magic_Joystick_2020
- code : https://github.com/myhumankit/MagicJoystick2020
Objectifs de cette 3e étape
Objectifs prioritaires
- (groupe 1) Réglage de la calibration du mini-joystick (minijoy)
- (groupe 1) Test de la séquence d'initialisation du fauteuil de Jonathan
- (groupe 1) Ajout d'un bouton d'arrêt d'urgence
- (groupe 2) Emulation de souris (pour androïd ou apple)
- (groupe 3) Ajout d'un bouton pour donner le contrôle au Raspberry Pi
- (groupe 3) Design / expérience utilisateur
Objectifs secondaires
- Ajout d'un switch pour basculer entre JSM et minijoy : mode «passe-plat» ou mode «minijoy»
- Reverse du protocole de contrôle des vérins
- Ajout d'un contrôle de la vitesse maximum et des vérins
- Contrôle d'environnement par application (androïd, ou par techno web, plus portable)
- Ajout d'un écran de contrôle d'environnement
- Ajout de fonctions domotiques
Réalisation des éléments par étape
Mise à jour du schéma du magic joystick
Magic joystick 2021 : réalisé par Christian à distance
Fichiers kicad : fichiers kicad (zip)
Fichiers kicad
Fabrication des connecteurs
Mise à jour du schéma du air joystick
Air joystick 2021 : réalisé par Christian à distance
Fichiers kicad : fichiers kicad (zip)
Groupe 1, capture des trames R-net
Mise en place d'une procédure de capture des trames d'initialisation du fauteuil de Jonathan.
- Se connecter au Pi en SSH
- Dans un terminal de commande
git clone https://github.com/myhumankit/MagicJoystick2020.git cd ./MagicJoystick2020/ git branch -a git checkout -b experimental origin/experimental cd ./can2RNET/ python3 ./setup.py install cd .. cd ./RnetMitm/ python3 ./RnetIntercept.py --dual
Pourquoi cherche-t-on cette séquence d'initialisation ?
La séquence d'initialisation permet de simuler et remplacer un JSM par Magic Control, il faut donc pouvoir reproduire cette séquence.
L'étude d'un premier fauteuil avait permis d'enregistrer une séquence d'initialisation, mais un second fauteuil ne démarre pas avec cette séquence.
Donc les séquences varient selon les modèles, il faut pouvoir les enregistrer pour les rejouer ou chercher une méthode alternative.
Groupe 1, bouton d'arrêt d'urgence
Bouton installé en coupure sur le bus R-net : l'interruption des signaux du watchdog stoppe les commandes moteur. Interrupteur de type DPST utilisé en ON/OFF.
Voir Magic Joystick 2020 pour schéma, composants et fichiers de fabrication du boîtier.
Groupe 2, simuler une souris bluetooth
L'objectif est de permettre en appuyant sur un bouton d'utiliser le joystick du fauteuil comme pointeur de navigation dans l'interface du contrôle d'environnement. Le développement s'appuie sur le script d'émulation développé et documenté par Thanh, en l'adaptant au projet :
- https://thanhle.me/emulate-bluetooth-mouse-with-raspberry-pi/ (sur archive.org)
- https://github.com/quangthanh010290/keyboard_mouse_emulate_on_raspberry
La procédure d'installation est décrite sur le dépôt github d'origine.
Groupe 3, calibration logicielle du magic joystick
Refonte du code
Groupe 3, design utilisateur du contrôle d'environnement
Schéma actuel de la navigation dans l'application de contrôle d'environnement (joystick : navigation, clic : sélection)
Détails sur le fichier pdf : schéma de l'application de contrôle d'environnement (pdf)
Voir-ci-dessous pour la nouvelle interface web
Réalisation du prototype complet
Architecture hardware
Matériel requis
Ce projet nécessite de la découpe laser, de l'impression 3D et du matériel de fabrication électronique (réalisation du joystick, des cables, etc.), ainsi que les éléments suivants :
- un magic joystick 2020
- un bouton d'arrêt d'urgence (cf. magic joystick 2020)
- un cable R-Net avec connecteurs intercalés (cf. magic joystick 2020)
- deux contacteurs à faible pression
- une carte raspberry pi 3 avec système Debian 10 Buster sur carte micro-SD
- une carte PiCAN2
- (option) un dongle USB-Bluetooth pour se connecter à un ordinateur (afin d'avoir 2 connexions bluetooth sur rpi)
Principe d'initialisation
L'initialisation est faite par RNetCtrl selon la séquence suivante :
- fig. 1 : le JSM envoie des trames d'initialisation sur le bus R-Net, RNetCtrl fonctionne en passe-plat, transmettant les trames au moteur.
- fig. 2 : une fois la dernière trame d'initialisation du JSM reconnue, RNetCtrl arrête de transmettre les trames du JSM. En revanche il continue à transmettre les trames du watchdog, toutes les 10 millisecondes, afin que le moteur continue de fonctionner.
- fig. 3 : Et voilà! RNetCtrl transmet au moteur les commandes fournies par le Magic Joystick et les trames du watchdog.
Connectique
En bleu : mini-jack femelle vers connecteur femelle x 2
En vert : connecteur sur mesure (voir schéma magic joystick mis à jour ci-dessus)
Architecture logicielle
Après avoir examiné plusieurs scénarii, le choix de l'équipe se porte sur un broker MQTT, qui permet à chaque brique logicielle de publier ou de s'abonner à des flux de données.
L'intégralité du code source est accessible dans le dépôt git : https://github.com/myhumankit/MagicJoystick2020
Points de montage MQTT
Interface web
L'interface est accessible sur un serveur http en wifi depuis le téléphone via Firefox. Il faudra ajouter un couche de sécurité pour que l'interface ne soit accessible que par l'utilisateur.
L'ordinateur de bord permet de choisir ce qu'on contrôle via le magic joystick :
- la conduite du fauteuil pour se déplacer ainsi que toutes les autres fonctionnalités accessibles : lumières, klaxon, vérins
- naviguer sur le PC ou téléphone via le bluetooth
- afficher l'heure et le niveau de batterie du fauteuil sur tous les écrans
- configurer la température du chauffe-main
- accéder aux paramètres d'alimentation de l'ordinateur de bord pour le mettre en veille, l'arrêter ou le redémarrer
A développer :
- domotique (fenêtre, porte, volets etc..)
- équipement (TV, lecteur DVD, chaîne hifi )
Modalités de navigation dans l'interface :
- clic long avec contacteur pour sortir du mode bluetooth quand le joystick est utilisé comme souris pour naviguer sur PC.
- clic court avec contacteur pour sortir du mode "conduite" (quand le joystick sert à conduire le fauteuil), et retourner en mode "navigation" dans l'interface.
Pour passer d'un sous-menu à l'autre dans les fonctionnalités du fauteuil (en mode vérins, lumière), on utilise le joystick gauche/droite pour faire défiler les sous-menus.
En mode lumière, le joystick haut, permet d'activer la fonction, le joystick bas permet de désactiver.
En mode vérins, le joystick haut et bas permet de monter ou descendre le vérin sélectionné.
Reste à implémenter dans l'interface :
- Sur l'écran Fauteuil
- les différents vérins : pied gauche, droit, les deux, le dossier, le lift, l'assise (inclinaison)
- le sous menu des lumières : clignotant gauche, droit, et warning
- Sur l'écran Bluetooth
- le choix de l'appareil bluetooth (PC ou tel), le choix des différents clics (gauche, droit, double clic, maintien, triple clic). (icônes à préparer)
- l'écran Chauffe-main
- l'écran Alimentation : Veille, Arrêt, Redémarrage, Retour. (icônes à préparer)
Pour plus tard :
- l'écran domotique
- l'écran maison
Notes sur la nouvelle interface web :
réalisation, installation et démarrage
- Fabriquer les éléments (contacteurs faible pression, magic joystick, cables)
- Installer les logiciels sur le Raspberry Pi
- Installation du système Debian 10 Buster
- Cloner le dépôt github sur le Raspberry Pi
- Lancer le script de configuration (procédure décrite sur github)
- Hors tension, relier le circuit de Magic Control au fauteuil
- !TODO! compléter la procédure de démarrage
Composants et circuits électroniques utilisés
Carte Raspberry Pi 3 model B+
Pour ce projet, la carte est dotée d'un système Debian 10 Buster sur carte micro-SD 8 GO
https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/
Carte PiCAN2 Duo
Carte électronique additionnelle pour Raspberry Pi 3/4 avec double interface pour bus CAN et transformateur d'alimentation (SMPS) capable de fournir 3A. Fabriquée par SK Pang.
Lexique
Broker MQTT : Le broker MQTT est un serveur qui reçoit tous les messages des clients et les aiguille vers les clients de destination appropriés.
CAN (Controller Area Network) : Bus de communication série utilisé en électronique, particulièrement dans l'industrie automobile. Il fonctionne sur le principe du multiplexage ou chaque équipement connecté communique avec tous les autres. https://fr.wikipedia.org/wiki/Bus_de_donn%C3%A9es_CAN
JSM (Joystick Module) (module électronique d'un fauteuil) joystick d'assistance à l'arrière du fauteuil, prioritaire sur le contrôle du déplacement.
MQTT (Message Queuing Telemetry Transport) : protocole de messagerie *publish-subscribe* basé sur TCP-IP (cf. MQTT sur wikipedia) + d'infos : https://mqtt.org/
PiCAN : carte additionnelle pour Raspberry Pi, permettant de s'interfacer à un bus CAN. Il en existe plusieurs variantes, celles utilisées pour ce fabrikarium est une PiCAN2 Duo.
R-net : Le protocole R-net définit des commandes qui passent sur un bus CAN. Il a été mis au point en 2011 par PGDT (PG Drives Technology) pour le contrôle des fauteuils électriques. Il s'agit d'un protocole propriétaire, en 2016 des informations sur ce protocole ont été trouvées par Stephen Chavez par ingénierie inverse pour le projet https://github.com/redragonx/can2RNET.
Raspberry Pi : nano-ordinateur sur carte électronique unique équipé d'un système linux Debian.
Trame CAN : série de bits envoyée sur le bus CAN et interprêtée par le JSM et le contrôleur de moteur.
Watchdog : trame périodique surveillée afin de détecter une éventuelle rupture de communication.
Journal du projet
Premier jour, matin
- Présentation des étapes précédentes du projet.
- Présentation de l'état technique actuel.
- Définition des objectifs primaires et secondaires du fabrikarium.
- Répartition en 3 groupes pour un premier passage en revue des solutions.
Premier jour, après-midi
Poursuites des pistes définies le matin pour les 3 groupes
Synthèse présentée à la présentation de fin de journée
Programme des 3 groupes de travail
Jour 2, matin
- Amélioration de l'algorithme de calibration (calculs de matrices).
- Design graphique de l'interface utilisateur du nouveau contrôle d'environnement.
- Essai (concluant!) d'une nouvelle méthode d'intégration sur le bus R-net.
- Définition du système client-serveur pour le contrôle d'environnement.(point d'accès wifi, serveur flask).
- Programmation de l'interface web de contrôle d'environnement.
- Mise au point de l'architecture hardware.
Jour 2, après-midi
- Réflexion sur l'architecture logicielle, plusieurs pistes sont esquissées.
- Poursuite du design graphique du contrôle d'environnement.
- Développement logiciel par itérations et POCs
Document de la restitution du jour 2 : présentation (pdf)
Jour 3, matin
- Petit point : jusqu'où essaie-t-on d'aller aujourd'hui ?
- Définition des mountpoints de publication MQTT
- Dév. du code intensif
Jour 3, après-midi
- Dév. du code intensif
- Bouclage pour préparer la démo
- Préparation de la présentation
Restitution finale : présentation (pdf)