Go Down

Topic: Compas numérique - HMC5883L - fonctionnement (Read 10792 times) previous topic - next topic

Hexor

Bonjour à tous,

Voilà bientôt 1 semaine que je tente de faire fonctionner un module HMC5883L avec mon arduino pro mini : (http://www.gotronic.fr/art-magnetometre-3-axes-hmc5883l-20989.htm)

1ère question, il y a un repère X,Y,Z sur le pcb, est-ce bien le Y qui est sensé indiquer le Nord ? impossible de trouver l'info sur le net, personne ne le précise.

2 - J'ai vu sur pas mal de site qu'il était question de calibrer le compass, mais je n'ai jamais rien réussi à tirer de ce capteur, par exemple si je ne le touche pas, il peut indiquer 20° puis quelques lecture plus tard 27° etc.

Des fois je le fais tourner d'environ 90° voir 180° mais la valeur lu en degré va varier de seulement 10/15 degré...

Auriez-vous quelques explications claires sur le fonctionneemnt de ce module ??? car là ...  :smiley-yell:  :smiley-yell:  :smiley-yell:

Merci pour votre aide :)

bricoleau

Ton sujet m'intéresse car j'ai commandé le mien et suis en attente de livraison (par bateau à vapeur depuis l'asie).

C'est vrai qu'en regardant le datasheet du HMC5883L, le calcul du cap ne m'a pas semblé d'une grande évidence.

Si j'ai bien compris il ne s'agit pas simplement de prendre la valeur x,y, ou z, mais d'effectuer un calcul d'arc-tangente à partir de x et y.

La librairie par laquelle je compte commencer mes tests est celle-là.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

bricoleau

Voici un extrait de leur code source, dont les commentaires sont assez parlants sur la manière d'exploiter le résultat :

Code: [Select]
  /* Display the results (magnetic vector values are in micro-Tesla (uT)) */
  Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print("  ");Serial.println("uT");

  // Hold the module so that Z is pointing 'up' and you can measure the heading with x&y
  // Calculate heading when the magnetometer is level, then correct for signs of axis.
  float heading = atan2(event.magnetic.y, event.magnetic.x);
 
  // Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
  // Find yours here: http://www.magnetic-declination.com/
  // Mine is: -13* 2' W, which is ~13 Degrees, or (which we need) 0.22 radians
  // If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
  float declinationAngle = 0.22;
  heading += declinationAngle;
 
  // Correct for when signs are reversed.
  if(heading < 0)
    heading += 2*PI;
   
  // Check for wrap due to addition of declination.
  if(heading > 2*PI)
    heading -= 2*PI;
   
  // Convert radians to degrees for readability.
  float headingDegrees = heading * 180/M_PI;
 
  Serial.print("Heading (degrees): "); Serial.println(headingDegrees);
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Hexor

Salut,

Effectivement il y a bien une histoire d'arc tangeant.

Après avoir essayé je ne sais combien de librairies, j'utilise, pour le moment, celle ci: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-magnetometr-hmc5883l.html

Elle offre notamment un code qui permet d'effectuer la calibration, mais je n'ai pas bien compris le fonctionnement pour le moment.

A force de tester, je viens de m'apercevoir d'une chose: mon HMC5883 est monté sur connecter "secable" classique et il y a du jeu... il n'est en fait pas vraiment de niveau et on peut le bouger un peu à la main.
Et justement ça change de beaucoup les valeur, je peux changer le résultat de 20°....

Je vais dans un premier temps devoir revoir ma fixation...

cassiope34

#4
Feb 04, 2015, 05:35 pm Last Edit: Feb 04, 2015, 05:38 pm by cassiope34
Il y aurait bien peut-être ce site : tinycompass  c'est bien le HMC5883 dessus...

B@tto

Salut,

Est-ce qu'il y d'autres choses à côté de ton compas ? Y'a pas longtemps je me suis pris la tête avec, à lire toute les doc dessus parce qu'il faisait n'importe quoi. En fait c'était l'antenne du GPS à côté qui le faisait déconner. Ce chip mesure des champs magnétiques faibles, on a vite fait de le perturber
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Hexor

Salut,

Il y a en effet un GPS à proximité, ainsi que l'arduino et un module ethernet.
Depuis que je l'ai soudé directement sur la plaque à trou (je ne passe donc plus par un header 2.54mm) il a l'air de moins délirer....

Je vais le laisser tourner toute la nuit et je regarderai les logs pour voir s'il y a eu des changements énormes de valeur.

Mais du coup pour que la lecture soit fiable, il faut, comme j'ai pu le voir sur le net, le coupler à un accéléromètre, j'ai l'impression. 
Car il est assez sensible sur le fait de ne pas être parfaitement horizontal... (d'ailleurs la librairie que j'utilise propose deux sketch avec compensation de l'inclinaison via accéléromètre).


cassiope34:
Merci pour le site, je vais regarder ça de plus prêt =D


Il faut que je comprenne aussi ce qu'apporte le "self test" qui est intégré au chip par rapport à ce que  "tinycompass" propose (morceau de code que j'ai d'ailleur croisé dans plusieurs librairies)
(Dans la doc ils disent que le self test peut aussi être utilisé pour compenser une dérive du à la température)

C'est un peu nouveau pour moi ces compass et je patauge un peu, surtout sur la partie calibration qui  à pourtant l'air d'être capitale... (si quelqu'un saurait m'expliquer la différence entre le self test et la calibration via le code arduino, je suis preneur  :smiley: )

B@tto

Salut,

Il y a en effet un GPS à proximité, ainsi que l'arduino et un module ethernet.
Depuis que je l'ai soudé directement sur la plaque à trou (je ne passe donc plus par un header 2.54mm) il a l'air de moins délirer....

Hey hey :)

Après avoir virer le GPS perso c'était bien réactif
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

cassiope34

#8
Feb 05, 2015, 08:22 am Last Edit: Feb 05, 2015, 08:35 am by cassiope34
Il y a aussi un super gars (Nulentout) qui s'est bien amusé avec un HMC6352 (aussi un compass) dans son excellent receuil de programmes.
C'est dans ! Test des divers modules / Boussole_statique   et aussi dans ! Mini PROJETS / Barre_automatique_MC1811  où il parle des contraintes d'horizontalité et de sensibilité à l'environnement magnétique parasite du composant mais pas de nécessité d'association avec un accéléromètre...
Par contre il parle d'un delai de 6ms nécessaire au composant lorsqu'il reçoit une commande.

Dans le code TinyCompass Compass_V2.ino je n'ai pas lu de self-test mais la callibration semble se faire en faisant faire plusieurs tours sur lui-même au composant puis une moyenne des valeurs reçues serait prise comme référence...

B@tto

Après il faut toute proportion garder : c'est pas un chip très haut de gamme ... Faut pas non plus lui demander la lune.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Hexor

Bon, bah à priori il déraille un peu moins depuis qu'il est soudé directement sur la platine...
Il oscille de quelques degrés quand même (3°) entre plusieurs mesures, mais bon, dans mon cas c'est acceptable.

A l'instant je test sans le GPS à proximité, et la valeur retournée à changée de -3° environ (avec toujours l'oscillation à +/- 3°)

