1. Introduction

Vous est-il déjà arrivé durant votre session d'abdominaux d'être trop emporté dans votre playlist musicale ou en pleine discussion, et d'en oublier de compter vos abdos? Rassurez-vous : grâce au décompteur d'abdominaux, vous pourrez vous permettre d'être dans la lune car celui-ci se charge, à partir d'un certain nombre d'abdominaux de départ (XX) de décompter et de vous prévenir quand vous êtes à 0, et ainsi vous assurer du nombre de crunches que vous faites. L'idée est de tenir le décompteur contre soi le temps de l'exercice. Il faut faire attention de bien avoir les fils contre la poitrine car c'est l'accéléromètre sur le décompteur qui détermine que l'abdo a bien été fait ; il lit le mouvement et valide ou non l'abdo, selon qu'on se soit assez relevé ou non. Puis le décompteur retranche l'abdo fait jusqu'à 0. Pour recommencer, il suffit d'appuyer sur le petit bouton reset. Il n'y a pas d'autre indicateur qu'un message de félicitations à la fin de l'exercice et pour cause : le but n'est pas que vous soyez complètement désintéressé de l'exercice que vous êtes en train de faire, mais plutôt que vous puissiez vous permettre de perdre le fil du comptage sans devoir recommencer la session.

2. Matériel et méthodes

2.1. Matériel

  • Kit Arduino UNO avec
    • Arduino UNO
    • au moins 22 câbles de couleur
    • un câble USB pour relier l'appareil à l'ordinateur
    • l'application Arduino IDE (ici, la version 1.0.6 mais cela dépend de la version de l'ordinateur utilisé)
  • Un bouton
  • Accéléromètre SparkFun MPU-9150
  • Un écran LCD

2.2 - Méthode

2.2.1Assemblage

Tout d'abord, commencer par faire les branchages de l'écran LCD en s'aidant du schéma1 (1) ci-dessous :

