Apprenez à utiliser le module accéléromètre et gyroscope MPU-6050 avec la carte Arduino. Le MPU-6050 IMU (unité de mesure inertielle) est un accéléromètre 3 axes et un capteur gyroscope 3 axes. L’accéléromètre mesure l’accélération gravitationnelle et le gyroscope mesure la vitesse de rotation. De plus, ce module mesure également la température. Ce capteur est idéal pour déterminer l’orientation d’un objet en mouvement.
Nous avons un guide similaire pour les cartes ESP32 et ESP8266 :
Dans ce guide, nous couvrirons deux exemples :
- Obtenez des lectures de gyroscope, d’accélération et de température (moniteur série)
- Lectures du gyroscope et de l’accéléromètre sur Serial Plotter
- Afficher les lectures du gyroscope et de l’accélération sur l’écran OLED
Présentation du capteur accéléromètre gyroscope MPU-6050
le MPU-6050 est un module avec un accéléromètre 3 axes et un gyroscope 3 axes.
Le gyroscope mesure la vitesse de rotation (rad/s). Il s’agit du changement de la position angulaire dans le temps le long des axes X, Y et Z (roulis, tangage et lacet). Cela nous permet de déterminer l’orientation d’un objet.
L’accéléromètre mesure l’accélération (taux de variation de la vitesse de l’objet). Il détecte les forces statiques comme la gravité (9,8 m/s2) ou des forces dynamiques comme les vibrations ou le mouvement. Le MPU-6050 mesure l’accélération sur les axes X, Y et Z. Idéalement, dans un objet statique, l’accélération sur l’axe Z est égale à la force gravitationnelle, et elle devrait être nulle sur les axes X et Y.
En utilisant les valeurs de l’accéléromètre, il est possible de calculer les angles de roulis et de tangage à l’aide de la trigonométrie. Cependant, il n’est pas possible de calculer le lacet.
Nous pouvons combiner les informations des deux capteurs pour obtenir des informations plus précises sur l’orientation du capteur.
Brochage MPU-6050
Voici le brochage du module de capteur MPU-6050.
VCC | Alimenter le capteur (3.3V ou 5V) |
GND | GND commun |
SCL | Broche SCL pour la communication I2C (A5) |
SDA | Broche SDA pour communication I2C (A4) |
XDA | Utilisé pour interfacer d’autres capteurs I2C avec le MPU-6050 |
XCL | Utilisé pour interfacer d’autres capteurs I2C avec le MPU-6050 |
AD0 | Utilisez cette broche pour changer l’adresse I2C |
INT | Broche d’interruption – peut être utilisée pour indiquer que de nouvelles données de mesure sont disponibles |
Installation des bibliothèques
Il existe différentes manières d’obtenir des lectures du capteur. Dans ce tutoriel, nous utiliserons la bibliothèque Adafruit MPU6050. Pour utiliser cette bibliothèque, vous devez également installer la bibliothèque Adafruit Unified Sensor et la bibliothèque Adafruit Bus IO.
Ouvrez votre IDE Arduino et accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Le gestionnaire de bibliothèque devrait s’ouvrir.
Taper « adafruit mpu6050 » dans le champ de recherche et installez la bibliothèque.
Ensuite, recherchez « Capteur unifié Adafruit”. Faites défiler jusqu’en bas pour trouver la bibliothèque et l’installer.
Enfin, recherchez « Adafruit Bus IO » et installez-le.
Après avoir installé les bibliothèques, redémarrez votre IDE Arduino.
Obtenir les lectures du capteur MPU-6050 : accéléromètre, gyroscope et température
Dans cette section, vous apprendrez comment obtenir des lectures de capteur à partir du capteur MPU-6050 : accélération (x, y, z), vitesse angulaire (x, y, z) et température.
Pièces requises
Pour cet exemple, vous avez besoin des pièces suivantes :
Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Schéma de principe – Arduino avec MPU-6050
Câblez l’Arduino au capteur MPU-6050 comme indiqué dans le schéma suivant : connectez la broche SCL à A5 et la broche SDA pour A4.
Code – Obtention des lectures du capteur MPU-6050 : accéléromètre, gyroscope et température
La bibliothèque Adafruit fournit plusieurs exemples pour ce capteur. Dans cette section, nous examinerons un exemple de base qui imprime les lectures du capteur du moniteur série.
Aller à Déposer > Exemples > Adafruit MPU6050 > lectures_de_base. Le code suivant devrait se charger.
Il obtient la vitesse angulaire (gyroscope) sur les axes x, y et z, l’accélération sur les axes x, y et z et la température.
// Basic demo for accelerometer readings from Adafruit MPU6050
// ESP32 Guide: https://Raspberryme.com/esp32-mpu-6050-accelerometer-gyroscope-arduino/
// ESP8266 Guide: https://Raspberryme.com/esp8266-nodemcu-mpu-6050-accelerometer-gyroscope-arduino/
// Arduino Guide: https://Raspberryme.com/arduino-mpu-6050-accelerometer-gyroscope/
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
void setup(void) {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit MPU6050 test!");
// Try to initialize!
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Serial.print("Accelerometer range set to: ");
switch (mpu.getAccelerometerRange()) {
case MPU6050_RANGE_2_G:
Serial.println("+-2G");
break;
case MPU6050_RANGE_4_G:
Serial.println("+-4G");
break;
case MPU6050_RANGE_8_G:
Serial.println("+-8G");
break;
case MPU6050_RANGE_16_G:
Serial.println("+-16G");
break;
}
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Serial.print("Gyro range set to: ");
switch (mpu.getGyroRange()) {
case MPU6050_RANGE_250_DEG:
Serial.println("+- 250 deg/s");
break;
case MPU6050_RANGE_500_DEG:
Serial.println("+- 500 deg/s");
break;
case MPU6050_RANGE_1000_DEG:
Serial.println("+- 1000 deg/s");
break;
case MPU6050_RANGE_2000_DEG:
Serial.println("+- 2000 deg/s");
break;
}
mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
Serial.print("Filter bandwidth set to: ");
switch (mpu.getFilterBandwidth()) {
case MPU6050_BAND_260_HZ:
Serial.println("260 Hz");
break;
case MPU6050_BAND_184_HZ:
Serial.println("184 Hz");
break;
case MPU6050_BAND_94_HZ:
Serial.println("94 Hz");
break;
case MPU6050_BAND_44_HZ:
Serial.println("44 Hz");
break;
case MPU6050_BAND_21_HZ:
Serial.println("21 Hz");
break;
case MPU6050_BAND_10_HZ:
Serial.println("10 Hz");
break;
case MPU6050_BAND_5_HZ:
Serial.println("5 Hz");
break;
}
Serial.println("");
delay(100);
}
void loop() {
/* Get new sensor events with the readings */
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Print out the values */
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");
Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC");
Serial.println("");
delay(500);
}
Comment fonctionne le code
Commencez par inclure les bibliothèques requises pour le capteur MPU-6050 : Adafruit_MPU6050 et Adafruit_Sensor.
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
Créé un Adafruit_MPU6050 objet appelé mpu pour manipuler le capteur.
Adafruit_MPU6050 mpu;
mettre en place()
Dans le mettre en place(), initialisez le moniteur série à un débit en bauds de 115 200.
Serial.begin(115200);
Initialisez le capteur MPU-6050.
if (!mpu.begin()) {
Serial.println("Sensor init failed");
while (1)
yield();
}
Réglez la plage de mesure de l’accéléromètre :
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Réglez la plage de mesure du gyroscope :
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Définissez la bande passante du filtre :
mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
boucler()
Dans le boucler() nous obtiendrons les lectures des capteurs et les afficherons dans le moniteur série.
Tout d’abord, vous devez obtenir de nouveaux événements de capteur avec les lectures actuelles.
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
Enfin, imprimez les lectures. Pour l’accélération :
- a.accélération.x: obtient l’accélération sur l’axe x ;
- a.accélération.y: obtient l’accélération sur l’axe y ;
- a.accélération.z: obtient l’accélération sur l’axe z.
L’accélération est mesurée en mètres par seconde carré (m/s2)
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
Pour obtenir des lectures de gyroscope :
- g.gyro.x: obtient la vitesse angulaire sur l’axe des x ;
- g.gyro.y: obtient la vitesse angulaire sur l’axe y ;
- g.gyro.z: obtient la vitesse angulaire sur l’axe z.
La vitesse angulaire est mesurée en radians par seconde (rad/s).
Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");
Enfin, imprimez la température – elle est mesurée en degrés Celsius. Pour accéder à la lecture de la température, utilisez temp.température.
Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC");
Les nouvelles lectures du capteur sont affichées toutes les 500 millisecondes.
delay(500);
Manifestation
Téléchargez le code sur la carte Arduino.
Ensuite, ouvrez le moniteur série à un débit en bauds de 115 200, appuyez sur le bouton RST intégré. Les mesures du capteur seront affichées.
Déplacez l’orientation du capteur et voyez les valeurs changer en conséquence.
Étalonnage du capteur
Idéalement, lorsque le capteur est statique, les valeurs du gyroscope doivent être nulles sur tous les axes, ce qui n’arrive pas dans notre cas. Lorsque le capteur est statique, voici les valeurs du gyroscope que nous obtenons :
- x : 0,06 rad/s
- y : -0,02 rad/s
- z : 0,00 rad/s
Sur les applications pratiques, vous devez prendre en compte l’erreur et corriger les valeurs dans le code pour obtenir des lectures plus précises.
Il en va de même pour les valeurs d’accélération. L’accélération de l’axe Z doit être plus proche de la force gravitationnelle (9,8 m/s2), et elle doit être plus proche de zéro sur les axes X et Y. Dans notre cas, voici les valeurs approximatives que nous obtenons lorsque le capteur est statique :
- x : 0,71 m/s2
- y : 0,28 m/s2
- z : 9,43 m/s2
Afficher les lectures du MPU-6050 sur un traceur série
Il existe un exemple similaire, mais avec de légères différences pour afficher les lectures sur le Serial Plotter.
Téléchargez le code suivant sur votre tableau :
// Basic demo for accelerometer readings from Adafruit MPU6050
// Arduino Guide: https://Raspberryme.com/arduino-mpu-6050-accelerometer-gyroscope/
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
void setup(void) {
Serial.begin(115200);
while (!Serial) {
delay(10); // will pause Zero, Leonardo, etc until serial console opens
}
// Try to initialize!
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("");
delay(100);
}
void loop() {
/* Get new sensor events with the readings */
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Print out the values */
Serial.print(a.acceleration.x);
Serial.print(",");
Serial.print(a.acceleration.y);
Serial.print(",");
Serial.print(a.acceleration.z);
Serial.print(", ");
Serial.print(g.gyro.x);
Serial.print(",");
Serial.print(g.gyro.y);
Serial.print(",");
Serial.print(g.gyro.z);
Serial.println("");
delay(10);
}
Après avoir téléchargé le code, dans l’IDE Arduino, accédez à Outils > Traceur série.
Le traceur série affiche les lectures de l’accéléromètre et du gyroscope sur les axes X, Y et Z au fil du temps. Déplacez le capteur de différentes manières et voyez comment les valeurs changent.
Afficher les lectures du MPU-6050 sur l’écran OLED
La bibliothèque Adafruit MPU6050 fournit un exemple qui affiche les lectures du gyroscope et de l’accéléromètre MPU-6050 sur un écran OLED.
Pièces requises
Voici les pièces requises pour compléter cet exemple :
Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Schéma de principe – Arduino avec MPU-6050 et écran OLED
Câblez toutes les pièces comme indiqué dans le schéma suivant. Étant donné que l’écran OLED et les capteurs MPU-6050 utilisent des adresses I2C différentes, nous pouvons les connecter au même bus I2C (mêmes broches sur la carte Arduino).
En savoir plus sur l’utilisation de l’écran OLED avec l’Arduino : Guide pour l’écran OLED I2C avec Arduino
Code – Afficher les lectures du capteur MPU-6050 sur l’écran OLED
Pour utiliser cet exemple, assurez-vous que la bibliothèque Adafruit SSD1306 est installée. Cette bibliothèque peut être installée via le gestionnaire de bibliothèque Arduino.
Aller à Esquisser > Bibliothèque > Gérer les bibliothèques et recherchez « SSD1306” et installez la bibliothèque SSD1306 d’Adafruit.
Pour cet exemple, copiez le code suivant ou accédez à Déposer > Exemples > Adafruit MPU6050 > MPU6050_oled.
// Basic OLED demo for accelerometer readings from Adafruit MPU6050
// ESP32 Guide: https://Raspberryme.com/esp32-mpu-6050-accelerometer-gyroscope-arduino/
// ESP8266 Guide: https://Raspberryme.com/esp8266-nodemcu-mpu-6050-accelerometer-gyroscope-arduino/
// Arduino Guide: https://Raspberryme.com/arduino-mpu-6050-accelerometer-gyroscope/
#include <Adafruit_MPU6050.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
Adafruit_MPU6050 mpu;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
void setup() {
Serial.begin(115200);
// while (!Serial);
Serial.println("MPU6050 OLED demo");
if (!mpu.begin()) {
Serial.println("Sensor init failed");
while (1)
yield();
}
Serial.println("Found a MPU-6050 sensor");
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.display();
delay(500); // Pause for 2 seconds
display.setTextSize(1);
display.setTextColor(WHITE);
display.setRotation(0);
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
display.clearDisplay();
display.setCursor(0, 0);
Serial.print("Accelerometer ");
Serial.print("X: ");
Serial.print(a.acceleration.x, 1);
Serial.print(" m/s^2, ");
Serial.print("Y: ");
Serial.print(a.acceleration.y, 1);
Serial.print(" m/s^2, ");
Serial.print("Z: ");
Serial.print(a.acceleration.z, 1);
Serial.println(" m/s^2");
display.println("Accelerometer - m/s^2");
display.print(a.acceleration.x, 1);
display.print(", ");
display.print(a.acceleration.y, 1);
display.print(", ");
display.print(a.acceleration.z, 1);
display.println("");
Serial.print("Gyroscope ");
Serial.print("X: ");
Serial.print(g.gyro.x, 1);
Serial.print(" rps, ");
Serial.print("Y: ");
Serial.print(g.gyro.y, 1);
Serial.print(" rps, ");
Serial.print("Z: ");
Serial.print(g.gyro.z, 1);
Serial.println(" rps");
display.println("Gyroscope - rps");
display.print(g.gyro.x, 1);
display.print(", ");
display.print(g.gyro.y, 1);
display.print(", ");
display.print(g.gyro.z, 1);
display.println("");
display.display();
delay(100);
}
Comment fonctionne le code
Commencez par inclure les bibliothèques requises pour le capteur MPU-6050 et pour l’écran OLED.
#include <Adafruit_MPU6050.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
Créé un Adafruit_MPU6050 objet appelé mpu pour manipuler le capteur.
Adafruit_MPU6050 mpu;
Créé un Adafruit_SSD1306 objet appelé affichage pour gérer l’écran OLED. C’est pour un affichage avec 128×64 pixels.
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
mettre en place()
Dans le mettre en place(), initialisez le moniteur série à un débit en bauds de 115 200.
Serial.begin(115200);
Initialisez le capteur MPU-6050.
if (!mpu.begin()) {
Serial.println("Sensor init failed");
while (1)
yield();
}
Initialisez l’écran OLED.
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.display();
Définissez la taille de la police et la couleur de l’affichage.
display.setTextSize(1);
display.setTextColor(WHITE);
display.setRotation(0);
boucler()
Dans le boucler() C’est là que nous obtiendrons les lectures du capteur et les afficherons sur l’OLED.
Commencez par créer des événements pour chaque mesure, accéléromètre, gyroscope et température.
sensors_event_t a, g, temp;
Obtenez de nouvelles lectures de capteur.
mpu.getEvent(&a, &g, &temp);
Effacer l’affichage dans chaque boucler() pour écrire de nouvelles lectures.
display.clearDisplay();
Réglez le curseur d’affichage sur (0,0) – le coin supérieur gauche. Il commencera à écrire du texte à partir de cet emplacement.
display.setCursor(0, 0);
Les lignes suivantes impriment les lectures de l’accéléromètre dans le moniteur série.
Serial.print("Accelerometer ");
Serial.print("X: ");
Serial.print(a.acceleration.x, 1);
Serial.print(" m/s^2, ");
Serial.print("Y: ");
Serial.print(a.acceleration.y, 1);
Serial.print(" m/s^2, ");
Serial.print("Z: ");
Serial.print(a.acceleration.z, 1);
Serial.println(" m/s^2");
Les lignes suivantes affichent les valeurs d’accélération x, y et z sur l’écran OLED.
display.println("Accelerometer - m/s^2");
display.print(a.acceleration.x, 1);
display.print(", ");
display.print(a.acceleration.y, 1);
display.print(", ");
display.print(a.acceleration.z, 1);
display.println("");
Affichez les lectures du gyroscope sur le moniteur série.
Serial.print("Gyroscope ");
Serial.print("X: ");
Serial.print(g.gyro.x, 1);
Serial.print(" rps, ");
Serial.print("Y: ");
Serial.print(g.gyro.y, 1);
Serial.print(" rps, ");
Serial.print("Z: ");
Serial.print(g.gyro.z, 1);
Serial.println(" rps");
Enfin, imprimez les lectures du gyroscope sur l’écran.
display.println("Gyroscope - rps");
display.print(g.gyro.x, 1);
display.print(", ");
display.print(g.gyro.y, 1);
display.print(", ");
display.print(g.gyro.z, 1);
display.println("");
Enfin, appelez display.display() pour afficher réellement les lectures sur l’OLED.
display.display();
De nouvelles lectures sont affichées toutes les 100 millisecondes.
delay(100);
Manifestation
Téléchargez le code sur votre carte Arduino.
Ouvrez le moniteur série à un débit en bauds de 115 200, appuyez sur le bouton RST intégré. Les mesures du capteur seront affichées à la fois sur le moniteur série et sur l’écran OLED.
Déplacez le capteur et voyez les valeurs changer.
Conclusion
Le MPU-6050 est un accéléromètre et un gyroscope. Il mesure l’accélération sur les axes X, Y et Z ainsi que la vitesse angulaire. Ce module mesure également la température.
Ce module capteur communique via le protocole de communication I2C. Ainsi, le câblage est simple. Connectez simplement le capteur aux broches Arduino I2C.
Dans ce didacticiel, vous avez appris à câbler le capteur et à obtenir des lectures de capteur. Nous espérons que vous avez trouvé ce guide de démarrage utile. Nous avons des guides pour d’autres capteurs populaires :
En savoir plus sur l’Arduino avec nos ressources :
Merci d’avoir lu.
-
JZK 4 x GY-521 MPU-6050 6DOF Module Gyroscope à 3 Axes Accéléromètre 3 Axes pour Raspberry Pi et Arduino ProjetsModule MPU 6050 Capteur gyroscopique gyroscope 3 axes et module d'accéléromètre 3 axes 6DOF Ce module est basé sur la puce MPU-6050 et combine un gyroscope à 3 axes et un accéléromètre à 3 axes avec un processeur de mouvement numérique (DMP) et un capteur de température. Plage du gyroscope: ± 250 500 1000 2000 ° / s. Gamme d'accéléromètre: ± 2 ± 4 ± 8 ± 16g. Tension de travail: 3V - 5V. Espacement des broches: 2.54mm. La puce est un convertisseur AD 16 bits intégré, une sortie de données 16 bits. Modes de communication: protocole de communication IIC standard. Paquet contient: 4 pièces du module GY 521 MPU 6050. Chaque module: 20mm x 15mm.
-
Hailege 3pcs MPU-6050 MPU6050 GY-521 3 Axis Accelerometer Gyroscope Module 6 DOF 6-axis Accelerometer Gyroscope Sensor Module 16 Bit AD Converter Data Output IIC I2C for ArduinoCommunication mode: standard IIC communication protocol MPU-6050 MPU6050 6-axis Accelerometer Gyroscope Sensor Gyroscopes range: +/- 250 500 1000 2000 degree/sec Chip built-in 16bit AD converter, 16bit data output
-
ARCELI GY-521 MPU6050 Accéléromètre 3 Axe Gyroscope Module 6 DOF 6-axe Accéléromètre Gyroscope Module de Capteur 16 Bit AD Convertisseur de Données Sortie IIC pour ArduinoPuce principale: MPU-6050 Mode de communication: protocole de communication IIC standard Convertisseur AD 16 bits intégré, puce, sortie de données 16 bits Gamme de gyroscopes: +/- 250 500 1000 2000 degré / sec Plage d'accélération: ± 2 ± 4 ± 8 ± 16g