Comment utiliser le module accéléromètre et gyroscope MPU-6050
Le MPU-6050 est un capteur polyvalent qui combine un accéléromètre 3 axes et un gyroscope 3 axes dans un seul boîtier. Dans ce tutoriel, nous allons explorer comment interfacer ce module avec un Arduino pour mesurer l'accélération et la vitesse angulaire. Le résultat sera un programme simple qui affiche les données en temps réel du capteur, vous permettant de surveiller à la fois l'accélération et l'orientation de votre appareil.

En suivant ce guide, vous apprendrez à configurer le matériel, à câbler correctement les composants et à écrire le code nécessaire pour faire fonctionner le MPU-6050. Cela vous fournira une base pour des projets ultérieurs impliquant la détection du mouvement et de l'orientation. Pour plus de clarté, pensez à consulter la vidéo accompagnant ce tutoriel (en vidéo à :00).
Matériel expliqué
Le composant principal de ce projet est le capteur MPU-6050, qui fournit à la fois des données d'accéléromètre et de gyroscope. L'accéléromètre mesure l'accélération linéaire le long des axes X, Y et Z, tandis que le gyroscope mesure les taux de rotation autour de ces mêmes axes. Cette combinaison fait du MPU-6050 un excellent choix pour les applications nécessitant le suivi du mouvement.
De plus, le module utilise une interface I2C pour la communication, ce qui simplifie les connexions et permet de connecter plusieurs appareils sur le même bus. Le capteur est alimenté via la broche VCC, qui nécessite généralement une tension comprise entre 3.3V et 5V. La masse est reliée à la masse commune de l'Arduino.
Détails de la fiche technique
| Fabricant | InvenSense |
|---|---|
| Numéro de pièce | MPU-6050 |
| Tension logique / E/S | 3,3 - 5 V |
| Tension d'alimentation | 3,3 - 5 V |
| Courant de sortie (par canal) | ... |
| Courant de crête (par canal) | ... |
| Recommandations de fréquence PWM | ... |
| Seuils d'entrée logiques | ... |
| Chute de tension / RDS(en conduction)/ saturation | ... |
| Limites thermiques | … |
| Paquet | QFN |
| Notes / variantes | ... |
- Connectez la broche VCC à 3,3 V ou 5 V.
- Connectez la broche GND à la masse.
- Utilisez la communication I2C via SDA (données) et SCL (horloge).
- Assurez-vous de la présence de résistances pull-up sur les lignes SDA et SCL.
- Vérifiez que les niveaux de tension sont appropriés pour éviter d'endommager le capteur.
Instructions de câblage

Pour câbler le MPU-6050 à votre Arduino, commencez par connecter la broche VCC du MPU-6050 à la broche 5V de l'Arduino. Ensuite, connectez la broche GND du MPU-6050 à l'une des broches GND de l'Arduino. Pour la communication I2C, connectez la broche SDA du MPU-6050 à la broche A4 de l'Arduino, et la broche SCL à la broche A5. Assurez-vous que votre Arduino est configuré pour utiliser la communication I2C en incluant les bibliothèques appropriées dans votre code.
Revérifiez vos connexions avant d'alimenter le système. Si vous utilisez une breadboard, assurez-vous que les connexions sont bien fixées et qu'il n'y a pas de court-circuit. Si le module ne répond pas comme prévu, vérifiez le câblage et contrôlez l'adresse I2C du MPU-6050 dans votre code.
Exemples de code et guide pas à pas
L'extrait de code suivant initialise le MPU-6050 et commence à en lire les données. Les principaux identifiants comprennentmpu6050, qui est l'instance de la classe MPU6050, ettimer, qui est utilisé pour contrôler le moment de la sortie des données.
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
Dans cette fonction setup, nous initialisons la communication série et le capteur MPU-6050. Lempu6050.calcGyroOffsets(true)L'appel est crucial car il calibre les biais du gyroscope, garantissant des mesures précises.
Dans la fonction loop, nous mettons continuellement à jour les données du capteur et les affichons dans le moniteur série. L'extrait de code suivant montre comment lire et afficher les données de température et d'accélération :
if(millis() - timer > 1000){
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
}
Ce bloc vérifie si une seconde s'est écoulée depuis la dernière sortie. Il récupère ensuite les valeurs de température et d'accélération du MPU-6050 et les affiche sur le moniteur série. Vous pouvez observer ces valeurs se mettre à jour en temps réel.
Démonstration / À quoi s'attendre
Une fois que tout est câblé et que le code est téléversé, vous pouvez vous attendre à voir les données de température et d'accélération s'afficher dans le moniteur série toutes les secondes. Si vous inclinez ou déplacez le MPU-6050, les valeurs d'accélération devraient changer en conséquence. Notez que des câblages incorrects ou une alimentation insuffisante peuvent entraîner des relevés erratiques ou l'absence totale de données (dans la vidéo à 01:30).
/*
*
* This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
*
* This code displays all data:
* -Gyroscope X, Gyroscope Y, Gyroscope Z
* -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z
* -Accel X, Accel Y, Accel Z
* -Accel Angle X, Accel Angle Y, Accel Angle Z,
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
*
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}
/*
*
* This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
*
* This code displays:
* - Angle X, Angle Y, Angle Z,
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
*
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}
Ce dont vous pourriez avoir besoin
-
AmazonAcheter MPU-6050 sur Amazonamzn.to
Ressources et références
-
ExterneSite Web du fabricantinvensense.com
Fichiers📁
Bibliothèques Arduino (zip)
-
Bibliothèque Arduino pour MPU9250
robojax-MPU9250-master.zip3.38 MB