Aller au contenu

Découverte de la centrale inertielle MPU-6050

Découverte de la centrale inertielle MPU-6050

Objectifs : apprendre à se servir d'une centrale inertielle 6 axes, le MPU-6050.

Difficulté : 2/5

Temps d'exécution : 20 min

Matériel nécessaire :

Une centrale inertielle, Inertial Measurement Unit (IMU) en anglais, est un capteur capable d'estimer la position d'un objet mobile grâce à ses mouvements. Le MPU-6050 est équipé d'un accéléromètre 3 axes ainsi que d'un gyromètre 3 axes. Il peut être utilisé dans beaucoup de projets comme pour stabiliser un drone en vol ou bien retransmettre les mouvements d'une main à un logiciel de simulation par exemple.

Ci-dessus, une centrale inertielle est utilisée pour contrôler un personnage dans un jeu vidéo à partir des mouvements de la main du joueur ou pour faire un robot équilibriste, le Crabeel.

A propos du MPU-6050 :

Cette IMU permet de connaitre les angles d'orientation d'un robot en intégrant les vitesses de rotations suivant les 3 axes détectés grâce au gyromètre. De plus, il possède un algorithme de fusion des valeurs de l'accéléromètre et du gyromètre, ce qui permet d'avoir des résultats plus fiables !

Le MPU-6050 est fourni avec deux types de broches, vous pouvez donc choisir entre celles droites ou recourbées et passer à l'étape de soudage !

Pour cette étape je vous conseille d'utiliser une troisième main mécanique qui vous facilitera grandement la tâche. Et si vous avez un doute vous pouvez consulter ce tutoriel sur la soudure.

Avec la troisième main je maintien les broches sur lesquelles je pose le capteur que je viens souder.

Montage de la centrale inertielle :

Connexion entre MPU-6050 et arduino:

La centrale inertielle possède 8 broches, dont 5 vont être utilisées pour être reliées à la carte arduino uno.

Arduino Uno MPU-6050
GND GND
5V VCC
A4 SDA
A5 SCL
Digital pin 2 INT

(lien de téléchargement)

Le MPU-6050 est très pratique puisqu'il communique grâce au protocole I2C, ce qui simplifie le câblage et permet une communication avec de nombreuses cartes microcontrolleur ! Il y également une broche dédiée aux interruptions bien utile !

Programmation de la carte Arduino :

Le programme pour récupérer et analyser les données de la centrale est assez complexe. Nous allons donc utiliser une librairie pour nous faciliter le travail ! D'abord, il vaut faudra les librairies I2Cdev et MPU6050 pour communiquer avec l'IMU. Une fois les librairies en votre possession, importez-les dans l'IDE arduino comme suit : Croquis -> Inclure une bibliothèque -> Ajouter la bibliothèque .ZIP  et sélectionner le dossier contenant la librairie (Si vous êtes débutant en arduino, n'hésitez pas à consulter l'ouvrage dédié).

Pour trouver le programme d'analyse de la centrale inertielle, rien de plus facile ! Il suffit de suivre ce chemin : Fichier -> exemples -> MPU6050    -> Examples -> MPU6050_DMP6.

Le programme qui s'affiche dans l'IDE permet de convertir les valeurs envoyées par le MPU-6050 et de les afficher dans le moniteur série.

Au début, ce message s'affiche et vous devez entrer un caractère dans le moniteur série pour commencer la communication.

 

Puis les valeurs commencent à s'afficher :

Il faut environ 30 secondes pour que les valeurs de la centrale ce stabilisent et soit correctes.

Les colonnes qui s'affichent correspondent aux différents angles de l'IMU, respectivement le lacet, le tangage et le roulis.

Ce sont les rotations autour des angles x,y et z présentés sur l'image au début de ce tutoriel.

Application : MPU-6050 + servo moteur 9g

Maintenant, on peut utiliser les données de l'IMU pour faire fonctionner deux servo moteurs 9g ! Les servo moteurs tourneront en fonction de la valeur de l'angle retourné par la centrale inertielle. Pour cela, je réalise le montage suivant :

(lien de téléchargement)

Il y a une petite modification à faire dans le programme précédent pour ajouter le contrôle des servo moteurs ! Voici le programme modifié : (les modifications se trouvent dans la fonction setup et après la ligne 315)

 

Les modifications consistent uniquement à déclarer les servo moteurs comme des objets avec la librairie associée pour pouvoir les utiliser simplement. Et, les valeurs des angles qui étaient précédemment affichées dans le moniteur série sont désormais aussi transmises aux servo moteurs qui s'orientent grâce à l'angle reçu.

Maintenant, il n'y a plus qu'à faire fonctionner les servo moteurs. Attention à l'axe associé à l'angle reçu par votre servo ! Moi il s'agit des mouvements de lacet (axe x sur l'image) et de tangage (axe y).

Bref, une vidéo de démonstration :