Contrairement au schéma, le potentiometer (le bouton bleu qui sert à régler la luminosité de l'écran) a été déplacé afin de laisser la place à l'accéléromètre. Par conséquent, les fils rouge/bleu/noir en e - 6/7/8, ont été acheminés en places e – 27/28/29.

Nous aurons besoin d'un bouton Start qui indique au décompteur qu'il peut commencer à compter et d'un bouton Reset qui permet de recommencer la série d'abdos. Le bouton Reset étant déjà sur le Arduino, il n'y a plus qu'à ajouter le bouton Start''. Suivre le schéma2 (1) ci-dessous :

Agréger l'accéléromètre à l'Arduino. L'idée initiale était d'avoir l'accéléromètre sur soi pendant l'exercice, mais étant donné qu'il aurait fallu qu'il soit branché à l'appareil à l'aide d'un câble, cela posait un problème pratique : en cas de geste brusque durant la manoeuvre abdominal, il y a risque de détachement inintentionnel d'un ou de plusieurs fils. Finalement, l'accéléromètre étant directement sur le décompteur, cela permet à celui qui utilise l'appareil de tenir simplement la plaquette Arduino contre lui et de laisser l'accéléromètre mesurer l'angle dans lequel il est. (Voir le calcul de l'angle au point 2.2.2) Pour ce faire, suivre le schéma3 (2) ci-dessous

2.2.2 - Codage

Obtenir les codes

ÉCRAN LCD

  • Pour trouver l'exemple de code, ouvrir l'application Arduino IDE > Fichier > Exemples > SIK Guide > Circuit #15
  • Il est possible que l'exemple SIK Guide n'existe pas sur les anciennes versions de l'application Arduino IDE (c'est notamment le cas sur la version 1.0.6) ; à ce moment-là, cliquer sur le lien suivant : https://github.com/sparkfun/SIK-Gui.../Circuit_15.ino et copier-coller les exemples de code par exemple dans un nouveau document Codes LCD
MPU-9150
  1. Sur la page MPU-9150 du site sparkfun.com, aller sur Example code
  2. Cliquer sur MPU-9150_Breakout / firmware > Clone or Download > Download zip
  3. Désarchiver le fichier, ouvrir le dossier Breakout_Master > firmware > Copier les dossier I2C dev et MPU 6050 dans Document > Arduino > librairies

(Comment ça MPU 6050 ? Et bien il se trouve que je n'ai pas trouvé de manoeuvres correspondantes pour le 9150 à tout ce qui vient d'être fait, je n'avais à vrai dire même pas remarqué que ce n'était plus au modèle 9150 que je me référais. Cependant, il ne semble pas que ce soit un souci puisque « The original library came from i2cdevlib.com and was based on the very similar MPU-6050, which only used an accelerometer and gyro » (https://github.com/sparkfun/MPU-915...) et il s'agit précisément et uniquement de la fonction accéléromètre dont j'ai besoin.)

Coder
  1. Exécuter l'application Arduino IDE
  2. Dans la barre d'état, cliquer sur Ouvrir Documents > Arduino > libraries > MPU6050 > Examples > MPU9150_raw > MPU9150_raw.ino (Vos yeux avisés auront remarqué que le fichier s'appelle 9150, c'est donc bien le bon fichier qui a été téléchargé)
  3. Une nouvelle fenêtre Arduino s'affiche avec les codes pour l'accéléromètre. Après avoir pris connaissance des licences, effacer le texte en gris clair jusqu'à la ligne formé par des égaux === car tout ceci ne servira à rien dans le codage. Copier les codes du document précédemment créé Codes LCD et les coller avant le signe */.

Pour des raisons de praticité, je vous conseille d'avoir deux fenêtres Arduino ouvertes : celles avec tous les codes qu'on vient de copier, qu'on appellera Codes.ino et celle avec les codes finaux, ceux qui seront télécharger dans la Arduino, qu'on appellera ProjetH.ino. De cette manière, il sera possible d'avoir les codes à portée de main tout en testant petit à petit dans le doc ProjetH.ino.

  1. Ici, il va surtout s'agir de copier les différents codes initiaux et de garder ceux qui nous intéressent.

Commencer par indiquer toutes les valeurs qui vont nous être utiles, afin que celles-ci soient compris par void setup et void loop. Le but est que :

  • quand l'appareil est mis en marche, l'écran affiche Start ? pour inviter à commencer l'exercice
  • lorsque j'appuie sur le bouton Start, le nombre d'abdos à faire, soit 30, apparaît
  • lorsque l'accéléromètre (donc la plaquette entière) détecte qu'il y a eu montée puis descente, l'écran retire 1 au numéro inscrit lorsque l'accéléromètre est en bas, et ce jusqu'à 1

pour le dernier abdo, au lieu d'écrire 0, l'écran affiche Congrats !

  • enfin, lorsque j'appuie sur le bouton RESET, l'écran affiche à nouveau Start ?, et ainsi je peux continuer ma session de workout.

Avant tout, inscrire les codes suivants :

#include <LiquidCrystal.h>

Prévient l'application Arduino que l'on va manier un appareil LCD (Liquid Crystal Display) en important le fichier Liquid.crystal.h du dossier librairies.

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

On pourra ainsi utiliser lcd et Arduino saura qu'on se réfère à l'écran

int buttonPin = 7;

De base, le code est fait pour deux boutons (il est indiqué button1State, button2State; dans le code initial), mais étant donné que je n'en ai qu'un par manque de place, j'indique que ce bouton est connecté au pin 7

int abdoCounter = 30;

Intègre le fait que l'écran affichera 30 lorsqu'il n'y aura pas de mouvement

#include <"Wire.h">
#include <"I2Cdev.h"> 
#include <"MPU6050.h"> 
#include <MPU6050 accelgyro>

Indique que l'on part avec les données initiales des fichiers téléchargés et que les fichiers ont été importés.

int16_t ax, ay, az;
int16_t gx, gy, gz;
int16_t mx, my, mz;

Ici, les variables de l'accéléromètre

Dans Arduino, void setup désigne les paramètres de base, ceux qu'on retrouve quand on met l'appareil en marche.

lcd.begin(16, 2);

16 correspond à la ligne et 2 aux colonnes de l'écran.

lcd.clear();

cette commande servira ans le cas où on a besoin d'effacer une donnée quelconque

Serial.begin(9600);

Définit le nb de bits par secondes envoyées à l'Arduino

pinMode(buttonPin, INPUT);

Spécifie que le bouton est un input, qu'il va lire des données

accelgyro.initialize();

À ce stade, l'écran devrait afficher Start ? lorsqu'il est allumé. Il est possible de tester en connectant le Arduino à l'ordinateur. En dessous, écrire > void loop (){} <, puis téléverser. Si l'écran n'affiche rien, tourner le potentiomètre (le bouton bleu) jusqu'à visibilité, et/ou bien relire.

La fonction void loop sert à définir les actions et leurs réponses. b)

int buttonState = digitalRead(buttonPin);

Lit le statut du bouton, selon l'exemple de l'IDE

accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz);

Arduino connait ainsi les mesures qui vont être utilisées

anglex = (180/3.141592) * atan(ax / sqrt(square(ay) + square(az)));
//https://knowledge.parcours-performa...

le calcul pour l'angle(x) après avoir testé, les valeurs en y et z sont inutiles car elles calculent des positions qui ne sont pas utilisées lors d'exercices abdominaux.

if(counting) ; {
 Si le programme est en train de compter les abdos
if(abdoCounter < 1 ) ;  {
Une fois que les compteurs des abdos est arrivé à zero
writeTextToScreen("Bravo!"); 
s'affiche alors  Bravo ! à l'écran 
}
else {
Autrement,
writeNumberToScreen(abdoCounter); 
affiche le nombre d'abdos 

if(anglex < -70)  {
Dès que la personne s'est incliné à plus de 70 degrés, (valeur négative à cause du sens 
''dans lequel on tient l'arduino, constat après avoir testé les inclinaisons.)
 wasUp = true; 
Le boolean wasUp est à true, et ainsi il garde en mémoire que la personne s'est incliné à plus de 70 degrés
}

else if(anglex > -10 && wasUp) 
wasUp = false; 
''Si ensuite l'angle est proche de zéro, et la personne à été en haut à un moment donné, 
wasUp devient false, on est de retour au sol
abdoCounter-1;
retranche 1 au nombre d'abdos
  }
}
  } else {
''Autrement'
 if (buttonState == HIGH) {
Lorsqu'on appuie sur le boutton
counting = true;
on commence à compter
    } else {
writeTextToScreen("Start ?") 
affiche Start ?''à l'écran
    }
  }
}

3. Résultats

Malheureusement, l'accéléromètre ne peut pas calculer les angles parce qu'il me dit que la commande accelgyro n'existe pas. (À noter que dans les calculs d'essais, ce problème n'apparaissait pas.) Il ne lit donc pas les données et Arduino ne peut rien exécuter.

4. Discussion

Il est possible que ça n'ait pas fonctionné à cause des différents fichiers qui se sont créés lors de mes tentatives d'enregistrement du fichier Arduino ; j'ai réinstallé plusieurs fois les documents Breakout_Master et avais donc plusieurs dossiers I2Cdev et MPU6050. À un moment j'ai tenté de faire le ménage et j'ai tout supprimé, et il est possible qu'à ce moment-là les données qui permettaient à accelgyro de lire soient parties également. Malgré la réinitialisation de l'appareil et le re-téléchargement de nouveaux dossiers Breakout_Master, l'Arduino continuait à m'indiquer qu'accelgyro était Non-déclaré dans ce champ d'application. J'ai donc dû terminé avec des suppositions que j'ai pu faire car initialement, avant l de lire les valeurs de l'accéléromètre sur l'écran et c'est comme ça que j'ai pu savoir comment il calculait les angles de quel angle j'avais besoin. De plus, n'ayant rien réussi à sauver sur le git à cause de problèmes techniques, il n'y a que le résultat final qui aura été enregistré en définitive.

5. Conclusion

Plusieurs facteurs, dont certains causés pas moi-même (retard de commencement du projet, non-mise des avancées dans le git, ...) font que ce projet, pourtant bien commencé une fois qu'il a été entamé, n'a malheureusement pas abouti. Néanmoins, j'ai appris quelques petites choses intéressantes sur l'Arduino, notamment en me baladant les forums.

––––– (1) schéma manuel SIK GUIDE version 3.0  (2) http://diyhacking.com/wp-content/up...