Le GY-521 est un module basé sur le MPU-6050, un capteur combinant accéléromètre et gyroscope. Il permet de mesurer les mouvements et les rotations dans les trois axes (X, Y, Z), ce qui en fait un outil idéal pour les projets d’inertie et de suivi de mouvement.
Le GY-521 communique via le protocole I²C, ce qui facilite son branchement sur une carte Arduino :
VCC → 5V (ou 3.3V selon votre modèle Arduino)
GND → GND
SCL → A5 (sur Arduino Uno)
SDA → A4 (sur Arduino Uno)
Pour ce projet, il vous faudra télécharger la librairie suivante : librairie.
Pour l’installer, vous pouvez consulter notre cours dédié aux bibliothèques.
#include <Wire.h> // Librairie pour la communication I2C
const int MPU_addr = 0x68; // Adresse I2C du MPU-6050
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; // Variables pour stocker les données du capteur
void setup() {
Wire.begin(); // Initialisation de la communication I2C
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // Sélection du registre PWR_MGMT_1
Wire.write(0); // Mettre à 0 pour réveiller le MPU-6050
Wire.endTransmission(true);
Serial.begin(9600); // Initialisation de la communication série pour l'affichage
}
void loop() {
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // Commence la lecture à partir du registre 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 14, true); // Demande la lecture de 14 registres
// Lecture des valeurs de l'accéléromètre
AcX = Wire.read() << 8 | Wire.read(); // ACCEL_XOUT_H & ACCEL_XOUT_L
AcY = Wire.read() << 8 | Wire.read(); // ACCEL_YOUT_H & ACCEL_YOUT_L
AcZ = Wire.read() << 8 | Wire.read(); // ACCEL_ZOUT_H & ACCEL_ZOUT_L
// Lecture de la température
Tmp = Wire.read() << 8 | Wire.read(); // TEMP_OUT_H & TEMP_OUT_L
// Lecture des valeurs du gyroscope
GyX = Wire.read() << 8 | Wire.read(); // GYRO_XOUT_H & GYRO_XOUT_L
GyY = Wire.read() << 8 | Wire.read(); // GYRO_YOUT_H & GYRO_YOUT_L
GyZ = Wire.read() << 8 | Wire.read(); // GYRO_ZOUT_H & GYRO_ZOUT_L
// Affichage des données sur le moniteur série
Serial.print(" | AcX = "); Serial.println(AcX);
Serial.print(" | AcY = "); Serial.println(AcY);
Serial.print(" | AcZ = "); Serial.println(AcZ);
Serial.print(" | Température = "); Serial.println(Tmp / 340.0 + 36.53); // Conversion en °C selon la datasheet
Serial.print(" | GyX = "); Serial.println(GyX);
Serial.print(" | GyY = "); Serial.println(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
Serial.println(); // Ligne vide pour séparer chaque lecture
delay(333); // Pause de 333 ms entre chaque lecture
}