dimanche 13 juillet 2014

Magnétomètre/boussole HMC5883L et Arduino

Cet article a été mis à jour le 31 janvier 2021.

Le circuit intégré HMC5883L fabriqué par Honeywell permet de mesurer les 3 composantes (x, y et z) du champ magnétique dans lequel il est plongé. On peut donc s'en servir comme appareil scientifique permettant de mesurer un champ magnétique avec précision, ou encore comme une boussole qui aidera notre robot à se repérer dans l'espace.

(Il y a quelques années, je vous avais parlé d'une autre méthode pour mesurer un champ magnétique (particulièrement intéressante si vous préférez éviter l'utilisation d'un microcontrôleur):  la sonde à effet Hall Allegro A1302.)

Le circuit intégré lui-même est un minuscule CMS (composant monté en surface) comportant 16 pins réparties autour d'un carré dont les côtés ne mesurent que 3 mm:  hors de question pour moi de souder ça!  Heureusement, il est facile de se procurer un breakout déjà tout fait, comportant déjà les résistances et condensateurs nécessaires  au bon fonctionnement du CI, qu'on pourra facilement brancher à l'Arduino en l'insérant dans un breadboard ou autre.

Sparkfun et Adafruit ont chacun leur version de breakout HMC5883L, mais comme d'habitude ce sont les vendeurs chinois qui offrent les meilleurs prix sur eBay (le mien n'a coûté que $1,50, frais de ports inclus...).

Connexions à un Arduino Uno

Puisque le magnétomètre utilise le protocole I2C, nous utiliserons les pins de l'Arduino dédiées à ce protocole:
  • La broche VCC du breakout se branche à la broche 5 V de l'Arduino
  • La broche GND du breakout se branche à la broche GND de l'Arduino
  • La broche SCL (serial clock) se branche à la broche A5 de l'Arduino
  • La broche SDA (serial data) se branche à la broche A4 de l'Arduino
  • Nous n'utiliserons pas la broche DRDY (data ready).
Connexions à un ESP8266

Si vous préférez utiliser un ESP8266, les connexions sur les suivantes:
  • La broche VCC du module HMC5883L se branche à la broche 3V3 de l'ESP8266
  • La broche GND du module HMC5883L se branche à la broche GND de l'ESP8266
  • La broche SCL du module HMC5883L se branche à la broche GPIO 5 de l'ESP8266
  • La broche  SDA du module HMC5883L se branche à la broche GPIO 4 de l'ESP8266
  • Nous n'utiliserons pas la broche DRDY (data ready) du module HMC5883L.
(l'illustration montre un Wemos D1 mini)

Connexions à un ESP32

Voici comment brancher le module HMC5883L à un ESP32:
  • La broche VCC du module HMC5883L se branche à la broche 3V3 de l'ESP32
  • La broche GND du module HMC5883L se branche à la broche GND de l'ESP32
  • La broche SCL du module HMC5883L se branche à la broche D22 de l'ESP32
  • La broche  SDA du module HMC5883L se branche à la broche D21 de l'ESP32
  • Nous n'utiliserons pas la broche DRDY (data ready) du module HMC5883L.

Connexions à un STM32F103C8T6 (Blue Pill)

Pour brancher le module HMC5883L à une STM32 Blue Pill, vous procédez ainsi:
  • La broche VCC du module HMC5883L se branche à la broche 3V3 de la Blue Pill
  • La broche GND du module HMC5883L se branche à la broche GND de la Blue Pill
  • La broche SCL du module HMC5883L se branche à la broche B6 de la Blue Pill
  • La broche  SDA du module HMC5883L se branche à la broche B7 de la Blue Pill
  • Nous n'utiliserons pas la broche DRDY (data ready) du module HMC5883L.

Connexions à un STM32 Nucleo

J'ai également testé le module avec succès en le branchant à une carte STM32 Nucleo de la façon suivante:
  • La broche VCC du module HMC5883L se branche à la broche 3V3 du Nucleo
  • La broche GND du module HMC5883L se branche à la broche GND du Nucleo
  • La broche SCL du module HMC5883L se branche à la broche SCL/D15 du Nucleo
  • La broche  SDA du module HMC5883L se branche à la broche SDA/D14 du Nucleo
  • Nous n'utiliserons pas la broche DRDY (data ready) du module HMC5883L.



Programmation de l'Arduino

En ce qui concerne la programmation de l'Arduino, le plus simple est d'utiliser l'excellente bibliothèque mise au point par Adafruit, qui offre entre autre l'avantage d'afficher l'intensité du champ magnétique en microgauss plutôt qu'une valeur numérique arbitraire située entre 0 et 1023).

Vous pouvez télécharger ici la bibliothèque Adafruit HMC5883, mais vous aurez également besoin de la bibliothèque Adafruit_sensor

Après avoir installé les deux bibliothèques dans le répertoire "libraries" de votre carnet de croquis, vous aurez accès à l'exemple "magsensor" qui montre comment récupérer les 3 composantes du champ magnétique (en microgauss), ainsi que l'angle que fait le nord magnétique par rapport à l'axe X indiqué sur le breakout.


Voici ce que ça donne dans le moniteur série:


À lire également

Fabrication d'une boussole à partir de ce même capteur.


Yves Pelletier (TwitterFacebook

8 commentaires:

  1. Bonjour, j'ai utilisé ce capteur, après son calibration j'ai une erreur de 5 degré lorsque je le tourne sur le plan horizontal, comment est-ce possible?

    RépondreSupprimer
    Réponses
    1. Nord magnétique et nord géographique = déclinaison magnétique

      Supprimer
  2. La déclinaison magnétique est actuellement de 13.5 minutes donc c'est pas ça !

    RépondreSupprimer
    Réponses
    1. Connaître la déclinaison magnétique sans information concernant la position, c'est tout un exploit! (Chez moi, à Gatineau, elle est de presque 13°).

      Supprimer
  3. Bonjour,
    Ignorer la déclinaison magnétique c'est une erreur de débutant qui de plus n ' a jamais navigué.
    Par contre utiliser le magnétomètre pour rechercher des croisement de lignes magnétiques comme le faisaient les Atlantes, c'est une utilisation qui va dans le sens du progrès de la civilisation. Cela pourrait faire plaisir à Nicolas Hulot et permettre de cartographier les lignes de champ magnétique scientifiquement ...

    RépondreSupprimer
    Réponses
    1. Bonjour,
      Je suis géobiologue et je m'intéresse aux modifications du champs électromagnétique terrestre à la surface du globe. (voir explications ici :
      https://maisonsaine.ca/sante-et-securite/la-geobiologie-scientifique-le-geomagnetometre )
      C'est surtout le z que l'on regarde.
      Les appareils professionnels sont un peu cher.
      je me demandais quelle était la plage de mesure de la sonde. Sur les appareils de géobiologues, cela va de 1nT à 250.000 nT.
      Merci pour votre avis
      Benoît

      Supprimer
    2. Bonjour,
      les valeurs max et min sont imprimées ci-dessus:
      -800 micro Tesla 800micro Tesla
      resolution 200 nanoTesla

      Supprimer
  4. Bonjour,
    je teste ce dispositif depuis 2 jours sur raspberry et sur arduino, j'ai du changer l'adresse dans les programmes qui me sont proposés, le module est détecté en 0xd, en 13 sous node red avec le node scan. malheureusement pour moi, les lesctures me retournent 0 dans chaque valeur x,y et z. Une idée là dessus ?

    RépondreSupprimer