boussole avec un 18 m2 et le HMC5883L

ber

New Member
Bonjour a tous quelqu'un a t'il réalisé une boussole avec un 18m2 et un
Module boussole 3 axes HMC5883L

je développerai ma question en fonction des réponses.
dans un premier temps j'ai juste besoin de détecter un variation de position du champ magnétique , en azimut .


le 18m2 étant capable de gerer l'i2c il devrait pouvoir communiquer avec le module , par contre quelqu'un a t'il déjà fait cette réalisation ?

voici le lien vers le data sheet du module

https://www.sparkfun.com/products/10530

Merci:
 

BESQUEUT

Senior Member
Bonjour a tous quelqu'un a t'il réalisé une boussole avec un 18m2 et un
Module boussole 3 axes HMC5883L

je développerai ma question en fonction des réponses.
dans un premier temps j'ai juste besoin de détecter un variation de position du champ magnétique , en azimut .
:
C'est déjà beaucoup !
Attention : ce module n''est pas compensé en fonction de l'inclinaison et ne dispose pas d'un accéléromètre 3 axes qui permettrait éventuellement de calculer cette compensation.
La détection d'une variation reste en théorie possible, mais cette détection suppose un seuil de déclenchement et ce seuil va varier suivant l'inclinaison du module.
Donc je pense que ça ne sera fiable que si le module est bien horizontal.

Je ne l'ai jamais fait avec ce module, mais la lecture des registres via I2C ne devrait poser aucun problème.
 

PieM

Senior Member
dans un premier temps j'ai juste besoin de détecter un variation de position du champ magnétique , en azimut .

le 18m2 étant capable de gerer l'i2c il devrait pouvoir communiquer avec le module , par contre quelqu'un a t'il déjà fait cette réalisation ?
Bonjour et bienvenue,

S'il ne s'agit que de détecter une variation de position du champ magnétique, c'est assez simple car il ne suffit que de lire et comparer les données brutes.
Si par contre il faut une valeur en azimut, alors cela suppose un peu de calcul avec une routine Arc Tangente.
Bien réfléchir aux développements futurs, lesquels peuvent conduire à une usine à gaz en calculs...
D'autre types de capteurs que celui ci très ancien, seraient alors plus indiqués.

Ce capteur est très sensible aux masses métalliques à proximité.
Penser à définir le gain maxi pour avoir la meilleure résolution, et le mode de lecture sans moyenne.

Si besoin, je vous donnerai un bout de programme pour la lecture des données.
 

BESQUEUT

Senior Member
il suffit de lire et de comparer les données brutes.
Avec une certaine tolérance... qui peut varier du simple au triple suivant la direction...
Si les variations à détecter sont subtiles, cette étape ne me semble déjà pas si simple.
 

ber

New Member
Bonjour a tous , je m'excuse pour le retard dans ma réponse ,j'était indisponible.
Donc j'ai fait des essais avec une boussole électronique du commerce , constatation , même à plat et en dehors de toute perturbations magnétique l'indication est instable , elle varie en moyenne de +/- 2° , donc c'est déja un paramètre a prendre en compte.
j'ai approché une masse magnétique, là l'indication de la boussole se fige , il ne s'agit donc pas d'une instabilité du système électronique.

le but est de détecter une variation de plus de 5° donc en dehors de la zone instable: la "boussole sera fixe et a plat" je veux détecter le mouvement un objet (amagnétique) qui lui sera porteur d'un aimant et forcera la boussole dans un azimut différent du Nord

Piem , j'accepte volontiers de l'aide avec le bout de programme pour me mettre le pied a l'étrier:


Merci a Tous !
 

PieM

Senior Member
même à plat et en dehors de toute perturbations magnétique l'indication est instable
Si l'indication est instable, c'est qu'il y a vraisemblablement une perturbation électromagnétique , et l'électronique peut être instable si le champs est très faible.
L'instabilité est neutralisée avec un champ important.

Il faut bien comprendre aussi que dans le cas d'un aimant, l'éloignement de l'aimant, selon son champ, sera vu comme un déplacement en azimut!
Le capteur voit en effet la combinaison vectorielle du champ terrestre et de l'aimant.
Et si la précision de ce type de capteur est de l'ordre de 2°, la résolution elle, est excellente.

Ce bout de programme permet de lire les valeurs des axes X et Y, normalement entre -2048 et + 2047
ces valeurs sont ramenées entre 0 et 4095.
Ne connaissant pas l'amplitude ni la trajectoire de déplacement de l'aimant, difficile de donner plus d'indication.

D'autre part il faut partir sur la sensibilité minimum du capteur (étendue de mesure maxi)
l'augmenter si les variations du résultat sont faibles.
Code:
[COLOR=Green]'###########################################
'#  Capteur HMC5883L
'###########################################[/COLOR]


[COLOR=Navy]#picaxe [/COLOR][COLOR=Black]18M2[/COLOR]
[COLOR=Green]'variables =============================[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]Val_x [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]w2 [/COLOR][COLOR=Green]'composante x (b4 et b5)[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]Val_y [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]w3 [/COLOR][COLOR=Green]'composante y (b6 et b7)[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]Val_z [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]w4 [/COLOR][COLOR=Green]'composante z (b8 et b9)

