mardi 29 août 2023

Magnétomètre/boussole HMC5883L et Raspberry Pi Pico (Micropython)

Dans cet article, nous utilisons un module HMC5883L relié à un Raspberry Pi Pico programmé en Micropython, afin de fabriquer une boussole électronique.


Le circuit intégré HMC5883L de la compagnie Honeywell permet de mesurer les 3 composantes (x, y, z) du champ magnétique dans lequel il se trouve. Il existe sur le marché plusieurs module ("breakout") faciles à connecter à un microcontrôleur. Celui que j'ai utilisé comporte 5 connecteurs identifiés VCC, GND, SCL, SDA et DRDY.


Installation du pilote micropython-rp2040-hmc5883l

Il existe quelques sur github quelques pilotes destinés à l'utilisation d'un module HMC5883L, qui semblent tous à peu près identiques. J'ai choisi micropython-rp2040-hmc5883l par SindormirNet. Il faut copier le fichier hmc5883l.py dans la mémoire du Raspberry Pi Pico.


Connexions

J'ai branché le module HMC5883L au Raspberry Pi Pico de cette façon:

  • Broche VCC du module HMC5883L: sortie 3,3 V du Raspberry Pi Pico
  • Broche GND du module HCM5883L: une des broches GND du Raspberry Pi Pico
  • Broche SCL du module HMC5883L: broche GP1 du Raspberry Pi Pico
  • Broche SDA du module HMC5883L: broche GP0 du Raspberry Pi Pico
  • Broche DRDY du module HMC5883L: pas branché


Script #1 (affichage dans la console)

La bibliothèque hmc5883l.py comporte une méthode "heading" qui calcule l'angle de l'axe x du capteur par rapport au nord...dans l'hypothèse extrêmement optimiste que le capteur ne nécessitera pas de calibration.

Dans les faits, le capteur qui mesure la composante dans la direction x n'aura probablement pas la même sensibilité que celui qui mesure la composante dans la direction y, et un champ magnétique nul ne produira pas nécessairement une mesure nulle.

Le script ci-dessous comporte donc une routine qui sert à calibrer les capteurs: on demande à l'utilisateur de faire tourner le module HMC5883L dans un plan horizontal sur au moins un tour complet. Pendant cette rotation, le script garde en mémoire la valeur maximale et la valeur minimale mesurées par le capteur x et par le capteur y. Les mesures brutes sont ensuite recalculées de façon à atténuer les imperfections des capteurs.

Pour que la direction soit affichée en fonction du nord géographique et non en fonction du nord magnétique, il faut que vous écriviez dans le script la valeur de la déclinaison magnétique là où vous êtes (variable "declinaison", à la ligne 18).

-

-

Boussole autonome

J'ai ensuite ajouté un écran OLED à mon circuit, de façon à obtenir une boussole parfaitement autonome qui ne dépend pas d'un ordinateur pour afficher ses mesures.

Il s'agit d'un écran OLED spi de 128 par 64 pixels.


J'ai branché l'écran OLED au Raspberry Pi Pico de cette façon:

  • Broche GND de l'écran: broche GND du Raspberry Pi Pico
  • Broche VCC de l'écran: sortie 3,3 V du Raspberry Pi Pico
  • Broche DO de l'écran: broche GP6 du Raspberry Pi Pico
  • Broche DI de l'écran: broche GP7 du Raspberry Pi Pico
  • Broche RES de l'écran: broche GP14 du Raspberry Pi Pico
  • Broche DC de l'écran: broche GP15 du Raspberry Pi Pico
  • Broche CS de l'écran: broche GP5 du Raspberry Pi Pico

Script #2 (boussole autonome)

Ce script affiche à l'écran OLED un plan cartésien (qui doit être aligné avec celui qui est imprimé sur le module HMC5883L), et une "aiguille de boussole" qui pointe obstinément vers le nord. Encore une fois, pour qu'elle pointe vers le nord géographique, vous devez modifier la valeur de la variable "declinaison" à la ligne 24, pour qu'elle reflète la valeur de la déclinaison magnétique là où vous êtes.


-

-


À lire également:


Yves Pelletier


Aucun commentaire:

Enregistrer un commentaire