Le magnétomètre HMC5883L est un capteur largement utilisé dans les projets Arduino pour sa capacité à mesurer les champs magnétiques sur trois axes. Cela en fait un excellent choix pour créer des boussoles numériques, des systèmes de navigation pour drones et autres véhicules autonomes. En plus d'être abordable, son intégration est simple grâce à son interface I2C, ce qui le rend idéal pour les débutants.
Dans cet article, nous allons approfondir les principales caractéristiques du HMC5883L, sa connexion avec diverses cartes Arduino et des exemples pratiques d'utilisation. Au final, vous pourrez mettre en œuvre votre propre projet de boussole numérique avec Arduino, en profitant de tout le potentiel de ce puissant capteur.
Qu'est-ce que le HMC5883L et comment fonctionne-t-il ?
Le HMC5883L est un magnétomètre à trois axes qui mesure les composantes du champ magnétique terrestre dans les axes X, Y et Z. Cela permet non seulement de détecter la présence de champs magnétiques, mais également de déterminer l'orientation grâce à des calculs basés sur les mesures obtenues. Ces caractéristiques en font le capteur idéal pour réaliser des systèmes d’orientation, comme une boussole numérique.
Le capteur se trouve généralement dans des modules tels que le modèle GY-273, qui comprend également l'électronique nécessaire pour faciliter sa connexion directe avec les cartes Arduino ou d'autres microcontrôleurs. Son alimentation est flexible, et peut être alimentée aussi bien en 3.3V qu'en 5V, ce qui la rend très polyvalente en termes de compatibilité avec différents systèmes.
Connexions Arduino
Connecter le HMC5883L à Arduino est vraiment simple grâce à l'interface I2C qu'il utilise. Cette communication ne nécessite que deux broches : SDA et SCL, qui doit être connecté aux broches correspondantes de la carte Arduino.
- Pour Arduino Uno, Nano et Mini : SDA se connecte à la broche A4 et SCL à A5.
- Si vous utilisez un Arduino Mega ou Due : SDA doit être connecté à la broche 20 et SCL à la broche 21.
- Dans le cas de l'Arduino Leonardo : SDA va à la broche 2 et SCL à la broche 3.
N'oublions pas que le magnétomètre fonctionne avec une adresse I2C fixe de 0x1E, il n'est donc pas possible de la modifier. Cette adresse est unique pour ce type de capteur, ce qui signifie qu'on ne peut pas connecter plusieurs appareils HMC5883L sur le même bus I2C.
Lecture du champ magnétique
La principale méthode de fonctionnement du HMC5883L consiste à lire les valeurs du champ magnétique dans les trois axes. Pour obtenir ces valeurs sur un Arduino, nous utilisons une bibliothèque développée par Jeff Rowberg. Vous pouvez trouver cette librairie à votre référentiel GitHub et téléchargez-le pour l'utiliser dans l'IDE Arduino.
Une fois la bibliothèque installée, le capteur peut être initialisé et commencer à lire les valeurs du champ magnétique. Voici un exemple simple faisant exactement cela :
#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;
void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}
void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}
Dans ce code, le magnétomètre est initialisé et les valeurs sur les trois axes sont lues en boucle. Chaque fois que nous exécutons la `loop()`, les valeurs du champ magnétique en X, Y et Z seront affichées sur le moniteur série.
Paramètres de plage et de gain
Le HMC5883L vous permet d'ajuster le plage de mesure du champ magnétique entre ±0.88 Gauss et ±8.1 Gauss avec différents niveaux de gain. La plage par défaut est de ±1.3 Gauss et vous pouvez la modifier en fonction des besoins de votre projet. Cela peut être fait en utilisant la ligne suivante dans le code :
magnetometro.setGain(value);
où Plus-value est un nombre entier compris entre 0 et 7, qui sélectionnera le niveau de gain. Ci-dessous, nous vous montrons un tableau avec les valeurs correspondantes :
Bravoure | Rango | Gain (LSB/Gauss) |
---|---|---|
0 | ±0.88Ga | 1370 |
1 | ±1.3Ga | 1090 |
2 | ±1.9Ga | 820 |
3 | ±2.5Ga | 660 |
4 | ±4.0Ga | 440 |
5 | ±4.7Ga | 390 |
6 | ±5.6Ga | 330 |
7 | ±8.1Ga | 230 |
Construire une boussole numérique
L'une des utilisations les plus courantes du HMC5883L consiste à créer un boussole électronique. Pour ce faire, nous devons calculer l'angle entre le capteur et le nord magnétique à l'aide des lectures des axes X et Y. Ceci est obtenu à l'aide de la formule :
float angulo = atan2(my, mx) * 180 / M_PI;
Cette valeur vous donnera l'angle d'orientation par rapport au Nord magnétique. Pour ajuster cet angle à Nord géographique, vous devez tenir compte de la déclinaison magnétique de votre localisation, que vous pouvez consulter sur différents sites Internet tels que www.ign.es ou www.ngdc.noaa.gov.
Déclinaison magnétique correcte
Une fois que vous avez la déclinaison magnétique de votre position, il vous suffit de la soustraire de l'angle obtenu. Par exemple:
angulo -= declinacion;
Lorsque l'angle est négatif, vous pouvez ajouter 360 degrés pour obtenir toujours une valeur positive ajustée entre 0 et 360 degrés :
if (angulo < 0) angulo += 360;
Ce paramètre vous donnera une boussole qui indiquera toujours avec précision le nord géographique.
En pratique, avec ce capteur et certaines bibliothèques vous pouvez avoir une boussole en quelques minutes. Veuillez toutefois noter que le HMC5883L est un capteur sensible aux interférences externes, telles que les métaux à proximité ou les champs générés par des courants élevés, qui peuvent altérer les lectures.