'initialisation ===========================[/COLOR]
[COLOR=Blue]hi2csetup i2cmaster[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]$3C[/COLOR][COLOR=Black], [/COLOR][COLOR=Blue]i2cslow[/COLOR][COLOR=Black], [/COLOR][COLOR=Blue]i2cbyte [/COLOR][COLOR=Green]' init I2C[/COLOR]
[COLOR=Blue]hi2cout [/COLOR][COLOR=Navy]$00[/COLOR][COLOR=Black], [/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]%01110000[/COLOR][COLOR=Blue]) [/COLOR][COLOR=Green]'moyenne sur 8 mesures , 15 résultats par secondes[/COLOR]
[COLOR=Blue]hi2cout [/COLOR][COLOR=Navy]$01[/COLOR][COLOR=Black], [/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]11100000[/COLOR][COLOR=Blue]) [/COLOR][COLOR=Green]'etendue de mesure +/- 8.1 Gauss
'hi2cout $01, (10000000) 'etendue de mesure +/- 4 Gauss
'hi2cout $01, (00000000) 'etendue de mesure +/- 0.88 Gauss[/COLOR]

[COLOR=Black]main: [/COLOR][COLOR=Green]'======================================[/COLOR]
[COLOR=Blue]do
hi2cin [/COLOR][COLOR=Navy]$03[/COLOR][COLOR=Black], [/COLOR][COLOR=Blue]([/COLOR][COLOR=Purple]b5[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b4[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b9[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b8[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b7[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b6[/COLOR][COLOR=Blue])  [/COLOR][COLOR=Green]'lecture des valeurs x,z, et y[/COLOR]
[COLOR=Blue]pause [/COLOR][COLOR=Navy]100[/COLOR]
[COLOR=Green]'mise à l'échelle 0 à 4095 des valeurs -2048 + 2047 fournies en complément à 2[/COLOR]
[COLOR=Black]val_x [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Black]val_x [/COLOR][COLOR=DarkCyan]+ [/COLOR][COLOR=Navy]2047[/COLOR]
[COLOR=Blue]If [/COLOR][COLOR=Black]Val_x [/COLOR][COLOR=DarkCyan]>= [/COLOR][COLOR=Navy]$8000 [/COLOR][COLOR=Blue]then[/COLOR]
[COLOR=Black]Val_x [/COLOR][COLOR=DarkCyan]= - [/COLOR][COLOR=Black]Val_x [/COLOR][COLOR=DarkCyan]- [/COLOR][COLOR=Navy]30720 [/COLOR]
[COLOR=Blue]endif[/COLOR]

[COLOR=Black]val_y [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Black]val_y [/COLOR][COLOR=DarkCyan]+ [/COLOR][COLOR=Navy]2047[/COLOR]
[COLOR=Blue]If [/COLOR][COLOR=Black]Val_y [/COLOR][COLOR=DarkCyan]>= [/COLOR][COLOR=Navy]$8000 [/COLOR][COLOR=Blue]then[/COLOR]
[COLOR=Black]Val_y [/COLOR][COLOR=DarkCyan]= - [/COLOR][COLOR=Black]Val_y [/COLOR][COLOR=DarkCyan]- [/COLOR][COLOR=Navy]30720 [/COLOR]
[COLOR=Blue]endif

loop[/COLOR]
 

ber

New Member
Merci infiniment , pour la gestion du capteur , je vous tient au courant des essais !
je n'ai pas encore fait l'achat du module.

'initialisation ===========================
hi2csetup i2cmaster, $3C, i2cslow, i2cbyte ' init I2C
hi2cout $00, (%01110000) 'moyenne sur 8 mesures , 15 résultats par secondes
hi2cout $01, (% 11100000) 'etendue de mesure +/- 8.1 Gauss
----------------I----- j'ai fait la correction du symbol % qui avait disparu.

cordialement
 

BESQUEUT

Senior Member
le but est de détecter une variation de plus de 5°
Comme déjà dit et répété, suivant la direction d'approche, la variation ne sera pas la même. Donc il est impossible d'avoir un seuil fiable.
La variation peut être n'importe quoi entre presque rien et 45°...
Mais si le but est seulement de détecter l'approche d'un aimant, un capteur analogique à effet HALL fera l'affaire pour bien moins cher.
 
Last edited:

PieM

Senior Member
je n'ai pas encore fait l'achat du module.
Vu l'application statique, il existe alors un modèle ancien que l'on trouve hors de prix chez nos revendeurs mais plus abordable ici : http://www.ebay.fr/itm/161707779294
Il donne directement l'indication de l'azimut en I2C ou en PWM.
Par contre, bien que l'ayant utilisé, je ne connais pas la sensibilité magnétique de ses capteurs.
Le test serait à faire avec un aimant le plus puissant possible n'entraînant pas de saturation des capteurs.

sinon pour le 5883L : http://www.ebay.com/itm/1PCS-NEW-HMC5883L-3-Axis-Digital-Output-Compass-Magnetic-Sensor-Module-/261083712327?pt=LH_DefaultDomain_0&rmvSB=true
 
Last edited:
Top