samedi 17 janvier 2015

Accéléromètre MMA7455 et Raspberry Pi (python)

Il y a quelques semaines, j'avais utilisé mon accéléromètre MMA7455 avec un Arduino.  Grâce à une bibliothèque réalisée par Moritz Kemper, le processus s'était révélé relativement simple.

Pour le raspberry Pi, je n'ai pas trouvé de bibliothèque python spécifique au MMA7455.  Quelques articles m'ont servi de point de départ (en particulier celui-ci), mais j'ai dû apporter pas mal de modifications au script pour qu'il se comporte comme je le désirais.

1)  Activation du protocole I2C

D'abord, si ce n'est pas déjà fait, il faut activer l'I2C sur le Raspberry Pi.  Ça tombe bien:  j'ai justement publié un article à ce sujet.

2)  Branchements du breakout MMA7455

J'espère que votre accéléromètre MMA7455 se trouve sur un breakout facile à brancher, comme celui qui est représenté sur la photo ci-contre.  Sinon, il est possible de faire des soudures sur le minuscule circuit intégré (comme dans ce projet), mais il faut être diablement habile!

Comme pour tous les périphériques utilisant le protocole I2C, vous devez branchez la pin SDA ("serial data") de l'accéléromètre à la pin 3 (BOARD) / GPIO 2 (BCM) du Raspberry Pi, et la pin SCL ("serial clock") de l'accéléromètre à la pin 5 (BOARD) / GPIO 3 (BCM) du Raspberry Pi.


De plus, il faut alimenter notre accéléromètre en branchant sa pin VCC à une des pins de 3,3 V du Rasbperry Pi, et la pin GND de l'accéléromètre à une des pins GND du Raspberry Pi.

En principe, les périphérique I2C nécessitent une résistance de tirage entre SDA et 3,3 V, et une autre résistance de tirage entre SCL et 3,3 V, mais je n'ai pas eu besoin d'en mettre.



3)  Programme en python

Le script ci-dessous mesure les composantes x, y et z de l'accélération.  Puisque l'accéléromètre a été réglé à une résolution lui permettant de mesurer des valeurs étalées entre -2g et +2g, une accélération de -2g retourne une valeur brute de -127, une accélération nulle retourne 0, et une accélération de +2g retourne 127.

Attention:  l'accéléromètre ne fait aucune différence entre une accélération et la gravité:  si votre accéléromètre est immobile, la force gravitationnelle provoquera une mesure de 63, qui est la valeur qui correspond à 1g (alors que si votre accéléromètre est en chute libre, vous devriez mesurer une valeur de 0 sur tous les axes).

Donc, si votre accéléromètre immobile et horizontal, bien à plat sur une table, vous devriez mesurer une valeur de 0 selon x, 0 selon y et 63 selon z (à cause de la gravité).  Si ce n'est pas le cas, modifiez les valeurs des variables ajustx, ajusty et ajustz.

Le script applique également le théorème de Pythagore afin d'afficher la grandeur de l'accélération totale.

De plus, il affiche l'inclinaison de l'accéléromètre:   l'angle en degrés que fait son axe des x par rapport à l'horizontale, l'angle que fait l'axe des y par rapport à l'horizontale, et l'angle que fait l'axe des z par rapport à la verticale.




Yves Pelletier   (Twitter:  @ElectroAmateur)

Aucun commentaire:

Enregistrer un commentaire