Faites un Nike FuelBand! Sorte de ...: 5 étapes

Faites un Nike FuelBand! Sorte de ...: 5 étapes

Table des matières:

Anonim

En octobre 2012, j'ai remporté un Nike FuelBand lors d'une collecte de fonds dans mon gymnase CrossFit *. Je suis vraiment dans la collecte de données, alors j'étais excité d'avoir un enregistreur d'activité 24 heures. Je n'avais aucune idée du fonctionnement du FuelBand. Je n'ai pas vu de sonde galvanométrique (perspriation), de DEL IR (fréquence cardiaque) ou de tout type d'élastique restrictif (pression artérielle), si bien qu'il ne prenait pas de mesures biométriques. Étant donné que je suis assez au courant de la technologie des capteurs courants, il ne reste plus que des accéléromètres et des gyroscopes. Si je manque quelque chose, s'il vous plaît email!

J'ai tout de suite remarqué la première chose que tout le monde remarquait: plus vous secouez la bande de carburant, plus la métrique de NikeFuel augmente. De toute évidence, cette mesure n'est pas sophistiquée et leur utilisation de la métrique arbitraire NikeFuel semble en être une indication. Je réalise les limites de la télémétrie portable. Je considère donc ce produit non pas comme un appareil scientifique conçu pour mesurer la dépense calorique ou le VO2max à cinq décimales, mais plutôt comme un moyen de rendre l'exercice quantifiable, et comme un mécanisme permettant de développer une routine pour les personnes qui en ont besoin. ce coup de pouce supplémentaire.

Cela m’a amené à penser: comment puis-je obtenir des mesures plus détaillées de mon entraînement? J'ai proposé environ sept capteurs différents que je pourrais construire, non intrusifs et basés uniquement sur des données de mouvement. Mais je devais d'abord créer ma propre plateforme portable avec un détecteur de mouvement très basique.

Cette instruction utilise un accéléromètre 3D monté sur un Arduino Uno, une mémoire flash pour l’enregistrement de données et une interface utilisateur assez grossière pour contrôler l’étalonnage, la journalisation et la gestion de fichiers. Le tout sur un petit paquet monté au poignet. (J'aime la Uno à cause de sa taille, les prototypes de boucliers donnent beaucoup plus d'espace que les plus petits appareils.)

Nomenclature:

Arduino Uno

www.sparkfun.com/products/11021

SparkFun 3D Acceleromtoer (et quelques picots pour le souder)

www.sparkfun.com/products/10955

Blindage de clavier LCD DFRobot

http: //www.dfrobot.com/index.php? route = product / pro …

DFRobot Uno Prototype Board

http: //www.dfrobot.com/index.php? route = product / pro …

5x 3,3V Diodes Zener

Commutateur à glissière SPST

Puce flash WinBond W2Q80 8 mbits

Quatre supports 1/2 "et 8 vis qui correspondent à une empreinte Uno

Une petite quantité de fil de 20g solide

Velcro

Support de batterie 4xAAA

4xAAA Batteries

Ruban adhésif

* Malheureusement, mon groupe d'essence a consommé mon groupe d'essence quelques semaines plus tard. Malheureusement, il n'a pas survécu au voyage dans le tractus gastro-intestinal de la canine, pas que s'il avait survécu, je voudrais tout de même l'utiliser.

Provisions:

Étape 1: câbler l'accéléromètre

Choisissez un point sur le bouclier et soudez une tête à 8 broches. Placez le capteur 3D sur la tête et soudez-le aussi. Assurez-vous de laisser suffisamment d’espace pour souder la puce flash à l’étape suivante.

Le capteur a huit broches. Deux sont pour le pouvoir et la terre. On met l'appareil en veille. Trois sont les sorties analogiques X, Y et Z et les deux derniers sont la configuration de mode.

Le sélecteur de mode vous permet de régler la sensibilité de l'appareil sur 1,5 g (00), 2g (01), 4g (10) ou 6g (11). J'ai opté pour 1,5 g et ne dépasse cette note que sur quelques mouvements. Le compromis ici est une fidélité fine par rapport à la plage dynamique.

Câblez VCC à 5V, masse à terre, couchez-vous à la terre (pour que l'appareil soit toujours allumé) et les deux broches de configuration à la terre. Câblez les broches X, Y et Z aux broches analogiques 1, 2 et 3 du blindage, respectivement.

Étape 2: câbler le flash

Il y a quelques endroits sur le tableau qui ont des emplacements pour les dispositions DIP, utilisez-les pour faciliter la connectivité.

Pour la puce flash, les WP # (protection en écriture), HOLD # et VCC vont directement au rail 5V. Connectez-les au rail avec les diodes Zener en polarisation inverse pour relier la masse à 5V à 3,3V. La puce n’est que de 3,3V, nous devons donc protéger toutes les entrées entraînées à 5V. Vous mettrez également les Zeners 3,3 V en parallèle avec la terre sur CLK, DI, DO et CS (chip select). J'ai complètement oublié d'ajouter de petites résistances de charge dans le circuit, mais tout a bien fonctionné. Si je le faisais à nouveau, je le referais correctement, comme ceci: http: //hades.mech.northwestern.edu/images/7/74/Zen …

La bibliothèque SPI attend les affectations de broches suivantes

SPI MOSI (sortie maître / entrée esclave) passe à la broche flash DI (entrée de données); la broche de blindage 11 passe à la broche DIP 5.

SPI MISO (entrée principale / sortie esclave) passe à la broche flash DO (sortie de données); la broche de blindage 12 passe à la broche DIP 2.

SPI SCK (horloge) passe à la broche flash CLK (horloge); la goupille de blindage 13 passe à la goupille DIP 6.

SPI SS (select) passe à la broche flash CS # (chip select); la broche de blindage 10 passe à la broche DIP 1.

* En fait, j'ai câblé CS # sur la broche 3, je ne sais pas du tout pourquoi, mais notez le #define dans le code si vous changez cela

Étape 3: Assemblage final

Les prochaines étapes sont plutôt ad hoc.

D'abord, superposez du ruban adhésif pour faire un bracelet (ou trouvez un bracelet large de 3 "qui s'adapte à votre poignet). Fixez du velcro pour empêcher votre poignet spiff de tomber.

Percez quatre petits trous dans la bande qui correspondent aux trous d’espacement Arduino Uno. Visser les entretoises dans le bracelet et dans le Uno.

Mettez en sandwich le prototype avec la mémoire flash et l’accéléromètre au-dessus de l’Uno.

Fixez la protection du clavier LCD par-dessus.

Collez, scotchez ou fixez d’une manière ou d’une autre la batterie au bracelet. J'ai utilisé de la colle Gorilla. Ce truc est fantastique.

Souder le commutateur en série avec la sortie du fil rouge V + du clip de la batterie, et souder la sortie de ce fil à la broche VIN de l'écran. Souder le fil de masse / noir du clip de la batterie à la broche GND de l'écran.

Insérez des piles.

Activez le commutateur pour vous assurer que tous les voyants de chaque composant de la pile sont allumés.

Étape 4: Téléchargez le logiciel

Le logiciel a trois fonctions principales:

A. Présenter à l'utilisateur une interface utilisateur de base pour choisir de:

  1. Afficher les lectures X, Y, Z
  2. Enregistrez les lectures X, Y et Z
  3. Effacer la puce flash
  4. Montre combien de pages de 256 octets ont été écrites sur la puce flash
B. Lire l'accéléromètre aussi vite que possible

C. Ecrire les données dans Flash

Le gros du code est dédié à l'interface utilisateur. Ce fut un processus amusant d'apprendre à utiliser la bibliothèque LCD fournie avec le bouclier supérieur. Les six boutons du bouclier envoient une tension analogique à la broche analogique 0 du Uno. C’est une alternative plutôt astucieuse aux boutons-poussoirs anti-rebond (si vous ne savez pas pourquoi c’est difficile, vous le ferez un jour!). Le code de contrôle n’est pas si difficile à comprendre. Haut / Bas, parcourez les options du menu, Droite sélectionne et Réinitialiser ne fait que redémarrer l’Arduino. Vraiment simple.

Mode d'affichage

En mode d'affichage, une chaîne est envoyée à l'écran LCD avec les lectures X, Y et Z en milli-grammes. le convertir() fonction échelonne les lectures de 0-5V à gs. Puisque 0g est défini à 1,65V par le fabricant et que la fidélité analogique totale Arduino de 0-5V est mesurée par incréments de 1024, l'équation est 5V / 1024 * X - 1,65V = g.

Mode d'enregistrement

En mode d'enregistrement, l'affichage n'est pas mis à jour. Au lieu de cela, les données analogiques brutes sont écrites dans la mémoire flash à l'aide d'une classe pagebuffer. Chaque fois que 256 octets sont envoyés à la classe, celle-ci déclenche une page d'écriture sur le périphérique flash et échange dans une nouvelle mémoire tampon. Cette classe est une amélioration par rapport à mon code précédent dans mon anémomètre instructable.

