Principe de fonctionnement de l'accélerometre MPU6050

Bonjour,

J'aurai une question sur le principe de fonctionnement d'un accéléromètre MPU6050.

De ce que je sais, accéléromètre mesure l’accélération linéaire du composant.
Donc si l'objet n'est pas en mouvement le capteur devrait me donner une valeur autour de 0 (après calibration).

Dans un petit projet de test sur le capteur je me suis rendu compte que le capteur mesurer, dans mon cas, une position par exemple:
si je fait monter mon capteur de quelques centimètres la valeur en Y monte jusque environ 3000(c'est censée être mon accélération) mais reste à 3000 même si j’arrête de bouger mon module et elle ne reviens pas à la "normal" tant que je n'ai pas remis le module à sa place initiale.

J'ai tester avec différent programme et type de programmation avec des codes fait à la main et d'autre trouver sur Internet mais c'est le même résultat donc sa doit venir de ma compréhension et non du code.

Y'a t'il quelque chose que je n'ai pas compris a propos de ce capteur et est-il possible de me l'expliquer ?

Merci d'avance !
Azzog

C'est bizarre : un accéléromètre doit mesurer une accélération. Lorsqu'il est au repos (aucune accélération ne lui est fournie) alors il ne mesure que l'accélération de la pesanteur, répartie sur ses 3 axes.
Si tu le poses sur une table, il te donnera une valeur qui correspond à la pesanteur.
Si ensuite, tu le déplaces : lors du mouvement, il te donnera des valeurs qui changent car il est fort probable que ton mouvement ne soit pas linéaire et uniforme (vitesse constante).
Lorsque tu le reposeras autre part, il te redonneras les valeurs de la pesanteur. S'il est orienté comme au début, les valeurs sur les 3 axes seront proches de celles que tu avais alors.

Ce que tu vois vient peut-être des paramètres internes, comme par exemple les valeurs min et max admissibles. Si le capteur sature, on peut imaginer le comportement que tu décris.

Je crois que j'utilise cette bibliothèque :

Si tu regardes le fichier .h, tu y verras tout un ensemble de paramètres ainsi qu'un grand nombre de méthodes qui permettent de le configurer.

La bibliothèque Adafruit est un poil plus simple : le fichier .h :

montre qu'on peut choisir une gamme de valeurs d'accélération (2g, 4g, 8g, 16g), de vitesse de variation des angles (c'est un gyromètre : il ne mesure pas des angles mais des vitesses angulaires : 250°/s à 2000°/s), la bande passante du filtre d'acquisition (5 Hz à 260 Hz) du µC embarqué, la vitesse d'acquisition (1.25 Hz à 40 Hz).
Ca fait pas mal de paramètres qui, s'ils sont mal choisis, peuvent mener à des mesures erronées ou incompréhensibles.

Le mieux est de chercher un bon tuto qui explique tout ça. Par exemple :

Merci de votre réponse, j'utilise la même bibliothèque "MPU6050.h" qui est un peu plus compliquer mais ou je me sens plus libre pour faire ce que je veut.
J'avais donc bien compris le principe de l'accéléromètre.
J'ai ajouter dans mon code la ligne:

mpu.resetAccelerometerPath();

Qui me permet de reset la valeur de mon capteur après mouvement et donc l'accélération est bonne et quand je m’arrête il reviens à la valeur initiale du moment qu'il reste dans sa position initial (si il n'y a pas eu de rotation sur X ou Z).

Je vais essayer de revoir ma sensibilité ainsi que ma bande passante et m'aider du tutoriel.

Encore merci pour votre réponse !

Edit: Je viens de tester via le programme du tutoriel en position initial XAcc=1 je tourne mon capteur de 90° la valeur monte à 10 et reste à 10 après avoir fini ma rotation alors que ma valeur de Gyroscope en X passe de 0 à 2 pendant la rotation et à la fin de la rotation elle repasse à 0.

Si ton composant est immobile, il mesure la pesanteur.
Tu peux calculer le module de l'accélération par :
float module = sqrt(a.acceleration.x * a.acceleration.x + a.acceleration.y * a.acceleration.y + a.acceleration.z * a.acceleration.z);
et l'afficher dans la console pour vérifier que tu as bien les mêmes valeurs avant et après le déplacement. Les valeurs en X, y et z dépendent de l'orientation du capteur.

Je ne sais pas quel module (je veux dire par là, quel PCB + capteur) tu as. Certains ont un schéma dessiné montrant les directions des axes : ça te permet de savoir comment l'orienter ou quels axes interroger selon ton besoin.

c'est bizarre, normalement, ce n'est pas nécessaire.

Mon capteur est un MPU5060 GY-51 et j'utilise un Arduino Uno, mon objectif avec ce capteur est de mesurer des vibrations et les stocker à l’extérieur de l'arduino.
En soit tout fonctionne sauf l'accéléromètre en X et Y.

Désolé je ne peut pas transmettre mon code pour des raisons professionnelles.

Au niveau de l'orientation du capteur j'ai compensé par des offset car je ne peut pas positionner le capteur dans le sens qu'il faudrait.
Ensuite pour le module la valeur est de 100 plus basse quand je suis en position initial, il y'a donc un problème quelque part mais la je sèche totalement.

Je comprends. Dans ce cas, fais un code simplifié, basé sur un des exemples de la bibliothèque, et vérifie que tu obtiens toujours ces valeurs.

Déjà essayer avec les codes de bibliothèques et des codes trouver sur internet avec les 2 bibliothèques mais c'est le même résultat.
J'ai essayer avec un autre exemplaire de ce capteur mais pareil.
Et avec un autre carte Arduino Uno R3 et c'est toujours le même résultat.

Donc sa ne viens ni de mon capteur(sauf si les 2 que j'ai son défectueux mais très peu probable), ni de mon arduino, ni du code (car j'ai vraiment essayer beaucoup de code différent)

Je précise aussi que je récupére et utilise mes valeurs qu'avec la bibliothèque MPU6050. Il n'y a ni traitement ni calcule dessus qui pourrais les modifiers, pour les utilisées je passe par d'autre variable de "sauvegarde".

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.