vendredi 27 septembre 2019

Accéléromètre/gyro MPU-6050 et Arduino


Amusons-nous un peu avec un accéléromètre MPU-6050 et un Arduino Uno.

Le MPU-6050 est une centrale inertielle qui combine un accéléromètre et un gyromètre, ce qui permet de mesurer son accélération ou son inclinaison.

Connexions à l'Arduino

Le module MPU-6050 communique en I2C, et les connexions seront donc:
  • VCC du MPU-6050: 5 V de l'Arduino*
  • GND du MPU-6050: GND de l'Arduino
  • SCL du MPU-6050: A5 de l'Arduino
  • SDA du MPU-6050: A4 de l'Arduino
*: mon module comporte un régulateur de tension, sinon je l'aurais plutôt branché à 3,3 V.

Je n'ai pas utilisé les autres broches du module MPU-6050 (XDA, XCL, AD0 et INT).


Installation de la bibliothèque

J'ai eu peu de succès avec la bibliothèque de Jeff Rowberg, malgré son excellente réputation: j'obtenais de fréquents "FIFO overflows", et le sketch s'arrêtait de façon intempestive au bout de quelques secondes.

J'ai donc choisi d'utiliser la bibliothèque MPU6050_tockn, également disponible par l'entremise du gestionnaire de bibliothèques de l'IDE Arduino.

Les deux exemples fournis avec la bibliothèque, "GetAllData" et "GetAngle" permettent de vérifier rapidement le fonctionnement correct de l'accéléromètre et d'explorer les données disponibles.


Au démarrage du programme, il faut laisser le MPU-6050 immobile pendant la procédure de calibration.  Différents paramètres sont ensuite affichés dans le moniteur série à chaque seconde.


Une alarme qui retentit quand on bouge le dispositif

Lorsque le MPU-6050 est parfaitement immobile, l'accélération mesurée est de 1 g selon l'axe vertical (c'est causé par la force de gravité). Le sketch ci-dessous active un buzzer piézoélectrique aussitôt que l'accélération mesurée selon n'importe lequel des 3 axes devient supérieure à 1 g.

(N.B.: il s'agit d'un buzzer actif, muni d'un oscillateur interne, qui émet un son aussitôt qu'il est alimenté; il est évidemment possible de modifier le sketch afin d'utiliser un buzzer passif).




Quelques secondes après le démarrage du programme, le buzzer émet un bip pour indiquer que la calibration de l'accéléromètre est terminée.



Une alarme qui retentit quand le dispositif est en chute libre

Si leMPU-6050 est en chute libre, l'accélération mesurée devient nulle. Une minuscule modification au sketch précédent permet d'obtenir un dispositif qui émet un son pendant qu'il tombe.




Une ligne qui demeure obstinément horizontale

Finalement, je me suis amusé à afficher sur un écran OLED SH1106 une ligne qui demeure obstinément horizontale même lorsqu'on incline l'écran.



L'écran et le MPU-6050 partagent la liaison I2C. Par contre, l'écran OLED est alimenté avec 3,3 V.




Articles similaires

Il y a quelques années, j'avais fait quelques expériences avec un accéléromètre MMA7455: secouons cet accéléromètre!,  une boîte qui crie quand elle tombe et mesure d'un angle d'inclinaison.

Yves Pelletier   (TwitterFacebook)


4 commentaires:

  1. Bonjour,
    La bibliothèque utilise-t-elle les fonctions permettant de communiquer avec le DMP (intégré au MPU-6050) pour récupérer la mesure d'angle ?

    RépondreSupprimer
  2. Bonjour, j'ai utilisé la plaquette pour un système un peu similaire à vitre ligne "droite", pour réaliser une manette/guidon de vélo :-)
    https://youtu.be/xQLe7xBNCxI
    Il existe en effet des sous-commandes pour programmer des calculs d'angles ou des conditions, mais c'est tellement compliqué que j'ai fini par faire des calculs approximatifs à la main!

    RépondreSupprimer
  3. Bonjour,
    Merci pour votre partage et pour sa clarté.
    Cependant, je n'ai pas bien compris comment faire pour avoir un inclinomètre (roll pitch) sur une voiture et afficher les ° d'inclinaison (gauche-droite-avant-arrière).
    Bonne continuation.

    RépondreSupprimer
  4. salut tu as l'air de t'y connais
    je voudrais faire un stabiliseur avec 3 step motor 28byj-46 et un arduino nano!
    pourrais tu m'aider stp ???

    RépondreSupprimer