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 …

https://www.sparkfun.com/tutorials/301

http://bildr.org/2012/02/hmc5883l_arduino/

Vous aimerez aussi...

2 réponses

  1. paul dit :

    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

    • cfaury dit :

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

Répondre à cfaury Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *