Projets:Myocoach v2

De wikilab
Myocoach v2

Photo principale myocoach.png

Informations
Description Le MyoCoach est un appareil de rééducation DIY permettant d'apprendre à utiliser des capteurs EMG (musculaires) de manière ludique.
Catégorie Motricité Membre supérieur
Etat d'avancement Réalisés
Techniques arduino, raspberry pi
Durée de fabrication de 0 à 2 h
Coût matériel De 50 à 100 euros
Niveau Facile
Licence by-sa
Date de création 2022-09-27
Équipe
Porteur de projet Bionico
Contributeurs Orthopus, Re-factory, Bionico, Mathis, ValentinMHK
Fabmanager Bionico, ValentinMHK
Référent documentation Bionico, ValentinMHK
Nom humanlab Humanlab_MHK
Documentation
Statut de la documentation Complète
Relecture de la documentation Non vérifiée

Description du projet

Le MyoCoach est une solution Do It Yourself de fabrication d'un appareil de rééducation fonctionnel permettant d'apprendre à utiliser des capteurs EMG (capteurs musculaires) de manière ludique. Ses fonctionnalités permettent de jouer à des jeux vidéos minimalistes à partir des contractions musculaires de l'avant-bras. Sur le plus long terme, il vise à se familiariser avec ces capteurs dans l’objectif d’utiliser une prothèse myoélectrique.

Cahier des charges

  • Facile à mettre en place (plug n play).
  • Facile à utiliser.
  • Diversité des jeux.
  • Open source.
  • Relativement abordable.
  • Limitation des interférences.

Analyse de l'existant et liens utiles

Il est déjà possible d’apprendre à utiliser et contrôler sa prothèse de main électrique chez un prothésiste. Cela reste cependant un exercice complexe qui nécessite de se déplacer (parfois loin) pour pratiquer avec le prothésiste.
Cet apprentissage se fait notamment avec l'outil MyoBoy commercialisé par Ottobock.
Il existe également le projet opensource Baah Box qui offre un choix d'application et de jeux intéressants.
L’entreprise Orthopus a développé le Myocoach, une solution pour utiliser sa prothèse chez soi, disponible en open source ici
Ce projet s’inscrit dans la continuité de celui d’Orthopus et vise à simplifier l’utilisation de l’outil notamment au niveau des branchements et des interférences. Le projet documenté ici est basé sur la version 1.0.1 du MyoCoach.

Matériel

Electronique

  • 1 Carte Raspberry Pi (3B+) et carte micro SD 16Go (1)
  • 1 Cable USB A vers microUSB (2)
  • 1 Carte Arduino Uno (3)
  • 1 Cable USB A vers USB B (4)
  • 2 Capteurs EMG avec prise jack 3,5mm (5)
  • 1 Batterie externe (2 ampères)

Hardware

  • 1 boîtier pour Arduino Uno (3)
  • 1 boîtier pour Raspberry Pi (1)
  • 4 vis 5mm x Ø2mm
  • 4 vis 10mm x Ø2mm
  • 1 Brassard (7)

Outils

  • Ordinateur personnel ou smartphone avec une interface réseau Wi-Fi

Fichiers source

https://github.com/orthopus/01-myocoach

Montage

Préparation des cartes électroniques

Installer la carte Raspberry Pi (1) dans son boitier.
Refermer le boitier et insérer la carte microSD dans l'emplacement prévu à cet effet.
Installer la carte Arduino Uno (3) dans son boitier en veillant à bien la clipser au fond de ce dernier.
Sécuriser la carte en place à l'aide des 4 vis 5mm x Ø2mm.
Installation carte arduino.jpg

Installer les 2 prises jack femelles dans les emplacements prévu à cet effet et les maintenir en place à l'aide des écrous de serrage.
Installation jacks.jpg Installation jacks écrous.jpg

Vérifier que le branchement sur la carte corresponde au schéma suivant.
Refermer le boitier et le maintenir en place à l'aide des 4 vis 10mm x Ø2mm.
Boitier fermé.jpg

Assemblage des éléments

Brancher la carte Arduino Uno (3) à la carte Raspberry Pi (1) à l'aide du câble USB A (3).
Brancher les 2 capteurs myoélectriques (5) à la carte Arduino (3) via les prises jacks.
Brancher la carte Raspberry Pi (1) à la batterie externe (6) à l'aide du câble microUSB (2).
Montage.jpg

