Communication avec Arduino:
Le MPU6050 utilise le protocole de communication I²C dont la connexion est réalisée par l'intermédiaire de deux lignes :
• SDA (Serial Data Line) : ligne de données bidirectionnelle
• SCL (Serial Clock Line) : ligne d'horloge de synchronisation bidirectionnelle
Dans le monde Arduino, il existe une librairie dédiée à ce protocole : Wire.
En lisant la doc de la librairie Wire Arduino, on voit que sur un Arduino NANO ce sont les entrées analogiques A4 et A5 qui correspondent respectivement à SDA et SCL. On câble donc tout cela ensemble.
Le MPU a besoin d'être alimenté en 3.3V, on relie donc la broche Vcc à la broche 3.3V de l'Arduino et le GND au GND de l'Arduino.
Ce qui nous donne au final ce câblage :
Configuration :
Sensibilité de l’accéléromètre :
Le registre ACCEL_CONFIG permet de configurer la plage de fonctionnement de l'accéléromètre.
Une plage de ±2g est suffisante pour l'étude, ce qui nous amène à utiliser le facteur AFS_SEL = 0
Structure du registre ACCEL_CONFIG
La paramètre AFS_SEL est codé sur les bits 3 & 4. La valeur 0 en binaire s'écrit alors 0 aussi.
Les bits 0, 1 et 2 sont réservés, on les laisse donc à 0.
Les bits 5, 6, 7 servent à effectuer un auto-test des axes X Y Z respectivement. Cela ne nous intéresse pas, on les laisse donc à 0.
Plus loin dans la datasheet, on arrive sur la page du registre Power Management. Ce registre nous permet de choisir la source d'horloge que le MPU va utiliser au travers du paramètre CLKSEL.
Nous allons utiliser ici son horloge interne de 8MHz, soit CLKSEL = 0.
Structure du registre PWR_MGMT_1
Là encore, on voit que ce registre est codé sur 8 bits.
CLKSEL est codé sur les bits 0, 1 & 2. La valeur 0 en binaire s'ecrit alors 000
Le bit 3 TEMP_DIS (temparture disabled) sert à désactiver la lecture de la température lorsqu'il est à 1. On va garder cette information, on laisse donc ce bit à 0.
On laisse le reste à 0, ce qui nous donne au final 00000000 en binaire, soit 0x00 (hex).
Enfin, l'adresse du registre est 0x6B en hexadécimal.
Ce qui nous donne le code Arduino suivant :
Wire.beginTransmission(MPU); // Start communication with MPU6050 // MPU=0x68
Wire.write(0x6B); // Talk to the register 6B
Wire.write(0x00); // Make reset - place a 0 into the 6B register
Filtre passe bas :
Le registre, de nom CONFIG, va nous servir à configurer la fréquence de coupure du filtre passe-bas de l'accéléromètre au travers du paramètre DLPF_CFG.
Digital Low Pass Filter
On va partir sur une fréquendce d'environ ~43Hz, ce qui nous amène à DLPF_CFG = 3.
On laisse les autres bits à 0, ce qui nous amène à en binaire, soit 0x03 en hexadécimal.
Enfin, l'adresse du registre est 0x1A en hexadécimal.
Ce qui nous amène au code Arduino suivant :
Wire.write(0x1A); // Request the CONFIG register
Wire.write(0x03); // Apply the desired configuration to the register : DLPF about 43Hz
Fréquence d’horloge :
Plus loin dans la datasheet, on arrive sur la page du registre Power Management. Ce registre nous permet de choisir la source d'horloge que le MPU va utiliser au travers du paramètre CLKSEL.
Nous allons utiliser ici son horloge interne de 8MHz, soit CLKSEL=0
Structure du registre PWR_MGMT_1
Là encore, on voit que ce registre est codé sur 8 bits.
CLKSEL est codé sur les bits 0, 1 & 2. La valeur 0 en binaire s'ecrit alors 000.
Le bit 3 TEMP_DIS (temparture disabled) sert à désactiver la lecture de la température lorsqu'il est à 1. On va garder cette information, on laisse donc ce bit à 0.
On laisse le reste à 0, ce qui nous donne au final 00000000 en binaire, soit 0x00 (hex).
Enfin, l'adresse du registre est 0x6B en hexadécimal.
Ce qui nous donne le code Arduino suivant :
Wire.beginTransmission(MPU_ADDRESS); // Start communication with MPU
Wire.write(0x6B); // Request the PWR_MGMT_1 register
Wire.write(0x00); // Apply the desired configuration to the register
Wire.endTransmission(); // End the transmission
LECTURE DES DONNEES BRUTES DU MPU6050 :
Maintenant que le MPU6050 est câblé et configuré, il ne reste plus qu'à lire les données brutes du capteur.
On constate dans la table des registres que les registres 59 à 64 stockent les valeurs de sorties de l'accéléromètre .
On va donc simplement parcourir le contenu de ces 6 registres, en commençant à l'adresse 0x3B :
Wire.beginTransmission(MPU_ADDRESS);// Start communicating with the MPU-6050
Wire.write(0x3B); // Send the requested starting register
Wire.endTransmission(false); // End the transmission
Wire.requestFrom(MPU_ADDRESS,6); // Request 14 bytes from the MPU-6050
Mesure de l’accélération :
Un accéléromètre mesure l'accélération subite et l'exprime en g.
1g représente l'accélération de pesanteur sur Terre, soit environ 9,8m.s−29 et des bananes.
L'accéléromètre au repos mesure donc une accélération de 1g.