Skip to main content

Projet Final - Rééducation Ludique

FlexMouv - Dispositif Robotisé de Rééducation des Membres Supérieurs

Équipe projet
  •  ATASHIAN Irine

  •  BAIG Seema

  •  Wang Elisa 

FlexMouv est un dispositif robotisé conçu dans le cadre de l'UE MU5MN045. 

Il vise à accompagner la rééducation des membres supérieurs, poignet, avant‑bras, coude et bras, grâce à un système interactif où le patient pilote un petit véhicule via une télécommande.
Le mouvement du véhicule dans un parcours dédié sollicite différents axes de mobilité, permettant une rééducation progressive, ludique, sécurisée et accessible.

1 - Contexte

La rééducation des membres supérieurs est essentielle pour les patients souffrant de :

  • Arthrose (dégradation articulaire limitant les amplitudes)

  • Polyarthrite rhumatoïde (inflammation chronique des articulations)

  • Tendinites chroniques (épicondylite, tendinite du poignet)

  • Séquelles d’AVC (perte de mobilité fine)

  • Traumatismes (fractures, entorses, immobilisation prolongée)

  • Maladies neuromusculaires (Parkinson, myopathies)

Les dispositifs actuels sont souvent :

  • coûteux,

  • peu ludiques,

  • non modulables,

  • ou nécessitent une supervision constante.

FlexMouv répond à ces limites en proposant un système robotisé simple, motivant et adaptable.

Réflexion sur la problématique & veille sur l’existant

La rééducation du membre supérieur repose sur un ensemble d’exercices destinés à restaurer la mobilité, la force et la coordination après une pathologie ou un traumatisme. Pourtant, malgré l’importance de ces séances, de nombreux patients peinent à maintenir une pratique régulière : les exercices sont souvent répétitifs, peu stimulants, et parfois douloureux. Cette réalité crée un véritable enjeu pour les kinésithérapeutes, qui cherchent des outils capables de soutenir l’engagement du patient tout en garantissant une progression sécurisée.

Dans ce contexte, nous avons étudié différents dispositifs existants afin de comprendre leurs apports, leurs limites et les raisons pour lesquelles un système comme FlexMouv peut trouver sa place.

a) Les exosquelettes et dispositifs robotisés lourds

Les exosquelettes de rééducation (Armeo®, HAL®, ReWalk®, etc.) représentent aujourd’hui l’une des solutions les plus avancées technologiquement. Ils permettent un accompagnement motorisé très précis, une mesure fine des mouvements et une adaptation au niveau du patient. Cependant, ces systèmes présentent plusieurs limites majeures :

  • un coût très élevé, très coûtant pour la majorité des cabinets ou structures de petite taille ;

  • une installation complexe, nécessitant du personnel formé ;

  • une utilisation fatigante pour certains patients, notamment les personnes âgées ;

  • une faible dimension ludique, alors que la motivation est un facteur clé de réussite.

 

image.png  Dispositif Armeo

Ces dispositifs sont donc performants, mais peu adaptés à une utilisation simple, régulière et accessible. FlexMouv se positionne volontairement à l’opposé : un outil léger, peu coûteux, facile à mettre en place et utilisable dans des séances courtes.

b) Les dispositifs mécaniques traditionnels

Les outils classiques de rééducation — roues de mobilisation, poignées, balles, élastiques, tables de mobilisation — sont largement utilisés car ils sont simples, robustes et économiques. Ils permettent de travailler efficacement certaines amplitudes, mais ils souffrent de plusieurs limites :

  • des exercices souvent répétitifs et monotones, qui réduisent l’adhésion du patient ;

  • une mobilisation parfois trop ciblée, ne sollicitant pas la coordination globale bras‑main ;

  • une absence de retour ludique, ce qui peut décourager les patients souffrant de douleurs chroniques.

