Vous en rêviez ? Diagnosteo l’a fait…

Je parle bien du “Do It Yourself Cervical Range Of Motion Diagnosteometer” ou plus simplement d’un outil à mesurer la mobilité cervicale.

Hé oui car c’est bien beau de se persuader que nous sommes efficaces sur les cervicalgies mais apporte t-on une amélioration notable de mobilité aux cervicales de nos patients ? C’est un peu la base de notre philosophie non ? Apporter une amélioration de mobilité (ou capacité compensatoire) pour que les positions usuelles de nos patients leur soient plus confortables.

Donc en partant de ce principe il convient de pouvoir établir un bilan précis de la mobilité cervicale de nos patients en début de séance puis en fin et de voir si il y a augmentation de mobilité. De plus c’est comme au TAC-o-TAC, si le patient ne va pas mieux en fin de séance peut-être aura-t-il plus de mobilité ? Cela vous permettra d’avoir une chance supplémentaire pour justifier de l’efficacité de vos soins…

Donc dans l’article ci-dessous vous trouverez toutes les infos nécessaires pour vous fabriquer votre propre outil à mesurer la mobilité cervicale !

Parce que quand on regarde ce qu’il y a sur le marché ça file vraiment la honte… (voir ici ou ici ou ici).

J’avais déjà fait un prototype il y a 2 ans mais n’était pas vraiment convaincant par sa précision, j’ai donc repris la conception et le code pour ce second prototype.

Avertissement :

-n’étant pas informaticien, ni électronicien, ni… bref… ne vous attendez pas à du code de haut vol ! J’essaierai de l’améliorer au fur et à mesure, mais l’essentiel est que ça marche, et ça marche donc…

-Il est attendu à ce que vous ayez un minimum de connaissance sur arduino, car je ne vais pas non plus vous tenir la main pour l’installation des librairies etc…

Le but de l’outil

Le but de l’outil est le suivant : pouvoir mesurer la mobilité cervicale.

Pour cela on va devoir mesurer des angles selon 3 axes et garder/afficher les mesures les plus extrêmes trouvées.

Et comme j’aime bien le franglais je vais rester sur le l’anglais, on va donc chercher à mesurer le Pitch, le Roll, et le Yaw.

On utilise le capteur MPU6050 car c’est un capteur 6Dof, c’est à dire qu’il combine accéléromètre et gyroscope sur 3 axes.

L’accéléromètre mesure les accélérations et le gyroscope mesures les vitesses angulaires.

  • Grâce à l’accéléromètre on va pouvoir mesurer notamment l’accélération due à la gravité qui est de 1g. Ce qui permet de mesurer grâce à un peu de trigonométrie de pouvoir connaître l’inclinaison pour les pitch et roll. Cependant 2 problèmes surviennent :

-Il n’est pas possible de connaître la rotation sur l’axe z (yaw) car cette rotation tourne autour de l’axe vertical qui est l’axe de la gravité.

-Et deuxième problème l’accéléromètre a l’inconvénient d’être très sensible et émet pas mal de “bruit” qu’il faut parvenir à filtrer…

  • Le gyroscope lui permet de mesurer des vitesses angulaires, c’est à dire à quelle vitesse tourne le module mais pas le nombre de degrés qu’il a effectué. Du coup il faut intégrer les résultats pour obtenir l’angle de rotation 3 problèmes surviennent :

-Le gyroscope dérive, il a tendance a petit à petit à donner une valeur même si il ne bouge pas.

-L’intégration est une approximation car on estime une valeur constante de vitesse angulaire sur une plage de temps et la somme de ces intégrations crée des sommes d’approximation.

-Si le module n’est pas droit et ne fonctionne pas selon ses axes x, y, z et que l’on utilise les valeurs du gyroscope sans utiliser de filtre (magdwick, kalman…) alors il peut y avoir erreur de mesure.

Pour les mesures du Roll et Pitch on va pouvoir compenser les valeurs trouvées par l’accéléromètre avec celle du gyroscope, par contre cela ne sera pas possible pour les valeurs de yaw où il faudra se reposer entièrement sur les valeurs trouvées par le gyroscope.

La plateforme opensource Arduino :

Pour faire ce projet je me suis basé sur des microcontrôleurs Arduino. C’est en opensource et du coup il y a plein de gens super sympas qui partagent leurs codes ce qui permet à des gens comme moi (particulièrement incompétent) de faire des projets complètement délires en “hackant” des parties de leur code pour en faire notre sauce. D’où le fait que je partage le code et la conception de l’outil car il serait malvenu de ma part d’en garder jalousement la mauvaise recette…

Donc pour ce projet vous aurez besoin :

-Un fer à souder

Breadboard x1

Arduino nano v3 x1

-2 Leds (rouge et verte)

bouton interrupteur x 1

-un capteur gyroscopique/accéléromètre (mpu6050)

Un écran oled 128×64

-résistances 330 Ohms x 2 (1suffit ?) et résistance  4,7 kOhms x1

-d’une prise pour pile 9v

-un interrupteur à bascule

-Installer Arduino IDE

 

Branchements

Arduino : outil de mesure mobilité cervicale

 

1. Donc l’arduino au centre de votre breadboard

2. L’écran et le capteur vont utiliser le protocole de communication I2C et on préfèrera les alimenter en 3,3V. SDA vers la borne A4 et SCL vers la borne A5.

3. La Led+ verte est reliée à la borne D4 et mettez lui une résistance aux fesses (330 Ohms) et la led+ rouge à la borne D3 et aussi la même résistance aux fesses.

4. Le bouton interrupteur est relié à la borne D2 et reliez aussi cette borne en Pull down  avec une résistance de 4,7k Ohms vers la masse, l’autre branche du bouton vers le 5v

Ok facile, passons maintenant au code

Code

Vous devrez installer différentes librairies :

dont :

MPU6050 : pour le capteur 6 Dofs

U8glib : pour l’écran oled,

I2Cdev : pour gérer les protocoles I2C

1ère étape calibration de votre capteur mpu6050:

Lancer votre arduino IDE. Une fois que votre capteur MPU6050 est bien à l’horizontal, et ne bouge plus, téléversez d’abord le programme IMU_Zero que vous trouverez dans les exemples de MPU6050. Cela prends quelques minutes et vous aurez en fin des résultats “d’offsets”. Ces résultats notez-les, nous y reviendrons dans quelques instants.

2ème étape modifier le code du “diagnosteometer” :

Téléchargez le code du “diagnosteometer

-Trouvez la définition U8glib spécifique à votre oled et remplacez ma ligne : “U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);”

– modifier les offsets avec les résultats que vous avez obtenus grâce à IMU_zero et insérez les à cette ligne : “setMPU6050Offsets(-1717, 2071, 1281,-28 , 52, -23);”

Et c’est tout bon ! Vous pouvez téléverser le programme sur votre arduino !

Au bout de quelques secondes vous pourrez apercevoir un “niveau bulle” apparaître sur l’oled. Vous ne pourrez commencer les mesures qu’à partir du moment ou la bulle sera au centre. A ce moment la led rouge s’éteint et la  verte s’allume, vous pouvez alors cliquer sur le bouton interrupteur pour lancer l’enregistrement des mesures.

Bougez votre module et recliquez sur le bouton interrupteur pour finir les mesures. Elle défilent ensuite sur l’écran.

L’impression 3d

J’ai utilisé Tinkercad pour dessiner la boîte et la fixation gopro. Il y a 3-4 pièces : (cliquez sur les images pour les télécharger)

La fixation Gopro :

La boîte :

Et le couvercle :

Fixation pour la calibration :

Tout faire rentrer dans la boîte

Bon là je vous avoue j’ai un peu galéré. Il va falloir sortir le fer à souder, le pistolet à colle et la pince à dénuder. On rajoutera un interrupteur à bascule pour allumer éteindre l’outil sur le côté.

Oh quelle horreur ça a été ! Je pense que j’y ai passé 5-6h rien que pour cette partie… Voici un aperçu des entrailles de la bête, désolé mais vraiment pas le cœur à l’ouvrir complètement de peur qu’il y ait par la suite un mauvais contact…

Conclusion et recommandations

Je ne sais pas si beaucoup de collègues se lanceront dans le projet mais c’est vraiment intéressant et possible à faire pendant le confinement si Amazon vous livre ! :/

Pour fixer l’outil sur la tête du patient vous pouvez avoir recours à une sangle gopro pour la tête.

L’outil est assez précis. Préférez commencer les mesures par la rotation de la tête, puis flexion et ensuite flexion latérale.

Je revisiterai l’outil dans un futur proche en le miniaturisant et en améliorant la précision.

Et je m’améliorerai sur le coding promis !

Merci !