image1

Le module MPU6050 est une centrale inertielle qui permet de mesurer l’évolution d’un objet dans l’espace. Il comporte 6 axes, 3 pour l'accélération et 3 pour le gyroscope

 Il permet de mesurer les accélérations linéaires et angulaires dans les trois axes de l’espace. 

Sa puce MEMS (Microelectromechanical systems) est très précise avec une conversion analogique-digitale sur 16 bits simultanée sur chaque canal, et une interface I2C (Inter Integrated Circuit (SDA, SLC)) cadencée à 400 kHz.

Ce composant se retrouve dans plusieurs applications notamment les manettes de jeux vidéo ou les smartphones. Il peut être utilisé pour faire du contrôle d’assiette sur un drone ou pour équilibrer un robot sur deux roues.

Le capteur contient un registre FIFO (First In, First Out) de 1024 octets que les microcontrôleurs comme un Arduino peuvent lire. Il est doté d'une sortie d'interruption pour être prioritaire dans un programme et interrompre le programme pour lire les nouvelles données envoyées

Le capteur possède également un DMP (Digital Motion Processor) capable de faire des calculs rapides directement sur la puce à partir des mesures brutes du capteur, mais il est aussi possible de traiter les mesures brutes sur son microcontrôleur.

 

Spécification

● Modèle No : MPU6050

● Alimentation : 3,3 à 5 Vcc

● Consommation : 3,9 mA maxi

● Plages de mesure :
    - accéléromètre : ±2 g - ±4 g - ±8 g - ±16 g
    - gyroscope : ±250/500/1000/2000 °/s

● Interface I2C

● Température de service : -40 °C à +85 °C

● Dimensions : 25 x 20 x 7 mm

 

Configuration

 image2

Code

Le programme utilise deux bibliothèques spécifiques MPU6050.h (gestion du MPU6050) et wire.h (gestion du bus I2C) qui doivent être installées au préalable à l’utilisation du module.

// Test module MPU6050 : Accélérometre et Gyromètre
// Le programme lit les données brutes fournies par le MPU6050
// et calcule les angles de tangage et de roulis correspondants

#include "MPU6050.h"
#include "Wire.h"

// Addresse I2C par défaut : 0x68
MPU6050 accelgyro(0x68);

// Définition des variables
int16_t ax, ay, az;
int16_t gx, gy, gz;
int32_t ay32, az32;
int32_t roll, pitch;

void setup()
{
// Initialisation bus I2C
Wire.begin();

// Initialisation de la liaison serie console
Serial.begin(9600);

// Initialisation MPU6050
Serial.println("Initialisation du module I2C ...");
accelgyro.initialize();

//Vérificaiton de la connection
Serial.println("Test de la connexion ...");
Serial.println(accelgyro.testConnection() ? "MPU6050 connexion OK" : "MPU6050 Erreur de connexion");
delay(1000);
}

void loop()
{
// Lecture des données brutes accel/gyro du MPU6050
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

Serial.println("\n Données Brutes");
Serial.print("ax : ");
Serial.print(ax);
Serial.print(" - ay : ");
Serial.print(ay);
Serial.print(" - az : ");
Serial.println(az);
Serial.print("gx : ");
Serial.print(gx);
Serial.print(" - gy : ");
Serial.print(gy);
Serial.print(" - gz : ");
Serial.println(gz);

// Calcul des angles de roulis et tangage
Serial.println(" Tangage et Roulis");
roll = (atan2(-ay, az)*180.0)/M_PI;
ay32 = ay; // 32 bits nécessaires pour calcul des carrés
az32 = az; // sinon erreur de dépassement et calcul erroné
pitch = (atan2(ax, sqrt(sq(ay32) + sq(az32)))*180.0)/M_PI;

Serial.print("Roulis : ");
Serial.print(roll);
Serial.print(" - Tangage : ");
Serial.println(pitch);

delay(300);
}

© Golf-Curve. All Rights Reserved.

Free Joomla templates by L.THEME