FlexMouv apporte ici une réponse intéressante : il transforme un exercice mécanique en une activité engageante, où le patient se concentre sur un objectif (piloter un véhicule) plutôt que sur la douleur ou la difficulté du mouvement.

c) Les jeux thérapeutiques et dispositifs ludiques

Ces dernières années, plusieurs approches ludiques ont émergé : jeux vidéo adaptés, réalité virtuelle, parcours moteurs, plateformes interactives. Elles ont démontré leur capacité à augmenter la motivation et la répétition des mouvements, deux éléments essentiels en rééducation.

Cependant, ces solutions présentent elles aussi des limites :

  • un coût matériel important (casques VR, consoles, capteurs) ;

  • des mouvements parfois trop globaux, peu adaptés à un travail fin du poignet ou de l’avant‑bras ;

  • une complexité d’installation dans un cabinet de kinésithérapie classique ;

  • une fatigue visuelle ou cognitive pour certains patients.

FlexMouv reprend l’idée de jeu , mais dans une version beaucoup plus simple, accessible et centrée sur les articulations du membre supérieur.

4. Le modèle de référence étudié

Le dispositif présenté dans la vidéo de référence (https://www.youtube.com/watch?v=Pz2hE__z57c) propose un concept intéressant : un petit véhicule piloté par le patient, évoluant dans un parcours. Ce modèle met en avant :

  • la dimension ludique,

  • la mobilisation naturelle du bras,

  • la possibilité de varier les parcours.

Cependant, il reste limité sur plusieurs aspects :

  • la télécommande n’est pas pensée pour la rééducation du poignet ;

  • les mouvements sollicités sont peu variés ;

  • la difficulté n’est pas modulable ;

  • aucun capteur ne permet de suivre la posture ou l’inclinaison.

FlexMouv reprend cette idée, mais l’adapte à un cadre thérapeutique : télécommande ergonomique, parcours modulable, sollicitation de plusieurs articulations, possibilité d’intégrer des capteurs, et approche plus sécurisée.

Conclusion de la veille

L’analyse des dispositifs existants montre un paysage contrasté : d’un côté, des solutions très avancées mais coûteuses et complexes ; de l’autre, des outils simples mais peu engageants. FlexMouv se situe volontairement entre ces deux extrêmes. Il propose :

  • une solution accessible,

  • simple à utiliser,

  • ludique,

  • adaptée à différents profils de patients,

  • et capable de solliciter plusieurs articulations du membre supérieur.

C’est précisément cette combinaison de simplicité et d'efficacité qui fait l’originalité et la pertinence du projet.

2 - Concept du dispositif 

Le dispositif repose sur un principe simple : le patient tient une télécommande et dirige un petit véhicule dans un parcours, ce qui l’amène à mobiliser différentes articulations selon les mouvements nécessaires. 

PHOTO TYPE à AJOUTER

Objectifs principaux :
  • améliorer la mobilité du poignet (flexion, extension, pronation, supination)

  • renforcer les muscles de l’avant‑bras

  • encourager la coordination bras‑main

  • proposer une rééducation progressive et sécurisée

  • offrir un appareil peu coûteux, robuste et accessible

Inspirations

Le concept s’inspire de dispositifs ludiques de rééducation, notamment le modèle présenté dans la vidéo suivante : https://www.youtube.com/watch?v=Pz2hE__z57c . Nous reprenons l’idée du parcours et du contrôle manuel, mais en l’intégrant dans un système robotisé plus complet.

Définition du projet :  la conception de FlexMouv part d’un constat simple : la rééducation du membre supérieur nécessite des exercices réguliers, variés et adaptés, mais les outils disponibles sont souvent soit trop basiques, soit trop coûteux, soit trop peu engageants pour maintenir la motivation du patient. Notre projet vise donc à proposer un dispositif robotisé accessible, ludique et suffisamment polyvalent pour être utilisé dans différents contextes thérapeutiques.

Besoins utilisateurs :

a) Les patients en rééducation (atteints d’arthrose, de tendinites, de séquelles d’AVC ou de maladies neuromusculaires) ont besoin :

  • d’un outil simple à prendre en main, même en cas de faiblesse musculaire ;

  • d’exercices progressifs, qui respectent leurs limites ;

  • d’un dispositif motivant, qui détourne l’attention de la douleur ;

  • d’un environnement sécurisé, sans risque de chute ou de surcharge articulaire.

b) Kinésithérapeutes, les professionnels recherchent : 

  • un outil polyvalent, capable de solliciter plusieurs articulations ;

  • un dispositif rapide à installer, utilisable en séance courte ;

  • un support permettant d’observer la qualité du mouvement (fluidité, amplitude, précision) ;

  • un matériel fiable et robuste, facile à intégrer dans une séance classique.

c) Centres de rééducation --> les structures ont besoin :

  • d’un dispositif peu coûteux, compatible avec des budgets limités ;

  • d’un matériel transportable, utilisable dans différentes salles ;

  • d’un système modulable, adaptable à différents profils de patients ;

  • d’un outil sans maintenance complexe, contrairement aux exosquelettes ou systèmes motorisés lourds.

 

3 - Description 

  • Base stable accueillant le parcours

  • Véhicule robotisé compact

  • Télécommande ergonomique

Le dispositif permet de travailler :

Articulation Mouvement sollicité
Poignet Flexion / extension
Poignet Pronation / supination
Coude Flexion
Épaule Élévation du bras
Avant‑bras Travail des tendons et muscles stabilisateurs

Choix techniques :

Composant Choix retenu Justification
Microcontrôleur télécommande Adafruit Feather ESP32-S2 Compact, WiFi intégré, compatible accéléromètre Grove
Microcontrôleur robot Arduino Uno Compatible direct avec le shield moteur, fiable
Accéléromètre Grove ADXL345 ±16g Interface I2C simple, plage suffisante, librairie disponible
Communication sans fil nRF24L01+ GT020 Portée 50m, faible coût, simple d'utilisation, Fréquence 2.4GHz
Driver moteur DFRobot DRI0009 (puce L298P) Emboîtement direct sur l'Uno, pas de câblage complexe
Châssis DG007 Compact, 2 roues motrices + roue libre, stable
Parcours Découpe laser MDF 3mm + Impression 3D PLA Modulaire, rapide à modifier, léger
Support main Impression 3D PLA + Gant  Forme ergonomique personnalisable

Contraintes Techniques

  • sécurité du patient

  • ergonomie de la prise en main

  • résistance mécanique

  • coût réduit

  • facilité de nettoyage

  • modularité du parcours

MANQUE ICI : Croquis & dimensions

➡️ À ajouter :

  • Croquis du véhicule

  • Croquis de la télécommande

  • Dimensions du parcours

  • Dimensions du châssis

  • Dimensions du support de bras (si présent)

MANQUE ICI : Liste du matériel sous forme de tableau

MANQUE ICI : Fichiers de conception & captures d’écran

➡️ À ajouter :

  • Fichiers STL / DXF / Arduino

  • Captures d’écran de la CAO

  • Étapes de création (CAO → impression → assemblage)

4 - Cas d'usage

Mme L., 62 ans, est suivie en kinésithérapie pour une arthrose sévère du poignet droit, aggravée par plusieurs années de douleurs chroniques et une perte progressive de mobilité. Elle présente :

  • raideur matinale importante

  • douleur à la flexion et à l’extension

  • faiblesse musculaire de l’avant‑bras

  • difficulté à effectuer des gestes du quotidien (ouvrir un bocal, tourner une clé, porter un sac)

Son kinésithérapeute souhaite introduire un outil ludique, progressif et sécurisé pour compléter les exercices classiques.

5 - Scénario d'utilisation 

  • La patiente s’installe. 

  • Le kiné choisit un parcours simple, avec quelques virages et une petite rampe.
  • Elle saisit la télécommande, et dirige le véhicule : 
    • tourner → pronation / supination

    • avancer → extension du bras

    • franchir un obstacle → flexion du poignet

  • Pour une séance de 20 min, 5 min de jeu sont suffisants. 
  • Le thérapeute observe la fluidité, l’amplitude et la précision des mouvements. 
  • Le patient repose la télécommande à la fin de l'exercice. 

6. Analyse du modèle de référence

Le modèle de la vidéo propose un parcours simple avec un véhicule contrôlé manuellement. Nous reprenons :

  • l’aspect ludique

  • la stimulation motrice par le pilotage

  • la modularité du parcours

Nous améliorons :

  • l’ergonomie de la télécommande

  • la variété des mouvements sollicités

  • la possibilité d’adapter la difficulté

  • la sécurité et la stabilité du bras

Gestion de projet

MVP (Minimum Viable Product) : Le robot avance, recule et tourne en réponse à l'inclinaison de la main, via communication sans fil, même sans boîtier final ni parcours.

Répartition des rôles :

Membre Rôle principal
Elisa Wang Électronique & code
Irine Atashian Modélisation 3D
Seema Baig Découpe laser


Planning :

Semaine Tâche Responsable
S1 Assemblage châssis Tous
S2 Test accéléromètre + lecture données Elisa
S2 Test moteurs Elisa
S3 Code communication sans fil émetteur Elisa
S3 Code communication sans fil récepteur Elisa
S3 Modélisation 3D support main Irine
S3 Fichiers découpe laser parcours Seema
S4 Impression 3D + découpe laser Irine +Seema
S4 Intégration complète + tests Tous
S5 Documentation + photos/vidéos Tous

Liste du matériel avec coût :

Composant Quantité Rôle Coût estimé
Adafruit Feather ESP32-S2 1 Microcontrôleur télécommande ~20€
Arduino Uno 1 Microcontrôleur robot ~10€
Grove ADXL345 ±16g 1 Accéléromètre (détection inclinaison) ~8€
Module nRF24L01+ GT020 2 Communication sans fil 2.4GHz ~3€ x2
DFRobot DRI0009 Shield 1 Driver moteur ~10€
Châssis DG007 1 Base mobile du robot ~10€
Moteurs DC 2 Propulsion inclus châssis
Batterie externe USB 1 Alimentation Arduino ~10€
Batterie LiPo 3.7V 1 Alimentation Feather ~5€
Piles AA x4 4 Alimentation moteurs ~2€
MDF 3mm ~30x60cm Parcours découpe laser ~3€
Filament PLA ~50g Support main (3D) ~2€
Fils Dupont ~20 Connexions ~1€
TOTAL     ~87€

Test, essais et erreurs

Montage

image.png

image.png


Code

Récepteur 


#include <SPI.h>
#include <RF24.h>

RF24 radio(9, 10);
const byte address[6] = "00001";

#define E1 5
#define M1 4
#define E2 6
#define M2 7

String lastCommand = "";

void stopAll() {
  analogWrite(E1, 0); analogWrite(E2, 0);
  digitalWrite(M1, LOW); digitalWrite(M2, LOW);
}
void avance() {
  digitalWrite(M1, LOW);  digitalWrite(M2, LOW);
  analogWrite(E1, 200); analogWrite(E2, 205);
}
void recule() {
  digitalWrite(M1, HIGH); digitalWrite(M2, HIGH);
  analogWrite(E1, 200); analogWrite(E2, 205);
}
void tourne_droite() {
  digitalWrite(M1, LOW);  digitalWrite(M2, HIGH);
  analogWrite(E1, 130); analogWrite(E2, 130);
}
void tourne_gauche() {
  digitalWrite(M1, HIGH); digitalWrite(M2, LOW);
  analogWrite(E1, 130); analogWrite(E2, 130);
}

void setup() {
  Serial.begin(9600);
  pinMode(E1, OUTPUT); pinMode(M1, OUTPUT);
  pinMode(E2, OUTPUT); pinMode(M2, OUTPUT);
  stopAll();
// Tentatives multiples de démarrage
  int tentatives = 0;
  while (!radio.begin()) {
    Serial.println("Tentative " + String(++tentatives) + "...");
    delay(500);
    if (tentatives > 10) {
      Serial.println("❌ nRF24L01 non détecté !");
      while(1);
    }
  }

  radio.setChannel(108);
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening();
  Serial.println("✅ Récepteur nRF24 prêt !");
}

void loop() {
  if (radio.available()) {
    char msg[10] = "";
    radio.read(&msg, sizeof(msg));
    String cmd = String(msg);
    cmd.trim();
    if (cmd.length() == 0) return; 
    if (cmd != lastCommand) {
      Serial.println("← Reçu : " + cmd);
      if      (cmd == "AVANCE") avance();
      else if (cmd == "RECULE") recule();
      else if (cmd == "DROITE") tourne_droite();
      else if (cmd == "GAUCHE") tourne_gauche();
      else if (cmd == "STOP")   stopAll();
      lastCommand = cmd;
    }
  }
}

Emetteur 

#include <SPI.h>
#include <RF24.h>
#include <Wire.h>
#include <ADXL345.h>

#define PIN_I2C_POWER 6
RF24 radio(9, 10);
const byte address[6] = "00001";

ADXL345 adxl;
#define SEUIL    0.25
#define DEADZONE 0.10
#define NB_SAMPLES 8
float ax_buf[NB_SAMPLES] = {0};
float ay_buf[NB_SAMPLES] = {0};
float ax_offset = 0;
float ay_offset = 0;
int buf_index = 0;
String lastCommand = "";

float moyenne(float* buf) {
  float sum = 0;
  for (int i = 0; i < NB_SAMPLES; i++) sum += buf[i];
  return sum / NB_SAMPLES;
}

String getCommand(float ax, float ay) {
  if (abs(ax) < DEADZONE && abs(ay) < DEADZONE) return "STOP";
  if (abs(ax) >= abs(ay)) {
    if (ax < -SEUIL) return "AVANCE";
    if (ax >  SEUIL) return "RECULE";
  } else {
    if (ay >  SEUIL) return "DROITE";
    if (ay < -SEUIL) return "GAUCHE";
  }
  return "STOP";
}

void setup() {
  Serial.begin(115200);
  pinMode(PIN_I2C_POWER, OUTPUT);
  digitalWrite(PIN_I2C_POWER, HIGH);
  delay(300);
  Wire.begin();
  adxl.powerOn();
  adxl.setRangeSetting(4);
  adxl.setSpiBit(0);
  if (!radio.begin()) {
    Serial.println("❌ nRF24L01 non détecté !");
    while(1);
  }
  radio.setChannel(108);
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_LOW);
  radio.stopListening();
  Serial.println("✅ Émetteur nRF24 prêt !");
  // Calibration : moyenne sur 50 échantillons au repos
  Serial.println("Calibration en cours, ne bougez pas...");
  float sum_x = 0, sum_y = 0;
  for (int i = 0; i < 50; i++) {
    double xyz[3];
    adxl.getAcceleration(xyz);
    sum_x += (float)xyz[0];
    sum_y += (float)xyz[1];
    delay(20);
  }
  ax_offset = sum_x / 50.0;
  ay_offset = sum_y / 50.0;
  Serial.print("Offset ax="); Serial.print(ax_offset);
  Serial.print(" ay="); Serial.println(ay_offset);
  Serial.println("✅ Calibration terminée !");
}

