====== Obtenir la courbe des mesures d'un accéléromètre/gyroscope à partir d'un Arduino====== ===== Présentation du MPU6050 ===== La puce est équipée d'un accéléromètre 3 axes et d'un gyroscope 3 axes. Outre l'acquisition des mesures, la puce est aussi équipée d'un processeur appelé DMP (Digital Motion Processor) se chargeant de convertir les mesures brutes en données compréhensibles pour un humain.Le processeur DMP réalise les calculs directement sur la puce allégeant ainsi le travail de l'Arduino. On peut aussi lire les mesures brutes sans passer par le traitement du DMP mais c'est très compliqué.\\ ===== Matériels ===== - Une carte Arduino\\ {{http://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Uno_-_R3.jpg?200}}\\ - Une carte GY-521 dotée de la puce MPU6050 (accéléromètre et gyroscope)\\ {{http://img15.hostingpics.net/pics/755992mpu6050.jpg}}\\ ===== Construction ===== La [[(http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf|DataSheet ]] indique d'alimenter la carte en 3.3V mais l'expérience montre que ça marche aussi en 5V.\\ {{http://42bots.com/wp-content/uploads/2014/03/MPU6050-Arduino-Uno-Connections.jpg}}\\ ==== Code ===== La puce communique avec l'Arduino via le protocole I2C. Les librairies sont à prendre[[(https://github.com/jrowberg/i2cdevlib|ici ]] \\ Une fois celles ci installées, chargez l'exemple MPU6050_DMP6. Vous choisissez quels types de données vous voulez avoir en output. \\ *Angles d'Euler *Yaw-Pitch-Roll *Quaternions *Accélérations liées à l'objet *Accélérations dans le référentiel terrestre. ===== Un exemple simple : le pendule ===== Le mode yaw-pitch-roll est le plus adapté pour les débutants car très intuitif, c'est un système de déviations angulaires utilisées en aéronautique.\\ {{http://img15.hostingpics.net/pics/581779yawrollpitch.jpg}}\\ L'étude d'un pendule est un exemple simple car nous n'utilisons qu'un seul axe. Pour le réaliser, il suffit de scotcher le capteur à l'Arduino pour le solidariser et on laisse pendre l'ensemble avec le câble USB. Dans le code, on dé-commente la ligne #define OUTPUT_READABLE_YAWPITCHROLL (environ la ligne n°100) puis on charge le programme dans la carte. Si tout se passe bien, dès qu'on ouvre la fenêtre de communication du port série, on est invité à envoyer des caractères au hasard pour lancer l'analyse du DMP. Après quelques secondes d'auto-calibration (si le baud rate est bien configuré), un flux continu de données sont affichées formant 3 colonnes (une pour chaque axe). On les récupère par copier coller ou automatiquement en suivant ce [[(http://pmclab.fr/dokuwiki/doku.php?id=wiki:tutoriels:donnee_arduino_excel | tuto ]] \\ Un moyen simple d'obtenir la courbe est d'utiliser gnuplot. La commande est plot « fichiertexte.txt » using 2« Using » sert à désigner la colonne dont on souhaite tracer la courbe. Dans le cas du pendule, j'obtiens \\ {{http://img4.hostingpics.net/pics/99063496b.png}}\\ Ce graphe nous donne la variation angulaire en degré de l'axe Pitch en fonction du temps, on reconnaît les oscillations d'un pendule et les pertes d'énergie mécaniques au fil des périodes, le câble USB n'étant pas parfait… Le DMP prend 200 mesures par secondes, on peut facilement calculer les périodes.