Si vous avez suivi quelques cours de physique, vous savez que l'accélération d'un objet en chute libre est de 9,8 m/s² vers le bas. Et, bien entendu, l'accélération d'un objet qui repose sagement immobile est nulle.
Notre accéléromètre, toutefois, ne fait aucune différence entre la gravité et l'accélération: lorsqu'il est immobile, il mesure une accélération vers le haut égale à 9,8 m/s², et lorsqu'il est en chute libre il mesure une accélération nulle (c'est assez logique: dans l'espace intersidéral, si vous désirez que les passagers d'un vaisseau spatial subissent une gravité artificielle identique à celle de la terre, vous devrez faire subir au vaisseau une accélération de 9,8 m/s²).
Les branchements

- Vcc du breakout au 5V 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.
Le mieux, c'est d'alimenter votre Arduino au moyen d'une pile (dans mon prototype, je me suis contenté de faire passer mon câble USB par un trou dans la boîte).
Bibliothèque MMA7455
À moins que ce ne soit déjà fait, vous installez la bibliothèque mise au point par Moritz Kemper pour utiliser ce genre d'accéléromètre avec l'Arduino.
Le sketch
Rien de bien compliqué ici: nous utilisons la fonction "Tone" pour émettre un son lorsque l'accéléromètre mesure une valeur nulle. Nous avons tout de même une assez grande marge de manoeuvre entre la situation où l'accéléromètre est immobile (il indique alors une accélération de 63) et celui où il est en chute libre. Pour tenir compte des incertitudes de mesure, je me contente de détecter une accélération inférieure à 15.
Pour une meilleure fiabilité, prenez la peine de calibrer votre accéléromètre en modifiant les valeurs de calibrateOffset pour que les valeurs affichées par l'accéléromètre quand il est immobile, bien à plat sur une table soient de 0 en x, 0 en y et 63 en z.
Il ne vous reste plus qu'à tester le dispositif: laissez tomber la boîte, ou lancez-là dans les airs: aussitôt qu'elle quitte vos mains (et jusqu'à ce qu'elle touche au sol), elle émet un beep.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/****************** Détecteur de chute libre ********************** | |
* L'arduino "crie" quand il est en chute libre. | |
* Accéléromtre MMA7455 (SCL - A5 et SDA - A4) | |
* Haut-parleur (pin 9 - GND) | |
* http://electroniqueamateur.blogspot.com/2015/01/une-boite-qui-crie-quand-elle-tombe.html | |
********************************************************************/ | |
#include <Wire.h> // bibliotheque I2C, utilisée par la bibliotheque MMA_7455 | |
#include <MMA_7455.h> // https://code.google.com/p/mma-7455-arduino-library/ | |
#define pinHautParleur 9 | |
MMA_7455 monCapteur = MMA_7455(); | |
char xVal, yVal, zVal; | |
void setup() | |
{ | |
// on regle la sensibilité a 2 (on peut mesurer de -2g a +2g | |
monCapteur.initSensitivity(2); | |
// calibration (faire en sorte que le capteur mesure 0, 0, 63 | |
// quand il est immobile, a plat sur une table | |
monCapteur.calibrateOffset(8, 22, -7); // a modifier en fonction de votre accélérometre! | |
} | |
void loop() | |
{ | |
int total; | |
xVal = monCapteur.readAxis('x'); | |
yVal = monCapteur.readAxis('y'); | |
zVal = monCapteur.readAxis('z'); | |
// valeur totale de l'accélération, peu importe l'orientation | |
// (theoreme de Pythagore) | |
total = sqrt(xVal*xVal+yVal*yVal+zVal*zVal); | |
if (total < 15){ | |
// l'accélération mesurée devient nulle quand l'accélérometre est en chute libre | |
// (alors qu'elle est de 63 quand il est immobile | |
tone(pinHautParleur, 500, 100); // fréquencde de 500 Hz pendant 100 millisecondes | |
} | |
} | |
Yves Pelletier (Twitter: @ElectroAmateur)
Aucun commentaire:
Enregistrer un commentaire