void loop() {
  double xyz[3];
  adxl.getAcceleration(xyz);
  ax_buf[buf_index] = (float)xyz[0] - ax_offset;
  ay_buf[buf_index] = (float)xyz[1] - ay_offset;
  float ax = moyenne(ax_buf);
  float ay = moyenne(ay_buf);
  String cmd = getCommand(ax, ay);
  if (cmd != lastCommand) {
    char msg[10];
    memset(msg, 0, sizeof(msg));
    cmd.toCharArray(msg, sizeof(msg));
    bool ok = radio.write(msg, sizeof(msg));
    Serial.println("→ Envoyé : " + cmd + (ok ? " ✅" : " ❌"));
    lastCommand = cmd;
  }
  delay(20);
}

Photos / Vidéos des tests

image.pngimage.png

Problèmes rencontrés et solutions apportées :

Problème 1 - ESP32-S2 défectueux (port I2C inutilisable)

Lors des premiers tests, le scanner I2C ne détectait pas l'accéléromètre ADXL345 malgré un câblage correct. Après de nombreux essais de pins et de configurations, nous avons remplacé la carte par un autre Feather ESP32-S2, à ce moment là, l'accéléromètre a été immédiatement détecté. La première carte avait le port I2C interne défaillant (une branche du port I2C manquait).

Problème 2 - Bluetooth inexistant sur l'ESP32-S2

Notre première approche utilisait deux Feather ESP32-S2, un pour l'émetteur et un pour le récepteur, avec une communication Bluetooth. Nous avons découvert que l'ESP32-S2 ne dispose d'aucun Bluetooth (ni Classic ni BLE). Nous avons d'abord basculé sur WiFi UDP entre les deux ESP32-S2, solution qui fonctionnait correctement. Cependant, l'ESP32-S2 prévu pour le récepteur s'est révélé incompatible avec le shield DFRobot L298P, même après de nombreuses tentatives, les moteurs ne répondaient pas. Nous avons donc remplacé l'ESP32-S2 récepteur par un Arduino Uno sur lequel le shield s'emboîte directement, et adopté 2 nRF24L01 pour la communication sans fil entre les deux cartes.

Problème 3 - nRF24L01 instable au démarrage

Le module nRF24L01 n'était pas détecté de façon fiable au reset. Cause : le 3.3V de l'Arduino Uno ne fournit pas assez de courant lors des pics de démarrage. Solution logicielle : tentatives multiples de connexion avec délai.

Problème 4 - Valeurs accéléromètre incorrectes au repos

L'accéléromètre présentait un offset (ax = -0.35 au repos au lieu de 0). Solution : calibration automatique au démarrage sur 50 échantillons, calcul d'offset soustrait en temps réel.

Problème 7 - Défauts matériels

Au cours du projet, plusieurs problèmes matériels ont été rencontrés. Un fil de moteur soudé en usine s'est décroché lors des manipulations, interrompant l'alimentation d'un moteur. En l'absence de fer à souder disponible immédiatement, nous avons opté pour une solution temporaire en maintenant le fil en contact avec le connecteur via un fil Dupont. Solution fragile et soudure propre nécessaire pour la version finale.

🔶 MANQUE ICI : Tests, essais, erreurs

  • Photos/vidéos des tests

  • Problèmes rencontrés

  • Solutions apportées

  • Analyse des performances du prototype


🔶 MANQUE ICI : Photos/vidéos du prototype

➡️ Prototype en cours ? ➡️ Photos à insérer.


🔶 MANQUE ICI : Objet final

➡️ Photos finales ➡️ Analyse du résultat ➡️ Respect du cahier des charges


🔶 MANQUE ICI : Pistes d’amélioration

➡️ Exemples :

  • Ajout de capteurs

  • Application mobile

  • Parcours gamifiés

  • Retour haptique

 

 

Sources & ressources

➡️ Tutoriels Arduino ➡️ Documentation NRF24L01 ➡️ Ressources FabLab ➡️ Articles scientifiques