Table des matières:

Enregistrement de données MPU-6050/A0 en temps réel avec Arduino et Android : 7 étapes (avec photos)
Enregistrement de données MPU-6050/A0 en temps réel avec Arduino et Android : 7 étapes (avec photos)

Vidéo: Enregistrement de données MPU-6050/A0 en temps réel avec Arduino et Android : 7 étapes (avec photos)

Vidéo: Enregistrement de données MPU-6050/A0 en temps réel avec Arduino et Android : 7 étapes (avec photos)
Vidéo: U=RI | Comment créer une Caméra Interactive? 2024, Novembre
Anonim
Enregistrement de données MPU-6050/A0 en temps réel avec Arduino et Android
Enregistrement de données MPU-6050/A0 en temps réel avec Arduino et Android

J'ai été intéressé par l'utilisation de l'Arduino pour l'apprentissage automatique. Dans un premier temps, je souhaite créer un affichage et un enregistreur de données en temps réel (ou presque) avec un appareil Android. Je souhaite capturer les données de l'accéléromètre du MPU-6050, j'ai donc conçu la version pour utiliser le HC-05 à 115200 bauds. Avec cette configuration, 4 canaux de données peuvent être transmis à 250 échantillons par seconde.

La construction comporte quelques étapes:

  • Construisez le bouclier ou la planche à pain
  • Programmer l'Arduino
  • Chargez l'application Android depuis Google Play ou branchez le GitHub et compilez-le vous-même
  • Connectez le MPU-6050 à quelque chose d'intéressant qui vibre (j'ai utilisé une voiture R/C)
  • Utilisez l'appareil Android pour vous connecter à l'Arduino
  • Tracez les données, enregistrez si vous êtes intéressé
  • Importer dans Python (ou une autre plate-forme) pour une utilisation ultérieure

Commençons!

Étape 1: Construisez le bouclier/la planche à pain

Construisez le bouclier/la planche à pain
Construisez le bouclier/la planche à pain
Construisez le bouclier/la planche à pain
Construisez le bouclier/la planche à pain

Voici le schéma de câblage de l'Arduino, du HC-05 et du MPU-6050. En plus du MPU-6050, j'ai l'entrée analogique A0 câblée à un capteur de lumière pour montrer que l'ADC fonctionne. N'importe quel signal de 0 à 5 volts peut être introduit dans l'ADC A0. Voici les composants que j'ai utilisés pour la construction:

  • Arduino Uno
  • HC-05 (Le HC-06 devrait fonctionner aussi, mais ma construction était avec le HC-05)
  • MPU-6050
  • Photorésistance Sparkfun
  • Résistance 10kOhm (marron-noir-orange)

La plupart des modules Bluetooth HC-05 sont par défaut à 9600 bauds. Pour que les données soient transmises avec succès, vous devrez les reprogrammer pour un débit de 115 200 bauds. Il existe un bon HC-05/HC-06 AT Command Instructable qui explique comment le faire.

Étape 2: programmer l'Arduino

Programmer l'Arduino
Programmer l'Arduino
Programmer l'Arduino
Programmer l'Arduino

J'ai utilisé la version Arduino IDE 1.6.7 pour programmer l'Arduino. Le code peut être téléchargé à partir des liens de cette étape ou à partir du référentiel GitHub. J'ai inclus trois versions: Firmware125.ino est la version 125 hertz, Firmware250.ino est la version 250 hertz et Firmware500.ino est la version 500 hertz. Pour que l'Arduino cycle à 500 hertz, l'ADC A0 n'est pas collecté.

Le firmware comprend une sortie d'horloge sur la broche 9 que j'ai utilisée pour vérifier le timing. La trace montre que le temps de cycle est de 4 ms (équivalent à 1/250 hertz). J'ai constaté que s'il y a des problèmes de liaison série, le timing ne sera pas uniforme.

