mardi 30 décembre 2014

Secouons cet accéléromètre!

Aujourd'hui, j'ai ressorti mon accéléromètre MMA7455 dont je vous avais brièvement parlé en mars 2013, mais que je n'avais jamais vraiment utilisé. Le but, aujourd'hui, est de mesurer à quel point l'accéléromètre est énergiquement secoué, sur une échelle de 0 à 10. Si l'accéléromètre est immobile, on affiche zéro, s'il est moyennement secoué, on affiche 5, et s'il est très énergiquement secoué, on affiche 10.

Comme tout matériel, j'ai utilisé un breakout comportant l'accéléromètre MMA7455, fabriqué par LCStudio, et un Arduino Uno.

Connexions:

Il n'y a que 4 fils à brancher:
  • Vcc du breakout au 5 V de l'Arduino
  • GND du breakout au GND de l'Arduino
  • SCL du breakout à l'entrée analogique A5 de l'Arduino
  • SDA du breakout à l'entrée analogique A4 de l'Arduino

(Attention:  Si vous utilisez un autre modèle de breakout que celui qui est illustré ci-dessus, il est possible que vous deviez ajouter des résistances de tirage à SCL et SDA, que vous deviez brancher CS à Vcc, et que l'alimentation appropriée soit de 3,3 V plutôt que de 5 V...).

Bibliothèque MMA7455

Ensuite, nous téléchargeons et installons la bibliothèque spécialement conçue par Moritz Kemper pour utiliser ce genre d'accéléromètre avec l'Arduino.

Petite précaution, par contre:  nous allons devoir corriger un bug dans la bibliothèque (à moins, bien sûr, que le bug ait déjà été corrigé au moment où vous lisez ces lignes).

Ouvrez le fichier "MMA_7455.cpp" au moyen de votre éditeur de texte préféré, et détectez ce paragraphe (ce sont les lignes 30 à 44):


Au début du fichier, l'auteur a soigneusement défini les constantes MMA_7455_4G_MODE et MMA_7455_8G_MODE, mais à cet endroit il les appelle par erreur  MMA_7455_2G_MODE.

Le remède est simple:  si sensitivity vaut 4, il faut écrire "MMA_7455_4G_MODE" (on remplace le 2 par un 4), et si sensitivity vaut 8, il faut écrire  "MMA_7455_8G_MODE" (on remplace le 2 par un 8):


 Bien entendu, vous enregistrez et fermez le fichier.


Le sketch

Voici maintenant le sketch qui affichera sur le moniteur série une valeur de 0 à 10 indiquant à quel point l'accéléromètre est fortement secoué.

La sensibilité de l'accéléromètre peut être réglée à 2 (pour mesurer des accélérations se situant entre -2g et +2g), à 4 (pour mesurer des accélérations se situant entre -4g et +4g), ou à 8 (pour mesurer des accélérations se situant entre -8g et +8g).  Il est parfaitement possible d'atteindre une accélération d'environ 8g en secouant l'accéléromètre de façon très énergique, et nous avons donc réglé la sensibilité à 8.

Il peut être pertinent de calibrer votre accéléromètre.  Lorsqu'il est immobile, à plat sur la table (avec la mention "LCStudio" vers le bas), il devrait indiquer une accélération nulle en x et en y, et une accélération de 15 (valeur correspondant à 1 g, qui est l'effet de la force de gravité) sur l'axe des z.  Le mien indiquait -2, -6 et 17, c'est pourquoi j'utilise "calibrateOffset(2, 6, -2)" pour compenser.

L'accéléromètre mesure les 3 composantes de l'accélération (x, y et z), mais je ne m'intéresse qu'à sa grandeur, peu importe sa direction.  C'est pourquoi je calcule la racine carrée de x²+y²+z² (j'ai appliqué le théorème de Pythagore).  Et puisque cette accélération est loin d'être constante pendant qu'on secoue l'accéléromètre, je fais une moyenne sur une centaine de mesures.

Dans cette version, la valeur est affichée sur le moniteur série de l'ordinateur.  Bien entendu, on pourrait allumer des LEDs, afficher le résultat sur un LCD, etc.

Pour bien des utilisations, vous désirerez simplement détecter si oui ou non l'accéléromètre a été secoué, auquel cas il devrait être facile de modifier mon sketch pour répondre à vos besoins.


La prochaine fois, nous verrons comment utiliser l'accéléromètre pour mesurer une inclinaison.

Yves Pelletier (Twitter: @ElectroAmateur)

1 commentaire:

  1. Bonjour, super travail. Je ne penssai pas qu'un accéléromètre pouvait servir à autant d'application =).
    Es que vous avez testé la sensibilité +/-2g et si oui à quoi cela correspond ? Je veux dire par la quelle est la plus petite vibration qu'il peut détecter ? Par exemple es qu'il peut détecter un téléphone qui vibre sur une table par exemple ?

    RépondreSupprimer