jeudi 7 mars 2013

Accéléromètre MMA7455 (et Arduino)

Un accéléromètre pouvant se brancher sur un Arduino:  l'exemple parfait du machin que j'achète parce que ce n'est pas cher et que ça semble intéressant, sans avoir la moindre idée de ce à quoi ça pourra me servir dans un projet concret.

Il s'agit donc d'un petit breakout d'environ 2 cm X 1 cm dont le composant principal est le circuit imprimé MMA7455:  un accéléromètre qui permet de mesurer l'accélération selon 3 axes.  Celui que j'ai acheté a été fabriqué par LCStudio et est vendu sur eBay pour $3...ou $15, ça dépend du vendeur.

D'après la description du vendeur, il peut fonctionner aussi bien à 5 V qu'à 3,3 V.  Et on a le choix entre le protocole SPI ou I2C.

Pour ce premier test rapide, désireux de me faciliter la tâche au maximum, j'ai installé la bibliothèque MMA-7455 mise au point par Moritz Kemper et utilisé l'exemple "simpleRead" qui est distribué avec la bibliothèque.  Cette bibliothèque est conçue pour une utilisation en I2C, ce qui clôt le débat:  j'utiliserai  le mode I2C.

Ma seule hésitation concernait la façon de brancher le breakout à l'Arduino, car le schéma présenté par l'auteur de la bibliothèque concerne un breakout qui n'est pas identique à celui que j'ai utilisé.

Si votre breakout est identique à celui qui apparaît sur la photo au début de cet article, les branchements à faire sont:

  • Vcc du breakout au 5V de l'Arduino (le circuit intégré fonctionne à 3,3 V, mais le breakout comporte un régulateur de tension).
  • 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.
C'est tout:  les 4 autres connecteurs du breakout ne sont pas nécessaires en I2C. Certaines personnes disent que la connexion CS du breakout doit aussi être relié à VCC pour activer le mode I2C, mais dans mon cas j'ai obtenu le même résultat peu importe que CS soit branché ou non.

En principe, l'I2C nécessite des résistances de tirage 4,7 kΩ (entre SCL et 5 V, et entre SDA et 5 V), mais ça fonctionne très bien sans qu'elles soient là.  Elle sont peut-être déjà présentes sur le  breakout? 

J'ai ensuite fait l'essai de l'exemple "simpleRead"  fourni avec la librairie. Lorsque l'accéléromètre est immobile, bien à plat sur la table, le moniteur série affichait initialement une valeur de -6 en x, -15 en y et 71 en z.   On s'attendrait plutôt à 0 en x, 0 en y et 63 en z (63 étant la valeur pour 1g, qui est l'effet de la gravité).  En ajoutant l'instruction  "mySensor.calibrateOffset(6, 15, -8)" au début du sketch, les valeurs affichées sont maintenant les bonnes.

Évidemment, les valeurs changent si je déplace, incline ou secoue l'accéléromètre.  D'après ce que j'ai constaté, l'axe des x est orienté dans le sens de la longueur du breakout, l'axe des y est dans le sens de sa largeur, et l'axe des z est perpendiculaire au plan du breakout.

À lire aussi, 3 projets impliquant cet accéléromètre:




Yves Pelletier (Twitter: @ElectroAmateur)

2 commentaires:

  1. Bonjour Mr Pelletier,
    Que se passe-il si le capteur est en mouvement? La valeur de l'inclinaison sera-elle toujours valable?

    Ou faut il appliquer une méthode différente?

    Merci d'avance.

    Justin.

    RépondreSupprimer
    Réponses
    1. En principe, la valeur reste valable si le capteur se déplace à vitesse constante. Tout se complique si le capteur accélère.

      Supprimer