Mode effacement

Le mode effacement efface simplement la puce flash.

Mode d'affichage des pages utilisées

Pages utilisées indique le nombre de pages remplies dans le périphérique Flash. Étant donné que le premier octet de chaque page est toujours défini sur 0, le code peut avancer rapidement vers une nouvelle page après sa réinitialisation. Cela vous permet d'allumer et d'éteindre l'appareil tout en continuant à écrire là où il s'était arrêté.

* Remarque: en plus de la bibliothèque principale Arduino (pour des choses comme SPI et digitalWrite ()), vous aurez besoin de la bibliothèque de clavier LCD. Il est disponible sur le site Web de DFRobot.

** Remarque n ° 2: je n'ai pas expliqué comment télécharger les données de la puce flash. Cela vient dans un autre instructable. J'ai une carte dédiée avec une connexion USB qui lit les données de ces puces. Un jour, je vais passer aux cartes SD et me faciliter la vie.

Étape 5: Collecte de données et pensées finales

À ce stade, j'étais vraiment impatient de voir les différents modèles d'accélération de différents mouvements. Je savais bien qu’une simple valeur scalaire (l’ampleur vectorielle 3D de l’accélération) ne serait pas suffisante pour déterminer des données de position utiles, mais s’avancer rend difficile l’apprentissage et la progression, même trop?

J'ai attaché mon FuelBand dans le ghetto et je suis allé à la salle de sport.

J'ai effectué trois mouvements de base:

a) 135 # dos accroupi - placez une barre au-dessus des omoplates sous les vertèbres cervicales, gardez le cœur serré et le dos droit, accroupissez-vous jusqu'à ce que le pli de la hanche passe à travers le plan des genoux, faites monter les genoux et les hanches avancer et se lever; répéter

b) Ballon mural 20 # - situé à 1 ou 2 pieds du mur, face à lui, tenez une poitrine de 20 # balles médicinales; s'accroupir jusqu'à ce que le pli de la hanche passe sous les genoux; monter et, en haut du mouvement, ajouter de l’élan à la balle en lançant les bras pour la lancer à une cible de 10 pieds de hauteur sur le mur; au retour de la balle, effectuez le mouvement inverse pour recevoir la balle; répéter.

c) 95 # arrache olympique - oh c'est trop compliqué, il suffit de regarder.

Chaque mouvement implique un mouvement des bras et du torse, mais les poids sont très différents. Je soupçonnais que l'accélération à elle seule ne pouvait pas être un indicateur de la charge soulevée, mais je voulais voir par moi-même.

J'ai collecté les données pour plusieurs répétitions de chaque mouvement. J'ai post-traité les données pour générer une magnitude égale à la racine carrée de la somme du carré de l'accélération de chaque axe; par exemple, mag = sqrt (x ^ 2 + y ^ 2 + z ^ 2). J'ai tracé les résultats et lissé les données avec une moyenne mobile. Notez également que même si un axe peut dépasser 1,5 g, je n’ai jamais dépassé même 1 g simultanément sur deux capteurs ou plus, de sorte que les magnitudes étaient toujours assez faibles. Je dis cela parce qu'au début je pensais que les données étaient fausses alors que les grandeurs étaient toutes inférieures à la gravité !!!

C'est plutôt cool. Le mouvement complexe et complexe du mouvement est seulement mis en évidence par l'accélération globale mesurée au poignet. Je peux voir distinctement les phases rapides et lentes des mouvements, en particulier la force explosive de l'arraché. Mes soupçons étaient corrects, il est impossible de noter de grandes différences d’effort entre un mouvement (le squat) qui a déplacé un poids total d’environ 1000 lb alors qu’un autre (ballon mural) n’avait déplacé qu’environ 200 lb. Il est clair qu'une seule valeur d'accélération ne suffit pas à fournir une mesure suffisante de l'effort déployé, mais tout ce processus m'a amenée à développer une plate-forme que je peux développer avec de nouveaux capteurs. Je peux voir plusieurs capteurs utilisant une position de repos / repos, puis reconstituant le mouvement général, mais cela ne capterait toujours pas le poids. Mais j'ai encore d'autres idées …

Restez à l'écoute et bonne chance! J'espère que cela vous inspire pour améliorer la télémétrie de l'exercice!