Le code Arduino utilise le masquage de bits pour ajouter un numéro de canal à chaque paquet, car les échantillons tombent parfois via Bluetooth. J'utilise les trois bits les plus significatifs pour stocker un numéro de canal. Pour les entiers signés, le bit le plus significatif (MSB) est réservé au signe. Étant donné que je souhaite utiliser le MSB pour mon adresse, plutôt que le signe de l'entier, je dois convertir toutes les valeurs signées de l'accéléromètre en entiers non signés. Je fais cela en ajoutant 32768 à chaque valeur (les comptes ADC de l'accéléromètre MPU sont de +32768 à -32768) et convertis en entiers non signés:

(entier non signé)((long)iAccelData+32767));

Le numéro de canal est le même pour chaque accéléromètre et le port A0 afin qu'un paquet abandonné puisse être détecté si les numéros de canal ne sont pas en ordre. Pour les paquets provenant du Bluetooth sur l'Arduino, le modèle binaire est (les signes sont décalés au niveau du bit):

(xacc 3 bits d'adresse = 0x00, 13bit non signé) (yacc 3 bits d'adresse = 0x01, 13bit non signé) (zacc 3 bits d'adresse = 0x02, 13bit non signé) (3 bits d'adresse = 0x03, iadc13bit non signé)

(xacc 3 bits d'adresse = 0x00, 13bit non signé) (yacc 3 bits d'adresse = 0x01, 13bit non signé) (zacc 3 bits d'adresse = 0x02, 13bit non signé) (3 bits d'adresse = 0x03, iadc13bit non signé) (xacc 3 bits d'adresse = 0x00, 13bit non signé) (yacc 3 bits d'adresse = 0x01, 13bit non signé) (zacc 3 bits d'adresse = 0x02, 13bit non signé) (3 bits d'adresse = 0x03, iadc13bit non signé) …

Si vous utilisez autre chose que l'application Android Accel Plot pour lire les données Bluetooth, voici les étapes pour extraire l'adresse (j'utilise les noms de variables du fichier Accel Plot Bluetooth.java du référentiel GitHub):

- Lire dans le 16 int non signé

- Extrayez l'octet de poids fort et enregistrez-le dans btHigh.

- Extrayez l'octet de poids faible et enregistrez-le dans btLow.

- Récupérez l'adresse de btHigh en utilisant: (btHigh >> 5) & 0x07. Cette instruction décale btHigh de 5 bits vers la droite en déplaçant les trois bits d'adresse vers les trois registres les plus bas. Le signe & est un ET logique qui force les bits 4 et supérieurs à être à zéro et les trois derniers bits à correspondre aux bits d'adresse. Le résultat de cette déclaration est votre adresse.

Vous n'avez pas à vous soucier de l'extraction d'adresse si vous utilisez Accel Plot.

Étape 3: Chargez l'application Android à partir de Google Play ou branchez le GitHub

Chargez l'application Android depuis Google Play ou branchez le GitHub
Chargez l'application Android depuis Google Play ou branchez le GitHub

Vous avez plusieurs choix pour charger l'application Android sur votre appareil. Si vous souhaitez éviter le codage, vous pouvez rechercher "Accel Plot" et l'application devrait apparaître dans le Google Play Store. Suivez les instructions du magasin pour l'installation.

Mon désir avec cet Instructable est vraiment d'encourager les autres à créer des projets, j'ai donc également publié le code dans un dépôt GitHub. Vous devriez être capable de créer une branche, de le construire et de le modifier comme bon vous semble. J'ai publié le code sous la licence MIT alors amusez-vous bien !

Étape 4: Connectez-vous à l'Arduino à quelque chose d'intéressant (j'ai utilisé une voiture R/C)

Connectez-vous à l'Arduino à quelque chose d'intéressant (j'ai utilisé une voiture R/C)
Connectez-vous à l'Arduino à quelque chose d'intéressant (j'ai utilisé une voiture R/C)

Je souhaite éventuellement utiliser l'appareil pour la détection de la surface de la route, j'ai donc pensé qu'une petite voiture télécommandée (R/C) serait appropriée. Je pense que cela aide à la prochaine étape si l'accélération peut être sur quelque chose qui bouge ou vibre.

Étape 5: utilisez l'appareil Android pour vous connecter à l'Arduino

Utilisez l'appareil Android pour vous connecter à l'Arduino
Utilisez l'appareil Android pour vous connecter à l'Arduino
Utilisez l'appareil Android pour vous connecter à l'Arduino
Utilisez l'appareil Android pour vous connecter à l'Arduino
Utilisez l'appareil Android pour vous connecter à l'Arduino
Utilisez l'appareil Android pour vous connecter à l'Arduino

Si vous ne l'avez pas déjà fait, vous devrez d'abord coupler le HC-05 à votre appareil Android. Je pense que sur la plupart des appareils, vous pouvez le faire en allant dans les paramètres. La broche par défaut pour la plupart des appareils HC-05 sera 1234 ou 1111.

Ouvrez l'application AccelPlot sur l'appareil Android. Lorsque l'application s'ouvre et avant de vous connecter au HC-05, vous pouvez modifier la fréquence d'échantillonnage (définie dans le code Arduino), les échelles de l'accéléromètre (également définies dans le code Arduino) et le nombre d'échantillons à enregistrer.

Une fois ces réglages effectués, cliquez sur le bouton "Connecter". Cela devrait faire apparaître les appareils Bluetooth et votre appareil devrait être répertorié. Sélectionnez-le et une fois que le code établit la connexion, vous verrez apparaître un toast "Connecté".

Utilisez le bouton fléché de retour pour revenir à Accel Plot. Appuyez sur le bouton "Démarrer le flux" pour afficher les données de l'appareil HC-05. Vous devez également disposer de boutons pour enregistrer les données ou lire le contenu modulé en fréquence via la prise audio.

Étape 6: Acquérir et tracer les données

Image
Image
Importer dans Python (ou une autre plate-forme) pour une utilisation ultérieure
Importer dans Python (ou une autre plate-forme) pour une utilisation ultérieure

Le bouton "Démarrer le flux" doit être activé. Appuyez dessus pour commencer à diffuser des données à l'écran.

Le bouton "Enregistrer les données" sera également activé, appuyez dessus pour stocker les données.

Accel Plot comprend également une option pour émettre un signal modulé sur les canaux audio. Les 2 canaux de l'application Accel Plot font référence aux canaux gauche et droit de la prise de sortie audio de l'appareil Android. Ceci est utile si vous souhaitez importer les données du MPU-6050 dans un système d'enregistrement de données séparé, comme un National Instruments.

La vidéo montre un exemple du système collectant des données sur une voiture R/C.

Étape 7: Importer dans Python (ou une autre plate-forme) pour une utilisation ultérieure

Importer dans Python (ou une autre plate-forme) pour une utilisation ultérieure
Importer dans Python (ou une autre plate-forme) pour une utilisation ultérieure

Les fichiers sont enregistrés sur l'appareil Android. Les fichiers seront stockés dans le répertoire "AccelPlot" pour Android API 18 et plus. Le code place les fichiers.dat dans le dossier "\Tablet\Documents\AccelPlot" pour API 19 (KitKat 4.4) et supérieur. J'ai eu des problèmes avec certains appareils Android affichant les fichiers lorsqu'ils sont connectés via USB. Dans certains cas, j'ai dû redémarrer l'appareil Android pour les faire apparaître. Je ne sais pas pourquoi, mais il devrait y avoir quatre fichiers, un pour chaque canal. Ils peuvent être copiés dans un répertoire local pour un travail supplémentaire.

J'ai utilisé Anaconda/Python 2.7 pour ouvrir les fichiers et afficher les données. Le fichier "ExploratoryAnalysis.ipynb" contient le fichier IPython Notebook qui ouvrira tous les fichiers de données et tracera les exemples de données. Des exemples de fichiers sont inclus dans le référentiel GitHub. Les données sont enregistrées sous forme de flottants big-endian de 4 octets ('>f') de sorte que tout programme d'analyse devrait pouvoir les ouvrir.

J'ai également inclus un fichier plus simple appelé "ReadDataFiles.ipynb" qui montre comment lire dans un seul fichier par nom.

Conseillé: