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.

Connexion à la carte Arduino

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)

Schéma du projet

Programme du projet

 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
}

Voici le résultat sur le moniteur série :