Différences entre versions de « Projets:Magic Joystick 2020 »
Ligne 218 : | Ligne 218 : | ||
[[:File:MLX90333_datasheet_melexis.pdf|datasheet du capteur angulaire MLX90333]] | [[:File:MLX90333_datasheet_melexis.pdf|datasheet du capteur angulaire MLX90333]] | ||
− | Module équipé d'un circuit intégré MLX90333 de Melexis, avec la capacité de capter la position 3D d'un aimant (effet Hall). Ce circuit peut communiquer de différentes manières : analogique, PWM ou série SPI. Sur cette carte, il est configuré par défaut pour une double sortie analogique, et donne les valeurs alpha et beta. NB : Nous n'avons pas trouvé comment configurer ce capteur pour qu'il renvoie les données x,y,z sans utiliser de programmateur hardware et le logiciel propriétaire vendus par le fabricant (cf. datasheet). | + | Module équipé d'un circuit intégré MLX90333 de Melexis, avec la capacité de capter la position 3D d'un aimant (effet Hall). Ce circuit peut communiquer de différentes manières : analogique, PWM ou série SPI. Sur cette carte, il est configuré par défaut pour une double sortie analogique, et donne les valeurs alpha et beta (cf. point 14.1 de la page 19 de la datasheet). NB : Nous n'avons pas trouvé comment configurer ce capteur pour qu'il renvoie les données x,y,z sans utiliser de programmateur hardware et le logiciel propriétaire vendus par le fabricant (cf. datasheet). |
[[File:MLX90333_fonctionnement.png|600px|caption valeurs mesurées par le capteur MLX90333]] | [[File:MLX90333_fonctionnement.png|600px|caption valeurs mesurées par le capteur MLX90333]] |
Version du 21 octobre 2020 à 23:25
Description du projet
Réaliser un joystick à faible force, qui puisse être manipulé avec une mobilité très réduite et interfacé avec un fauteuil électrique.
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 et de mettre au point la communication avec le fauteuil par le protocole R-net. A la fin de ce premier fabrikarium, une manette xbox était reliée au système du fauteuil, avec succès!
État technique
Le joystick à faible force existe sous forme de prototype fonctionnel, mais il va être amélioré dans cette deuxième étape.
L'interface CAN/R-net a été testée avec une matériel industriel, il reste à la faire fonctionner sur une carte raspberry pi.
Documentation de l'étape précédente sur le wiki :
Cahier des charges
Améliorer le fonctionnement du joystick, en particulier de la rotule et de la détection.
Mettre au point la communication SPI entre le capteur angulaire et la carte Raspberry Pi.
Traitement des données et calibration.
Mettre au point la communication avec le fauteuil par R-net en utilisant une carte PiCAN2.
Fusionner les 2 fonctions pour qu'elles soient utilisables sur la même carte Raspberry Pi.
Chercher une solution permettant l'alimentation électrique de l'ensemble.
Réalisation
TL;DR
((A COMPLETER))
Schéma général
(schéma du mardi 21 oct, 10h)
Matériel nécessaire
imprimante 3D
- pièces en impression 3D
- (rotules en métal à faible frottement)
- aimants néodyme 3x3mm
- capteur de positionnement MLX90333
- écran OLED 0.96 128x64 pixels
- convertisseur 12bits analogique/numérique ADS1015
- Raspberry Pi 3 + carte SD avec système Raspbian 10 «Buster» et configuration spécifique
- carte PiCAN2 pour Raspberry Pi
- cables de connection R-net
- cable en Y pour capture des trames r-net
Configuration du Raspberry Pi
OS : Raspbian 10 «Buster»
Configuration pour utiliser la carte PiCAN2 : https://www.skptechnology.co.uk/pican2-software-installation/
Configuration additionnelle ((A COMPLETER AVEC L'HISTORY DU RPI))
- Installation python + lib. additionnelles (SSD1306, ADS1015)
- Installation candump
- Installation des outils du projet (scripts d'analyse r-net, client joystick, serveur r-net)
Fournir une image du système sur carte SD ??
Captation
Un aimant est fixé sur une housse de silicone portée en bout d'index. Le capteur est fixé sur le fauteuil par une tige articulée. Des légers mouvement du doigt, au dessus, sont relevés par le capteur magnétique et transmis au Raspberry Pi.
2 pistes différents sont suivies en parallèle pour la captation du mouvement
- un joystick magnétique composé uniquement d'un aimant et du capteur à effet Hall MLX90333
- un joystick «traditionnel» à faible force, le joystick dépalce un aimant au dessus du capteur à effet Hall MLX90333
Joystick magnétique
((CIRCUIT A COMPLETER)))
Moulage
Afin de créer un contrôleur adapté, moulage du doigt en plusieurs étapes. l'aimant est mixé sur le moulage.
La pâte utilisée pour le moulage est de type bi-composant, elle est travaillée directement sur le doigt et sèche en 5 minutes environ.
Pâte RTV 3535 vendue par Rougié & Plé : silicone RTV 3535 300G
Le joystick magnétique est fixé sur le fauteuil, sous la main gauche. Le «dé à coudre» qui intègre l'aimant est enfilé sur l'index, au-dessus du capteur.
Joystick faible force
Prototype modifié :
((AJOUTER FICHIERS .STEP + .STL))
Communication
Premiers tests avec un système Raspberry Pi + PiCAN2
Il est nécessaire d'identifier les trames R-net utilisées pour un fauteuil particulier, on ne peut pas présumer qu'il existe une même nomenclature utilisée par tous les fabricants....
Méthode pour analyser les trames r-net
En plusieurs étapes :
- fabrication d'un cable en Y venant s'intercaler entre le JSM et le distributeur R-net du fauteuil,
- mise en place du système de test (Raspberry Pi + PiCAN2 + cable en Y),
- branchement du cable en Y sur le bus CAN du fauteuil,
- une fois ce système connecté, on peut enregistrer les captures des trames échangées.
Fabrication du cable en Y
((AJOUTER SCHEMA))
Captures
Les captures de 15 secondes maximum, sont faites avec candump, important : nommer les fichiers en fonction de ce qu'on capture :
candump can0 -L > fichier.dmp #remplacer fichier.dmp par un nom explicite!
Dans l'ordre, nous avons effectué les captures suivantes, en envoyant chaque commande au moins 2 fois :
- capture à vide,
- capture en mode conduite sans activité,
- capture en mode conduite avant,
- capture en mode conduite arrière,
- capture en mode conduite droite,
- capture en mode conduite gauche,
- capture contact 1,
- capture contact 2,
- capture avec le JSM en mode tierce, à vide,
- capture avec le JSM en mode tierce, avant,
- capture avec le JSM en mode tierce, arrière,
- capture avec le JSM en mode tierce, droite,
- capture avec le JSM en mode tierce, gauche
- capture avec le JSM en mode tierce, test bouton MODE,
- capture avec le JSM en mode tierce, test bouton PROFILE,
- capture avec le JSM en mode tierce, test clignotant droit,
- capture avec le JSM en mode tierce, test clignotant gauche,
- capture avec le JSM en mode tierce, test vitesse FAST,
- capture avec le JSM en mode tierce, test vitesse SLOW.
Exemple d'un fichier de capture :
(1603287705.769805) can0 00E#250A000001100201 (1603287705.790874) can0 03C30F0F#87878787878787 (1603287705.819742) can0 00E#250A000001100201 (1603287705.843765) can0 140C0201#0000 (1603287705.844898) can0 1C300204#3D5B250078030000 (1603287705.869672) can0 00E#250A000001100201 (1603287705.876313) can0 0C140300#02 (1603287705.883663) can0 0C140200#C0 (1603287705.890744) can0 03C30F0F#87878787878787 (1603287705.911250) can0 0DE00501#000000 (1603287705.919616) can0 00E#250A000001100201 (1603287705.963705) can0 14300200#0000 (1603287705.969560) can0 00E#250A000001100201
La colonne 1 indique l'instant de capture de la trame.
La colonne 2 indique le bus CAN écouté.
La colonne 3 contient les données : deux nombres héxadécimaux séparés par un croisillon, le premier identifie le type de trame, le second définit le contenu transmis.
On obtient donc un dossier contenant tous ces fichiers de capture qu'il faut maintenant analyser
A toute fin utile : le dossier contenant toutes les captures de test : dump trames r-net
Analyse des captures
Une commande simple pour identifier toutes les trames différentes présentes dans un fichier dump :
awk ' { print $3 } ' fichier.dmp | sort -u
L'analyse complète des captures est faite avec un script python
((EN COURS / A COMPLETER))
Architecture logicielle sur le Raspberry Pi
Un serveur assure la communication sur le bus CAN du fauteuil en envoyant les trames r-net adaptées. Un second serveur assure l'affichage des informations sur l'écran OLED
Reliés aux capteurs, des clients (pour l'instant uniquement le client joystick) se connectent aux serveurs et transmettent les données. Les mêmes données sont transmises aux deux serveurs.
Système électronique
code client / serveur
((EN COURS / A COMPLETER))
Alimentation
L'alimentation du système électronique (Raspberry Pi et capteur) se fait à partir de la batterie du fauteuil (24V)
((EN COURS / A COMPLETER))
Raspberry Pi Read Only
Pour éviter qu'une coupure d'alimentation impromptue vienne endommager le système du Rpi sur carte SD, des modifications du système sont faites pour empêcher les écritures sur la carte µSD.
((EN COURS / A COMPLETER))
Composants utilisés
Capteur de positionnement MLX90333
datasheet du capteur angulaire MLX90333
Module équipé d'un circuit intégré MLX90333 de Melexis, avec la capacité de capter la position 3D d'un aimant (effet Hall). Ce circuit peut communiquer de différentes manières : analogique, PWM ou série SPI. Sur cette carte, il est configuré par défaut pour une double sortie analogique, et donne les valeurs alpha et beta (cf. point 14.1 de la page 19 de la datasheet). NB : Nous n'avons pas trouvé comment configurer ce capteur pour qu'il renvoie les données x,y,z sans utiliser de programmateur hardware et le logiciel propriétaire vendus par le fabricant (cf. datasheet).
carte PiCAN2
Carte additionnelle pour Raspberry Pi, fabriquée par SK Pang Electronics permettant de mettre en oeuvre un bus CAN (nécessite l'installation d'un driver sur le système du Raspberry Pi).
Documentation de la carte PiCAN2 (à télécharger sur le site de SK Pang Electronics)
écran OLED 0.96" avec contrôleur SSD1306
Module d'écran noir et blanc 128x64 pixels avec communication par I2C
datasheet du contrôleur SSD1306
tutoriel d'utilisation avec Raspberry Pi
convertisseur analogique-numérique 12bits ADS1015
Convertisseur analogique numérique à 4 entrées avec communication par I2C
datasheet du composant ADS1015
tutoriel d'utilisation avec Raspberry Pi
Annexe - lexique
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
Dump : enregistrement de données dans un fichier.
Effet Hall : https://fr.wikipedia.org/wiki/Effet_Hall
ISM (Intelligent Seating/lighting Module) : (module électronique d'un fauteuil) assise «intelligente» et éclairage.
JSM (Joystick Module) (module électronique d'un fauteuil) joystick d'assistance à l'arrière du fauteuil, prioritaire sur le contrôle du déplacement.
PM (Power Module) : (module électronique d'un fauteuil) bloc moteur, module d’alimentation (unité de commande)
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.
SPI (Serial Peripheral Interface) : Bus de communication série utilisé en électronique. «Les circuits communiquent selon un schéma maître-esclave, où le maître contrôle la communication. Plusieurs esclaves peuvent coexister sur un même bus, dans ce cas, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée « Slave Select (SS) ». https://fr.wikipedia.org/wiki/Serial_Peripheral_Interface
Idées pour la suite
Pendant les quelques jours du Fabrikarium, de nouvelles pistes ont émergé :
Pour la captation et le contrôle du déplacement :
- utiliser un capteur 9-DOF ? (accéléromètre/gyroscope/magnétomètre, chacun sur 3 axes)
- utiliser un mini-trackball ? ( https://shop.pimoroni.com/products/trackball-breakout )
- manipulation du joystick par le menton