Vous êtes sur la page 1sur 11

Drone | Arduino #6: Comment ça marche le capteur MPU-6050

GY-521 (Accéléromètre + Gyro) ?

Objectifs
1. Comprendre l’utilité d’un capteur gyroscopique /accéléromètre
2. Savoir utiliser le capteur GY-521 avec Arduino
3. Savoir la différence entre un accéléromètre et un gyroscope
4. Savoir les caractéristiques du gyroscope et de l’accéléromètre
5. Visualiser l’évolution temporelle des signaux des deux capteurs
6. Et plus encore.

Fonctionnement
La carte GY-521 est muni d’un capteur MEMS MPU-6050. Le circuit contient trois capteurs: Un
accéléromètre à trois composantes (3 axes), un gyroscope à 3C et un capteur de
température.

Schéma bloc du circuit MPU-60×0

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

Package du circuit MPU-60×0

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

Schéma électronique de la carte GY-521

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

Caractéristiques du gyroscope
1. Le gyroscope MEMS à trois axes du MPU-60X0 comprend un large éventail de
fonctionnalités:
2. Capteurs de vitesse angulaire (gyroscopes) à sortie numérique des axes X, Y et Z avec
une plage pleine échelle programmable par l’utilisateur de ± 250, ± 500, ± 1000 et ±
2000 ° / s
3. Le signal de synchronisation externe connecté à la broche FSYNC prend en charge la
synchronisation d’image, vidéo et GPS
4. Les ADC 16 bits intégrés permettent l’échantillonnage simultané des gyroscopes
5. Compensation de la stabilité en température intégrée dans le capteur
6. Amélioration des performances de bruit basse fréquence
7. Filtre passe-bas programmable numériquement
8. Courant de fonctionnement du gyroscope: 3,6 mA
9. Faible consommation au repos 5µA
10. Facteur d’échelle de sensibilité calibré en usine
11. Auto-test de l’utilisateur

Caractéristiques de l’accéléromètre
1. L’accéléromètre MEMS à trois axes du MPU-60X0 comprend un large éventail de
fonctionnalités:
2. Accéléromètre à trois axes à sortie numérique avec une plage de pleine échelle
programmable de ± 2g, ± 4g, ± 8g et
3. ± 16g
4. Les ADC 16 bits intégrés permettent l’échantillonnage simultané des accéléromètres
sans multiplexeur
5. Courant de fonctionnement normal de l’accéléromètre: 500µA
6. Courant du mode accéléromètre basse puissance: 10µA à 1,25Hz, 20µA à 5Hz, 60µA à
20Hz, 110µA à 40 Hz

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

7. Détection et signalisation d’orientation


8. Détection de robinet
9. Interruptions programmables par l’utilisateur
10. Interruption High-G
11. Auto-test de l’utilisateur

Applications
1. Stabilisateur vidéo / image
2. Contrôle / navigation des applications de l’interface utilisateur sans contact
3. Technologie MotionCommand (pour les raccourcis gestuels)
4. Contrôle par le mouvement le mouvement (drone, télécommande magic, console de
jeu, etc.)
5. Reconnaissance gestuelle
6. Services basés sur la localisation
7. Stabilisateur des drones et robots
8. Combiné et jeux portables
9. Contrôleurs de jeu basés sur le mouvement
10. Télécommandes 3D pour DTV et décodeurs connectés à Internet, souris 3D
11. Capteurs portables pour la santé, le fitness et le sport
12. Jouets

Montage avec Aduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

// Pinout
/*
VCC -> 3.3 V / 5 V (péférable)
GND -> GND
SCL -> A5
SDA -> A4

XDA -> NC (non connecté)


XCL -> NC
ADO -> NC
INT -> NC
*/

Programme Arduino (voir la vidéo)

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

Fonction de lecture des capteurs


void ReadGY521( int *GyAccTempp, int *GATCorrr)
{
// Init du module GY-521
Wire.beginTransmission(MPU);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true);

// Lecture des données (3 axes accélérometre + température + 3 axes gyroscope


for (int i=0;i<NumData;i++)
{
if(i!=3)
{
GyAccTempp[i]=(Wire.read()<<8|Wire.read()) + GATCorrr[i];
}
else
{
GyAccTempp[i]=(Wire.read()<<8|Wire.read()) + GATCorrr[i];
GyAccTempp[i] = GyAccTempp[i]/340 + 36.53;
}
}
}

Fonction du conversion des données


