Problème de répartition de la gravité sur un accéléromètre

Accéléromètre MMA7361

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour,

Voilà un problème auquel je suis confronté depuis plusieurs jours et je bloque. J’utilise un accéléromètre MMA7361 (pour capter des vibrations, mais à ce stade c’est accessoire) avec un microcontrôleur Teensy (3.2 et 3.6, le problème ne vient pas des µc j’en suis presque certain). La calibration est laborieuse, mais j’ai un truc à peu près cohérent quand l’accéléro est à plat (x=0, y=0, z= 1g, théoriquement, en pratique j’en suis pas loin). C’est vrai aussi quand il est dans des positions précises, à savoir sur chaque tranche (pour mettre 1g et -1g sur tous les axes). En le bougeant très lentement, on devrait donc avoir en théorie la valeur de l’accélération de la gravité (1g) qui se répartit en fonction sur les axes. En simplifiant la lecture du terminal, on devrait donc garder une norme constante.

Afin de faciliter la lecture personnelle, et aussi pour la suite de mon code, j’ai fait en sorte que l’accéléro, immobile ou suivant des mouvements très lents, ressorte une norme égale à 0 (le plus possible), pour mettre en avant les accélérations réelles et pertinentes.

1
2
3
4
5
6
7
8
9
int pourcentage(int n) {
  return (int) (247.00 * (abs( (float) n) / (abs( (float) x) + abs( (float) y) + abs( (float) z))));
}

void loop(){
//...
norme = (int) (sqrt(sq( (long) (abs(x) - pourcentage(x))) + sq( (long) (abs(y) - pourcentage(y) )) + sq( (long) (abs(z) - pourcentage(z)))));
//...
}

Ce que fait ce code: il calcule le pourcentage de chaque axe par rapport à 1g (247 en valeur affichée), et soustrait cette valeur de pourcentage à la valeur de l’axe, puis calcule la norme résultante. Ainsi, l’accéléromètre à plat, avec x=0, y=0 et z= 247, les pourcentage de x et y seront de 0, donc sans importance dans le calcul, mais z sera de 100%, donc on aura 247-247, donc une norme finale nulle. Ca permet de mettre de côté tout mouvement lent etc., et tout ce qui dépasse 1g apparaîtra donc clairement sur le terminal.

Maintenant, le problème. Dans la réalité, l’accéléromètre ne répartit pas efficacement la gravité sur les trois axes, et au lieu d’avoir entre 0 et 20 environ comme c’est le cas à plat, si je le mets sur un des coins, donc là où la gravité travaille le plus sur les trois axes, j’ai une norme de 100 environ, alors qu’avec le bruit et tout elle ne devrait pas dépasser 20. C’est un problème majeur pour mon projet et je ne vois pas comment le résoudre. Si vous avez besoin de précisions je suis à votre disposition.

Merci de votre aide.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte