Vous êtes-vous déjà demandé comment votre téléphone détecte votre direction ? C'est grâce à un magnétomètre ! Votre CodeCell est équipé d'un magnétomètre 3 axes BNO085, qui détecte les champs magnétiques dans trois directions. Il vous permet de mesurer le cap (direction), de détecter les interférences magnétiques et même de créer une simple boussole numérique !
Un magnétomètre mesure le champ magnétique terrestre selon trois axes :
En utilisant ces valeurs, nous pouvons calculer le cap de la boussole (0° à 360°) et déterminer dans quelle direction CodeCell pointe.
Commençons par initialiser le magnétomètre et lire les valeurs brutes du champ magnétique.
#include <CodeCell.h>
CodeCell myCodeCell;
float x = 0.0; // Magnetic field on X-axis
float y = 0.0; // Magnetic field on Y-axis
float z = 0.0; // Magnetic field on Z-axis
void setup() {
Serial.begin(115200);
myCodeCell.Init(MOTION_MAGNETOMETER); // Initialize the magnetometer
}
void loop() {
if (myCodeCell.Run(10)) { // Read at 10Hz (every 100ms)
myCodeCell.Motion_MagnetometerRead(x, y, z); // Get magnetometer readings
Serial.print("Mag X: "); Serial.print(x);
Serial.print(" Y: "); Serial.print(y);
Serial.print(" Z: "); Serial.println(z);
}
}
Une fois que vous avez téléchargé le code et ouvert le Serial Monitor , vous verrez des valeurs telles que :
Mag X: 12.4 Y: -7.8 Z: 35.2
Que signifient ces valeurs ?
Pour construire une boussole numérique , nous devons convertir les valeurs X et Y en un angle à l'aide de la fonction atan2() .
#include <CodeCell.h>
#include <math.h> // Needed for atan2 function
CodeCell myCodeCell;
float x = 0.0, y = 0.0, z = 0.0;
void setup() {
Serial.begin(115200);
myCodeCell.Init(MOTION_MAGNETOMETER); // Initialize the magnetometer
}
void loop() {
if (myCodeCell.Run(10)) { // Read at 10Hz
myCodeCell.Motion_MagnetometerRead(x, y, z); // Read magnetometer values
// Calculer le cap (angle en degrés)
titre flottant = atan2(y, x) * (180,0 / M_PI);
// Assurez-vous que le cap est compris entre 0° et 360°
si (titre < 0) {
cap += 360;
}
Serial.print("Cap de la boussole : ");
Serial.println(heading); // Imprimer le titre en degrés
}
}
La valeur du cap (0° à 360°) nous indique dans quelle direction pointe CodeCell :
Cap (°) | Direction |
---|---|
0° (ou 360°) | Nord ↑ |
90° | Est → |
180° | Sud ↓ |
270° | Ouest ← |
Essayez de faire pivoter CodeCell et regardez le titre changer !
Nous pouvons maintenant éclairer la LED dans différentes couleurs en fonction de la direction :
#include <CodeCell.h>
#include <math.h>
CodeCell myCodeCell;
float x = 0.0, y = 0.0, z = 0.0;
void setup() {
Serial.begin(115200);
myCodeCell.Init(MOTION_MAGNETOMETER); // Initialize the magnetometer
}
void loop() {
if (myCodeCell.Run(10)) { // Read at 10Hz
myCodeCell.Motion_MagnetometerRead(x, y, z); // Read magnetometer values
// Calculate heading
float heading = atan2(y, x) * (180.0 / M_PI);
if (heading < 0) heading += 360;
Serial.print("Heading: ");
Serial.println(heading);
// Change LED color based on heading
if (heading >= 315 || heading < 45) {
myCodeCell.LED(0, 0, 255); // Blue for North
} else if (heading >= 45 && heading < 135) {
myCodeCell.LED(0, 255, 0); // Green for East
} else if (heading >= 135 && heading < 225) {
myCodeCell.LED(255, 0, 0); // Red for South
} autre {
myCodeCell.LED(255, 255, 0); // Jaune pour l'Ouest
}
}
}
Maintenant que vous pouvez lire les données du magnétomètre et calculer la direction, essayez :
Soyez le premier informé des nouveaux projets et bénéficiez d'offres intéressantes !
© 2025 Microbots.