Le Myocoach est allumé à partir du moment où il est branché.

Utilisation du Myocoach

Une fois le Myocoach assemblé et donc allumé, il apparait dans les réseaux wifi auquel on peut se connecter dans un délai de 30 secondes.
Se connecter au Myocoach en sélectionnant "myocoach" dans les réseaux disponibles.
Une fenêtre internet s'ouvre avec un portail de connexion.
Choisir "Continue" pour valider l'authentification.
Copier le lien fourni (http://app.myocoach.lan) et le coller dans un nouvel onglet (navigateur Chrome ou Firefox recommandé).
Fermer la fenêtre précédente.
L'appli Myocoach est dès lors lancée et les captations des capteurs myoélectriques apparaissent à l'écran.
Positionner les capteurs myoélectrique comme souhaité et les maintenir en place à l'aide du brassard (7).
Régler le gain du capteur à l'aide du potentiomètre situé sur la face supérieure du capteur jusqu'à obtenir l'intensité désirée.
Une fois la préparation terminée, choisir une activité parmi "Signal", "Training" et "Games" à l'aide du bandeau textuel en haut à gauche.


Etapes de fabrication

Matériel nécessaire

Electronique

  • 2 Prises jack femelle 3 pôles avec écrou de verrouillage
  • 2 Câbles jack mâle 3 pôles démontables
  • 4 Câbles Dupont mâle/mâle ou mâle/femelle (rouge, noir et 2 autre couleurs différentes)
  • 2 blocs de 3 pin header mâle/mâle
  • Câblerie (câble avec 3 fils, fils noir et rouge)
  • Gaine thermorétractable

Composants

  • 1 ordinateur personnel avec une interface réseau Wi-Fi (ou smartphone/tablette) avec un navigateur Web
  • 2 Capteurs musculaires de chez Orthopus
  • 1 carte Raspberry Pi (3B+)
  • 1 Carte micro SD ((16Go A1 minimum recommandé))
  • 1 carte Arduino Uno
  • 1 câble USB vers USB A

Outils et logiciels nécessaires

  • Tournevis plat et cruciforme
  • Pince à bec long
  • Cutter
  • Pince à dénuder
  • Pince coupante
  • Imprimante 3D (et consommable)
  • Fer a souder (et consommable)
  • Station à air chaud ou briquet
  • Interface de programmation Arduino (Arduino IDE)
  • Interface d’impression 3D (Cura)

Préparation des capteurs myoélectriques

Dans cette version du projet et dans un souci de facilité d’utilisation, les capteurs myoélectriques se branchent à l’aide de prises jack 3,5mm sur la carte Arduino.
Couper à la longueur souhaitée les 2 câbles qui relieront les capteurs à l’Arduino (25-30cm).
Dénuder les deux parties sur 2 cm et les fils individuellement sur 8mm.
Ajouter la gaine thermorétractable sur chaque fil.
Souder les fils sur la prise jack et les pin headers en respectant la polarité suivante.
Image circuit.
Chauffer la gaine thermorétractable au briquet ou à l’air chaud.
Refermer la prise jack.
Emmancher la gaine thermorétractable sur le câble, brancher le pin header sur la fiche du capteur.
Verrouiller l’ensemble en chauffant la gaine.
Préparation des prises jack.
Préparer les 4 fils dupont en coupant une extrémité de manière à garder une fiche mâle et dénuder la partie coupée.
Préparer 2 fils noirs et 2 fils rouges d’environ 5cmet dénuder les extrémités.
Emmancher de la gaine thermorétractable sur chacun des fils et souder l’ensemble en suivant le schéma de montage suivant.
Chauffer la gaine thermorétractable pour sécuriser l’ensemble.


Flash Raspberry Pi

Configuration du système d'exploitation

Téléchargez une image Raspberry Pi OS Lite disponible à l'adresse suivante depuis un poste de travail :
https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit Décompressez l'archive téléchargée pour obtenir le fichier image (extension de fichier .img).
Depuis un terminal, allez dans le répertoire où se trouve le fichier .img puis connectez une carte MicroSD sur le poste (16Go A1 minimum recommandé).
La carte MicroSD doit être démontée si elle a été montée automatiquement.
Lancez ensuite la commande suivante :
Remarque : Remplacez 2021-05-07-raspios-buster-armhf-lite par le nom de fichier .img réel.

~ > sudo dd bs=1m if=2021-05-07-raspios-buster-armhf-lite.img of=/dev/rdisk2

Éjectez la carte MicroSD de la fente SD de la station de travail, puis insérez-la dans la fente MicroSD du Raspberry Pi.
Connectez un écran, un clavier et un câble ethernet puis allumez la carte Raspberry Pi.
Attendez que le système soit prêt.
Une fois le système démarré, authentifiez-vous sur le terminal avec l'utilisateur "pi" (mot de passe : raspberry).

Accès SSH

Sur le Raspberry Pi, activez l'accès ssh pour autoriser la connexion à distance à partir d'un autre poste de travail.
Exécutez la commande suivante :

pi@raspberrypi : ~ $ sudo raspi-config

Sélectionnez l'option suivante sur l'interface utilisateur : 3 Options d'interface , P2 SSH puis sélectionnez Oui . Enfin, sélectionnez Terminer pour enregistrer la configuration et revenir à l'invite de commande.

Clavier

Il peut être nécessaire de configurer le type de clavier utilisé. Exécutez la commande suivante :

pi@raspberrypi : ~ $ sudo raspi-config

Sélectionnez l'option suivante sur l'interface utilisateur : 5 Options de localisation , Clavier L3 puis suivez les instructions pour configurer le clavier (par exemple : Logitech, Français-Français (ancien, alt.), La disposition par défaut du clavier, Pas de touche de composition) . Enfin, sélectionnez Terminer pour enregistrer la configuration et revenir à l'invite de commande.

Mot de passe Pi

Pour changer le mot de passe par défaut, exécutez la commande suivante :

pi@raspberrypi : ~ $ passwd

Tapez ensuite le mot de passe actuel, le nouveau mot de passe et enfin validez.

Installation des packages système

Pour installer un logiciel à partir d'Internet, il est nécessaire de câbler le Raspberry Pi à un routeur à l'aide de l'interface Ethernet. Pour ce faire, branchez un câble RJ45 sur le port Ethernet de la carte et connectez-le à un routeur disposant d'une connexion à Internet.
Avant d'installer de nouveaux composants, il peut être nécessaire d'obtenir la liste des packages à jour :

pi@raspberrypi : ~ $ sudo apt update

Ainsi que les packages installés par défaut :

pi@raspberrypi : ~ $ sudo apt upgrade

L'installation de MyoCoach nécessite plusieurs packages pour fonctionner correctement : Pip3, VirtualEnv, Flask, NodeJs, SQLite.
Ajoutez d'abord le dépôt nodesource apt afin de pouvoir obtenir les packages nodejs :

pi@raspberrypi : ~ $ curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -

Installez ensuite les packages :

pi@raspberrypi : ~ $ sudo apt install nodejs git python3-pip python3-flask sqlite3 virtualenv

Configuration de l'application

Obtenir le code d'application

Pour obtenir la dernière version du code source de l'application, maintenez la carte connectée à Internet via le port Ethernet et exécutez les commandes suivantes :

pi@raspberrypi : ~ clone $ git https://github.com/orthopus/01-myocoach.git
Récupérer les dépendances des applications

Sur le Raspberry Pi, rendez-vous dans le répertoire de la webapp MyoCoach :

pi@raspberrypi : ~ $ cd 01-myocoach/src/software/webapp/

Pour obtenir les packages Python, exécutez la commande suivante :

pi@raspberrypi : ~ /01-myocoach/src/software/webapp $ sudo pip3 install -r requirements.txt

Exécutez la commande suivante pour obtenir les dépendances nodejs :

pi@raspberrypi : ~ /01-myocoach/src/software/webapp $ installation npm
Variables d'environnement et compilation

Créez une copie du fichier .env.example nommé .env :

pi@raspberrypi : ~ /01-myocoach/src/software/webapp $ cp .env.example .env

Vérifiez ensuite son contenu et adaptez-le si nécessaire à l'aide d'un éditeur de texte :

pi@raspberrypi : ~ /01-myocoach/src/software/webapp $ nano .env .

.env

NODE_ENV=production
ENDPOINT=http://app.myocoach.lan

Puis lancez la compilation Webpack avec la commande suivante :

pi@raspberrypi : ~ /01-myocoach/src/software/webapp $ npx webpack --config webpack.prod.js

commande cd pour changedirectory

Mise en réseau

Nom d'hôte

Dans l'objectif de changer le nom d'hôte MyoCoach (actuellement raspberrypi), ouvrez l'interface des paramètres système avec les commandes suivantes :

pi@raspberrypi : ~ $ sudo raspi-config

Sur l'interface des paramètres système, sélectionnez 1 Options système , Nom d' hôte S4 puis OK . Tapez le nouveau nom "myocoach" . Sélectionnez Terminer pour enregistrer la configuration. Enfin, sélectionnez Oui pour redémarrer le système afin que les modifications prennent effet.

Le nom d'hôte du fichier hosts doit être actualisé pour enregistrer le nouveau nom d'hôte.

pi@myocoach:~ $ less /etc/hosts
hôte
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       myocoach
Configuration d'avahi

Ouvrez le fichier de configuration avahi afin que MyoCoach obtienne le nom "myocoach.lan" sur le réseau :

pi@myocoach:~ $ sudo nano /etc/avahi/avahi-daemon.conf

avahi-daemon.conf

...
[serveur]
host-name=myocoach
nom-de-domaine=lan
...

Redémarrez le service pour que les changements prennent effet avec les commandes suivantes :

pi@myocoach:~ $ sudo systemctl reload avahi-daemon
pi@myocoach:~ $ sudo systemctl restart avahi-daemon

Point d'accès - RaspAP

Pour activer le sans fil sur le Raspberry Pi, utilisez la commande suivante :

pi@myocoach:~ $ sudo rfkill unblock wlan
pi@myocoach:~ $ curl -sL https://install.raspap.com | bash

Puis suivez les instructions.

Une fois le Raspberry Pi redémarré, connectez-vous au réseau raspap-webui (psk : ChangeMe) avec la station de travail. Allez sur l'interface de gestion du point d'accès depuis la station de travail avec un navigateur web à l'adresse suivante 10.3.141.1. S'authentifier sur l'interface avec le nom d'utilisateur "admin" (mot de passe : secret) puis aller dans la section Authentification pour changer le mot de passe.

Portail captif

Le portail captif est géré par l'application Nodogsplash.

pi@myocoach:~ $ sudo apt-get install libmicrohttpd-dev
pi@myocoach:~ $ sudo mkdir /srv/nodogsplash
pi@myocoach:~ $ sudo chown pi /srv/nodogsplash
pi@myocoach:~ $ sudo chgrp pi /srv/nodogsplash
pi@myocoach:~ $ git clone https://github.com/nodogsplash/nodogsplash.git /srv/nodogsplash

Pour compiler Nodogsplash, exécutez les commandes suivantes :

pi@myocoach:~ $ cd /srv/nodogsplash
pi@myocoach:~ $ make
pi@myocoach:~ $ sudo make install
Ouvrez le fichier de configuration nodogsplash.conf :<br>

pi@myocoach:~ $ sudo nano /etc/nodogsplash/nodogsplash.conf

Modifiez les lignes suivantes :

GatewayInterface wlan0
GatewayAddress 10.3.141.1
RedirectURL http://10.3.141.1:2050/redirect.html

Dans l'objet FirewallRuleSet users-to-router, ajoutez la ligne suivante :

FirewallRule allow tcp port 5000

Sauvegardez et fermez le fichier.

Supprimer les fichiers html du portail captif par défaut de nodogsplash :

pi@myocoach:~ $ sudo rm -rf /etc/nodogsplash/htdocs.

Puis créer un lien vers les fichiers html du portail captif de myocoach :

pi@myocoach:~ $ sudo ln -s /home/pi/01-myocoach/src/software/captiveportal /etc/nodogsplash/htdocs.

Ouvrez le fichier de configuration dnsmasq.conf :

pi@myocoach:~ $ sudo nano /etc/dnsmasq.conf

Ajoutez ou modifiez la ligne suivante :

address=/#/10.3.141.1

Sauvegardez et fermez le fichier.

Copiez le fichier nodogsplash.service puis activez le démarrage au démarrage :

pi@myocoach:~ $ sudo cp /srv/nodogsplash/debian/nodogsplash.service /lib/systemd/system/
pi@myocoach:~ $ sudo systemctl enable nodogsplash.service

Activer le lancement au démarrage :

pi@myocoach:~ $ sudo systemctl enable dnsmasq.service

Enfin, redémarrez le système pour enregistrer les modifications.

Configuration de Lighttpd

Afin d'accéder à l'interface web de MyoCoach et à l'interface web de RaspAP, Lighttpd doit être configuré.

Tout d'abord, l'interface web RaspAP doit avoir un accès restreint au nom de sous-domaine raspap.myocoach.lan.

pi@myocoach:~ $ sudo nano /etc/lighttpd/conf-available/50-raspap-router.conf

50-raspap-router.conf

server.modules += ("mod_rewrite")

$HTTP["host"] == "raspap.myocoach.lan" {
  $HTTP["url"] =~ "^/( ?!(dist|app|ajax|config)).*" {
    url.rewrite-once = ("^/(.* ?)(\ ?.+)?$"=>"/index.php/$1$2" )
    server.error-handler-404 = "/index.php"
  }
}

Ensuite, créez un nouveau fichier pour déclarer l'hôte virtuel app.myocoach.lan.

pi@myocoach:~ $ sudo nano /etc/lighttpd/conf-available/40-myocoach.conf

40-myocoach.conf

server.modules += ("mod_proxy" )

# proxy myocoach
$HTTP["host"] == "app.myocoach.lan" {
  proxy.debug = 1
  proxy.server = ( """ => ( ("host" => "10.3.141.1", "port" => "5000" ) ) )
  proxy.header = ("upgrade" => "enabled" )
}

Ensuite, créez un lien pour activer ce nouvel hôte.

pi@myocoach:~ $ cd /etc/lighttpd/conf-enabled/
pi@myocoach:~ $ sudo ln -s ../conf-available/40-myocoach.conf

Enfin, redémarrez le service pour que les changements soient pris en compte.

pi@myocoach:~ $ sudo systemctl reload lighttpd
pi@myocoach:~ $ sudo systemctl restart lighttpd

Service MyoCoach

Créez un lien nommé myocoach dans le répertoire /srv vers le répertoire webapp :

pi@myocoach:~ $ sudo ln -s /home/pi/01-myocoach/src/software/webapp /srv/myocoach.

Créez un lien nommé ledbutton dans le répertoire /srv vers le répertoire ledbutton :

pi@myocoach:~ $ sudo ln -s /home/pi/01-myocoach/src/software/ledbutton /srv/ledbutton.

Créez le service systemd de MyoCoach :

pi@myocoach:~ $ cd /lib/systemd/system
pi@myocoach:/lib/systemd/system $ sudo nano myocoach.service
myocoach.service

[Unit]
Description= Controls myocoach webapp service
Requires= lighttpd.service
After= lighttpd.service

[Install]
WantedBy= multi-user.target

[Service]
Type= simple
User= root
WorkingDirectory= /srv/myocoach/app
ExecStart= /bin/python3 ./app.py
ExecStartPost= /bin/bash /srv/ledbutton/set_led_color.sh 0 0 255 0
ExecStop= /bin/kill -2 $MAINPID
ExecStopPost= /bin/bash /srv/ledbutton/set_led_color.sh 255 255 255 0

Pour démarrer le service, exécutez la commande suivante :

pi@myocoah:~ $ sudo systemctl start myocoach.service

Pour activer le service au démarrage du système, exécutez la commande suivante :

pi@myocoah:~ $ sudo systemctl enable myocoach.service

L'interface web MyoCoach est maintenant accessible à l'adresse suivante : http://app.myocoach.lan

Et l'interface web RaspAP est maintenant accessible à l'adresse suivante : http://raspap.myocoach.lan

Flash Arduino Uno

Connecter la carte Arduino Uno à l’ordinateur
Choisir le type de carte Arduino : Uno
Sélectionner le port COM
Copier le code suivant

 void setup() {
  Serial.begin(9600); // Starts the serial communication
}
void loop() 
{
  
  int sensorValue1 = analogRead(A0);
  int sensorValue2 = analogRead(A1);
  
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float e1 = map(sensorValue1,0,1023,0,255);
  float e2 = map(sensorValue2,0,1023,0,255);
  byte data = Serial.read();
  if(data == 's')
  {
    Serial.print(e1);
    Serial.print(":");
    Serial.print(e2); 
    Serial.println();
  }
  delay(10);
} 


Téléverser le code à l’aide du bouton Image du bouton