Arduino – Utiliser un MPU6050

Afin de mesurer, une inclinaison, une accélération (du coup une vitesse), le MPU6050 est un composant incontournable et à bas prix qui s’utilise de manière très simple, voici un petit guide sur l’utilisation de celui-ci.

Pour un détecteur de choc, un calcul de vitesse, une accélération ou une inclinaison, l’un des composants incontournable est le MPU6050 pour un petit prix.

Dans quel cas utiliser MPU6050

Sa mise en place facile en fait un composant facilement implantable dans tout projet sous arduino ou Raspberry. Il vous permettra de :

  • déterminer une inclinaison dans les trois axes
  • déterminer une accélération
  • par une première intégration de l’accélération en fonction du temps, il pourra donner la vitesse
  • Par une seconde intégration de l’accélération en fonction du temps, il donnera une distance

Pour sa fiche technique complète, visitez ce lien.

Présentation du MPU6050

Le MPU6050 a l’énorme avantage de fonctionner avec le protocole I2C pour communiquer ce qui ne prendra que deux pins (SDA, SCL). Sa consommation est de l’ordre de 5mA.

mpu6050 pin
mpu6050 pin

Pour le câblage, respecter :

  • VCC sur le 5V de l’arduino
  • GND sur la masse de l’arduino
  • SDA sur la pin A4
  • SCL sur la pin A5
  • INT sur une sortie digital (par exemple D2), il s’agit du signal d’interruption

Voilà ce que donnerai le câblage :

Câblage arduino et MPU6050
Câblage arduino et MPU6050

Codage sur l’arduino

Installation des librairies

Commencer par télécharger ces deux librairies (si elles ne sont pas encore installées) :

Code arduino

#include "I2Cdev.h"
#include "MPU6050.h"

#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif

MPU6050 accelgyro;

int16_t ax, ay, az;
int16_t gx, gy, gz;

#define OUTPUT_READABLE_ACCELGYRO

#include "LiquidCrystal.h" //ajout de la librairie

#define LED_PIN 13
bool blinkState = false;
LiquidCrystal lcd(2,3,4,5,6,7);

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        Wire.begin();
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
        Fastwire::setup(400, true);
    #endif
    lcd.begin(20,4);
    lcd.clear();
    lcd.setCursor(0,0);

    // initialize device
    accelgyro.initialize();

    // verify connection
    lcd.print(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
    delay(1000);
    // configure Arduino LED for
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    // read raw accel/gyro measurements from device
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

    #ifdef OUTPUT_READABLE_ACCELGYRO
        // display tab-separated accel/gyro x/y/z values
        lcd.clear();
        lcd.setCursor(0,1);
        lcd.print(ax);
        lcd.setCursor(6,1);
        lcd.print(ay);
        lcd.setCursor(14,1);
        lcd.print(az);
        lcd.setCursor(0,2);
        lcd.print(gx);
        lcd.setCursor(6,2);
        lcd.print(gy);
        lcd.setCursor(14,2);
        lcd.print(gz);
        delay(500);
    #endif

    // blink LED to indicate activity
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
}

Ceci va simplement afficher sur le LCD les valeurs mesurées.

A vous de jouer avec ce code afin de l’adapter à vos besoin, plein de tutoriels sont présents sur le net mettant en oeuvre un processing 3D, ces tutoriels ajoutent d’autres notions qui ne vous seront peut-être pas utiles d’où leur absence dans cet article.

Laisser un commentaire