Mais si j'ai bien compris, le "self test" inclus dans le chip permet justement d'atténuer les perturbations électromagnétiques environnantes (GPS, électronique etc.)


Je vais le laisser tourner encore un peu comme ça et voir ce que ça donne.
Après je vais tester en lui donnant différentes orientations, car pour le moment il est resté fixe.

Quote
Après il faut toute proportion garder : c'est pas un chip très haut de gamme ... Faut pas non plus lui demander la lune.
Pour le prix, c'est sur !  :smiley-lol:


Prochaines étapes:
- me familiariser avec la calibration que propose les librairies, et aussi le self test.
- Etudier l'importance, ou non, d'être bien horizontal.

B@tto

Le self test ne permet que de calibrer la mesure en elle même, ça ne change rien par rapport à une influence externe. Les procédures de calibration complète sont beaucoup plus complexe
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Hexor

Ha ok, je pensais que ce self test permettait de tenir compte de la perturbation ambiante, vu que par exemple dans la doc ils disent qu'il est possible d'utiliser ce self test pour palier à une dérive du à la T° ambiante.
Je pensais que le chip générait un champ magnétique, donc connu, qu'il mesurait "l'orientation" de ce champs, et corrigeait les perturbation en comparant valeur attendu et valeur réellement lu.

Bon sinon pour le moment le compass ne débloque plus, le soucis venait apparemment de l'endroit où je faisais mes tests, car même la boussole de mon téléphone portable avait un comportement très étrange à cet endroit là....


Affaire à suivre :)

Hexor

Bonjour à tous,

Me revoilà à l'attaque avec ces fameux compass !  :smiley-grin:

J'ai une petite question aux possesseurs de ce chip:
en général il y a un repère sur le PCB (X, Y, Z), quelle axe entre X et Y est sensé "indiquer la mesure" ?
(Autrement dit, si je lit la valeur 0° sur l'arduino, ce qui veut donc dire qu'il s'agit du Nord, qui de X ou Y pointe vers le Nord à ce moment là ?)

Car là avec un chip c'est apparemment le X qui indique l'axe de mesure, mais sur un autre, c'est le Y qui m'indiquait la mesure, soit donc un décalage de 90°....

Merci pour votre aide,
Bonne journée,


Go Up