Dans ce tutoriel, vous apprendrez à utiliser le magnétomètre 3 axes HSCDTD008A avec un Arduino. Le HSCDTD008A est essentiellement une boussole électronique ou numérique qui vous permet de mesurer l’intensité du champ magnétique terrestre (et d’autres sources magnétiques) selon trois axes.
Les magnétomètres peuvent être utilisés dans de nombreuses applications différentes. Ils aident les systèmes de navigation à trouver la direction et l’orientation. En robotique, ils améliorent la perception spatiale et maintiennent les robots sur la bonne trajectoire. Les smartphones les utilisent pour les fonctions de boussole et la réalité augmentée. Les drones s’en servent pour la stabilisation et la navigation. Les appareils portables comme les trackers d’activité et les montres connectées utilisent aussi les magnétomètres pour le suivi des activités et la navigation.
Pièces requises
Vous aurez besoin d’un capteur magnétique HSCDTD008A et d’un microcontrôleur pour ce projet. J’ai utilisé un Arduino Uno, mais tout autre Arduino ou une carte ESP32/ESP8266 fonctionnera également.

Magnétomètre 3 axes HSCDTD008A

Arduino Uno

Câble USB pour Arduino UNO

Jeu de fils Dupont

Plaque d’essai (breadboard)
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Caractéristiques du HSCDTD008A
Le HSCDTD008A est un capteur minuscule (1,6×1,6×0,65 mm) capable de mesurer l’intensité des champs magnétiques selon trois axes avec une précision de 0,15 μT / LSB (T = Tesla). L’image ci-dessous montre le circuit intégré réel – juste un petit bloc carré.

Les trois axes du capteur sont orientés comme indiqué ci-dessous et la valeur de sortie de chaque axe est positive lorsqu’elle est tournée vers le nord magnétique.

Selon l’orientation du circuit intégré par rapport à un champ magnétique (par exemple, le champ magnétique terrestre), la valeur de sortie pour chaque axe changera. Cela vous permet, par exemple, de naviguer en déterminant l’orientation du capteur dans l’espace.
Schéma fonctionnel interne du HSCDTD008A
L’image suivante montre le schéma fonctionnel interne du HSCDTD008A. Vous pouvez facilement identifier le capteur magnétique 3 axes, le multiplexeur (MUX) utilisé pour lire les 3 axes, le convertisseur analogique-numérique (AD) pour le capteur de température et l’interface I2C.

Le capteur de température est nécessaire, car la tension de sortie d’un capteur magnétique peut varier significativement avec la température. Le HSCDTD008A intègre donc un capteur de température pour compenser les variations de la température ambiante.
Les broches IO du HSCDTD008A sont les suivantes : AVDD est la tension d’alimentation analogique, DVDD est la tension d’alimentation numérique, VSS est la masse, SDA et SCL sont les lignes de l’interface I2C, DRDY est une broche d’interruption signalant que les données sont prêtes, et TEST1 et TEST2 sont des points de test internes lors de la production de la puce.
Pour plus de détails, consultez la fiche technique du HSCDTD008A dont le lien est ci-dessous :
Carte breakout pour le HSCDTD008A
Le HSCDTD008A est trop petit pour être connecté directement à un Arduino et ne fonctionne pas non plus en 5V. Vous avez donc généralement besoin d’une carte breakout comme celle montrée ci-dessous. La petite puce carrée au centre est le HSCDTD008A. La carte possède aussi un régulateur de tension, ce qui vous permet de la connecter à des microcontrôleurs en 5V ou 3,3V.

À part l’alimentation, les broches sont essentiellement les mêmes que celles discutées pour le schéma fonctionnel interne. VCC est la tension d’alimentation, GND est la masse, SDA et SCL sont les lignes de l’interface I2C, DRY est la broche de données prêtes, et T0 et T1 sont des points de test que vous n’aurez pas besoin d’utiliser.
La consommation de courant du module est typiquement de 60 μA en fonctionnement et seulement 3 μA en mode veille. Comme mentionné précédemment, la tension d’alimentation est de +3,3 V à +5 V et le niveau de communication est de 3,3 V.
Connexion du HSCDTD008A à l’Arduino
Grâce à l’interface I2C du HSCDTD008A, le connecter à un Arduino est simple. D’abord, connectez les broches SCL et SDA de la carte breakout HSCDTD008A aux broches correspondantes sur la carte Arduino comme montré ci-dessous. Ensuite, connectez la masse à GND et le 3,3 V (ou 5 V) à VCC du HSCDTD008A, et c’est tout.

Passons maintenant à l’écriture d’un code pour tester le fonctionnement du capteur HSCDTD008A.
Code pour mesurer le champ magnétique avec le HSCDTD008A
Avant de pouvoir mesurer les champs magnétiques avec le capteur HSCDTD008A, vous devrez installer une bibliothèque. Nous allons utiliser la HSCDTD008A Library de Bob Veringa. Pour l’installer, il suffit de chercher HSCDTD008A dans le Library Manager, trouver celle de Bob Veringa et cliquer sur « INSTALL ». L’image ci-dessous montre à quoi cela ressemble :

Une fois la bibliothèque installée, testons le capteur. Le code suivant lit l’intensité du champ magnétique selon les trois axes (X, Y et Z) et les affiche sur le moniteur série toutes les demi-secondes.
#include "hscdtd008a.h"
HSCDTD008A geomag;
void setup() {
Serial.begin(9600);
geomag.begin();
hscdtd_status_t status = geomag.initialize();
if (status != HSCDTD_STAT_OK) {
Serial.println("Can't initialize sensor!");
}
geomag.temperatureCompensation();
}
void loop() {
hscdtd_status_t status = geomag.startMeasurement();
if (status == HSCDTD_STAT_OK) {
Serial.print("X:");
Serial.println(geomag.mag.mag_x);
Serial.print("Y:");
Serial.println(geomag.mag.mag_y);
Serial.print("Z:");
Serial.println(geomag.mag.mag_z);
}
delay(500);
}
Décomposons le code en ses composants pour une meilleure compréhension.
Inclusion de la bibliothèque
La première ligne inclut la bibliothèque nécessaire pour le magnétomètre HSCDTD008A. Cette bibliothèque contient les fonctions et définitions nécessaires pour communiquer avec le capteur.
#include "hscdtd008a.h"
Création d’une instance
Ici, nous créons une instance de la classe HSCDTD008A nommée geomag. Cette instance nous permettra d’accéder aux fonctions définies dans la bibliothèque pour interagir avec le magnétomètre.
HSCDTD008A geomag;
Fonction setup
Dans la fonction setup(), nous initialisons la communication série à un débit de 9600 bauds. Cela nous permet d’envoyer des données au moniteur série pour le débogage et la surveillance.
Serial.begin(9600);
Ensuite, nous appelons la méthode begin() sur l’instance geomag pour initialiser le magnétomètre. Après cela, nous vérifions le statut de l’initialisation avec la méthode initialize(). Si le statut n’est pas HSCDTD_STAT_OK, nous affichons un message d’erreur sur le moniteur série.
geomag.begin();
hscdtd_status_t status = geomag.initialize();
if (status != HSCDTD_STAT_OK) {
Serial.println("Can't initialize sensor!");
}
Enfin, nous appelons la méthode temperatureCompensation() pour s’assurer que les mesures du capteur sont ajustées en fonction de la température ambiante, qui peut affecter les mesures magnétiques.
geomag.temperatureCompensation();
Fonction loop
Dans la fonction loop(), nous lançons une mesure en appelant la méthode startMeasurement(). Nous vérifions à nouveau le statut de cette opération. Si le statut est HSCDTD_STAT_OK, nous procédons à la lecture des valeurs du champ magnétique.
hscdtd_status_t status = geomag.startMeasurement();
if (status == HSCDTD_STAT_OK) {
Nous affichons ensuite les valeurs du champ magnétique pour les axes X, Y et Z sur le moniteur série. Les valeurs sont accessibles via la propriété mag de l’instance geomag et sont exprimées en micro Tesla (µT) :
Serial.print("X:");
Serial.println(geomag.mag.mag_x);
Serial.print("Y:");
Serial.println(geomag.mag.mag_y);
Serial.print("Z:");
Serial.println(geomag.mag.mag_z);
Enfin, nous introduisons un délai de 500 millisecondes avant le début du prochain cycle de mesure, ce qui permet une lecture claire sur le moniteur série.
delay(500);
Exécution du code
Si vous téléversez et exécutez le code, vous devriez commencer à voir des mesures du champ magnétique, similaires à celles ci-dessous, apparaître sur le moniteur série :

Si vous inclinez et faites pivoter le capteur, vous pouvez observer les valeurs changeantes des mesures du champ magnétique pour les trois axes sur le traceur série :

Et voilà ! Ce tutoriel devrait vous donner une bonne base pour vos propres applications.
Conclusions
Dans ce tutoriel, vous avez appris à utiliser le magnétomètre 3 axes HSCDTD008A avec un Arduino. Les applications courantes des magnétomètres sont la boussole numérique et l’amélioration de la précision dans la navigation de robots ou de drones.
Notez que, bien que les magnétomètres soient similaires aux capteurs à effet Hall, ils ne conviennent généralement pas aux mêmes applications, comme la mesure de courant ou la mesure sans contact de la vitesse d’objets en rotation. Consultez nos tutoriels Read Fan Speed Signal with Arduino et ACS712 Current Sensor And Arduino si vous souhaitez en savoir plus à ce sujet.
Bon bricolage ; )