accéléromètre en pitch/roll/yaw
void ComputeAngle(int *GyAccTempp, double *PitchRol)
{
double x = GyAccTempp[0];
double y = GyAccTempp[1];
double z = GyAccTempp[2];

PitchRol[0] = atan(x/sqrt((y*y) + (z*z))); // pitch


PitchRol[1] = atan(y/sqrt((x*x) + (z*z))); // roll

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

PitchRol[2] = atan(z/sqrt((x*x) + (y*y))); // pitch

//Conversion Radian en degrée


PitchRol[0] = PitchRol[0] * (180.0/pi);
PitchRol[1] = PitchRol[1] * (180.0/pi) ;
PitchRol[2] = PitchRol[2] * (180.0/pi) ;
}

Affichage des données de l’Accéléromètre


Serial.print(GyAccTemp[0]); Serial.print(",");
Serial.print(GyAccTemp[1]); Serial.print(",");
Serial.println(GyAccTemp[2]);

Affichage des données du gyroscope


Serial.print(GyAccTemp[4]); Serial.print(",");
Serial.print(GyAccTemp[5]); Serial.print(",");
Serial.println(GyAccTemp[6]);

Affichage des valeurs de la température


Serial.println(GyAccTemp[3]);

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

Programme principal
#include<Wire.h>
#include <math.h>
#define NumData 7
#define pi 3.1415926535897932384626433832795
#define MPU 0x68

// Pinout
/*
VCC -> 3.3 V / 5 V (péférable)
GND -> GND
SCL -> A5
SDA -> A4

XDA -> NC (non connecté)


XCL -> NC
ADO -> NC
INT -> NC
*/

int GyAccTemp[NumData];
int GATCorr[NumData]={0,0,0,0,0,0,0};
//int GATCorr[NumData]={-950,-300,0,-1600,480,170,210};

double PitchRoll[3];

void setup()
{
// Init module GY-512
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);

// Init port série


Serial.begin(9600);
}
void loop()
{
// Lecture du capteur

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

ReadGY521( GyAccTemp, GATCorr);

// Conversion pitch/Roll / Yaw


ComputeAngle(GyAccTemp, PitchRoll);

// Affichage dans le port série Roll/Pitch/ Yaw en °


/*Serial.print(PitchRoll[0]); Serial.print(",");
Serial.print(PitchRoll[1]); Serial.print(",");
Serial.println(PitchRoll[2]); //Serial.print(";");
delay(100);*/

// Affichage des 3 Axes de l'Accéléromètre


Serial.print(GyAccTemp[0]); Serial.print(",");
Serial.print(GyAccTemp[1]); Serial.print(",");
Serial.println(GyAccTemp[2]);

// Affichage 3 Axes du Gyroscope


/*Serial.print(GyAccTemp[4]); Serial.print(",");
Serial.print(GyAccTemp[5]); Serial.print(",");
Serial.println(GyAccTemp[6]);*/
}

// Lecture des données des capteurs


void ReadGY521( int *GyAccTempp, int *GATCorrr)
{
// Init du module GY-521
Wire.beginTransmission(MPU);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true);

// Lecture des données (3 axes accéléromètre + température + 3 axes gyroscope


for (int i=0;i<NumData;i++)
{
if(i!=3)
{
GyAccTempp[i]=(Wire.read()<<8|Wire.read()) + GATCorrr[i];
}
else
{
GyAccTempp[i]=(Wire.read()<<8|Wire.read()) + GATCorrr[i];
GyAccTempp[i] = GyAccTempp[i]/340 + 36.53;

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Drone | Arduino #6: Comment ça marche le capteur MPU-6050
GY-521 (Accéléromètre + Gyro) ?

}
}
}

//Conversion des données accéléromètre en pitch/roll/yaw


void ComputeAngle(int *GyAccTempp, double *PitchRol)
{
double x = GyAccTempp[0];
double y = GyAccTempp[1];
double z = GyAccTempp[2];

PitchRol[0] = atan(x/sqrt((y*y) + (z*z))); // pitch


PitchRol[1] = atan(y/sqrt((x*x) + (z*z))); // roll
PitchRol[2] = atan(z/sqrt((x*x) + (y*y))); // pitch

//Conversion Radian en degré


PitchRol[0] = PitchRol[0] * (180.0/pi);
PitchRol[1] = PitchRol[1] * (180.0/pi) ;
PitchRol[2] = PitchRol[2] * (180.0/pi) ;
}

Datasheet du circuit MPU-60X0


Datasheet GY-521 MPU-6050
Obtenir le fichier PDF du capteur MPU-60X0

Accueil Drone avec Arduino

Click to rate this post!


[Total: 2 Average: 3]

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Vous aimerez peut-être aussi