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é …