Compas électronique
Matériel testé : HMC5883L de chez Sparkfun
Bibliothèque nécessaire : HMC5883L
Câblage

Source : bildr.blog
Calibration
- Depuis l’IDE Arduino, ouvrir l’exemple : Fichier>Exemples>Arduino-HMC5883L>HMC5883L_calibrate
- Relever les données de calibration affichées dans le moniteur série.
- Intégrer ces valeurs dans le programme ci-dessous.
Programme
/*
HMC5883L Compas numérique 3 axes
*/
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compas;
void setup()
{
Serial.begin(9600);
// Initialisation du compas HMC5883L
Serial.println("Initialisation du HMC5883L");
while (!compas.begin())
{
Serial.println("Aucun HMC5883L trouve !");
delay(500);
}
// Plage de mesure : 0.88 Gauss (intensité du champ magnétique Terrestre ~ 0.5 Gauss)
compas.setRange(HMC5883L_RANGE_0_88GA);
// Mode de mesure : continue
compas.setMeasurementMode(HMC5883L_CONTINOUS);
// Fréquence de rafraichissement des données : 30Hz
compas.setDataRate(HMC5883L_DATARATE_30HZ);
// Nombre d'échantillons par mesure
compas.setSamples(HMC5883L_SAMPLES_8);
// Offset de calibration
compas.setOffset(0, 0);
}
void loop()
{
// Lecture du compas
Vector v = compas.readNormalize();
// Calcul de l'angle d'orientation
float orientation = atan2(v.YAxis, v.XAxis);
// Correction pour orientation < 0deg et pour orientation > 360deg
if (orientation < 0)
{
orientation += 2 * PI;
}
if (orientation > 2 * PI)
{
orientation -= 2 * PI;
}
// Conversion en degrés
orientation = orientation * 180/M_PI;
// Sortie:
Serial.print(" Orientation = ");
Serial.print(orientation);
Serial.println();
delay(100);
}
Afin d’obtenir une valeur d’orientation plus stable, il peut être nécessaire de lisser le signal.
Pour en savoir plus …

bonjour
lors de la calibration je n’arrive pas à avoir 2 fois des valeurs offset ressemblantes. Y a t il une méthode particulière pour bouger le module?
je n’arrive qu’a une precision de 10 à 15° pres
Merci
Bonjour
La calibration consiste à compenser les effets nommés « hard iron » (je ne sais pas traduire ça) : en gros, l’influence de champ magnétique « parasite ».
Le principe est expliqué ici : http://www.sensorsmag.com/sensors/motion-velocity-displacement/compensating-tilt-hard-iron-and-soft-iron-effects-6475
En gros, il faut faire tourner le capteur en le gardant bien horizontal, sur 360°, de manière à ce que le programme puisse reconstituer une réponse en forme d’ellipse, puis d’en déterminer le centre.
Il faut préciser que la compensation des effets « soft iron » (déviation du champ magnétique à proximité de matériaux à forte perméabilité) ne peut pas être corrigée.
En espérant avoir aidé …