Menu
Microbots
0
  • Faire
    • Commencer
    • Constructions de créateurs
    • Éducation
  • Boutique
    • Modules Maker
    • Packs de création
    • Outils et engrenages
    • Robots et écrans
  • À propos
    • Notre histoire
    • Tendez la main
    • FAQ
  • français
  • Votre panier est vide
Microbots
  • Faire
    • Commencer
    • Constructions de créateurs
    • Éducation
  • Boutique
    • Modules Maker
    • Packs de création
    • Outils et engrenages
    • Robots et écrans
  • À propos
    • Notre histoire
    • Tendez la main
    • FAQ
  • Langue

  • 0 0

CodeCell : Utiliser le magnétomètre pour construire une boussole numérique

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 !

Qu'est-ce qu'un magnétomètre ?

Un magnétomètre mesure le champ magnétique terrestre selon trois axes :

  • Axe X → Mesure l'intensité du champ magnétique gauche-droite.
  • Axe Y → Mesure l'intensité du champ magnétique avant-arrière.
  • Axe Z → Mesure l'intensité du champ magnétique de haut en bas.

En utilisant ces valeurs, nous pouvons calculer le cap de la boussole (0° à 360°) et déterminer dans quelle direction CodeCell pointe.

Étape 1 : Lire les données du magnétomètre à partir de CodeCell

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 ?

  • Si vous faites pivoter CodeCell , les valeurs X et Y changeront en fonction de la direction.
  • Si vous inclinez CodeCell , la valeur Z changera .
  • Si vous placez CodeCell près d'un aimant , toutes les valeurs fluctueront considérablement.

Étape 2 : Convertir les données du magnétomètre en cap de boussole

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 !

Étape 3 : Afficher la direction avec la LED intégrée

Nous pouvons maintenant éclairer la LED dans différentes couleurs en fonction de la direction :

  • 🔵 Nord (0° - 45° & 315° - 360°) → LED bleue
  • 🟢 Est (45° - 135°) → LED verte
  • 🔴 Sud (135° - 225°) → LED rouge
  • 🟡 Ouest (225° - 315°) → LED jaune
 #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
 }
 }
 }

Expérimentez vos propres idées !

Maintenant que vous pouvez lire les données du magnétomètre et calculer la direction, essayez :

  • Affichage de la direction (N, E, S, O) sur un écran OLED .
  • Détection d'un champ magnétique à proximité de bobines ou d'aimants .
  • Combinaison avec d'autres capteurs

  • Partager:

Partage

Github

  • À propos
  • Logiciel
  • Éducation
  • Contact
  • FAQ
  • Termes
  • Politique de remboursement
  • politique de confidentialité

Soyez le premier informé des nouveaux projets et bénéficiez d'offres intéressantes !

© 2025 Microbots.