Menu
Microbots
0
  • Faire
    • Commencer
    • Constructions de créateurs
    • Éducation
  • Boutique
    • ProtoBot
    • Modules Maker
    • Outils et engrenages
    • Robots et écrans
  • À propos
    • Notre histoire
    • Tendez la main
    • FAQ
  • Connexion
  • français
  • Votre panier est vide
Microbots
  • Faire
    • Commencer
    • Constructions de créateurs
    • Éducation
  • Boutique
    • ProtoBot
    • Modules Maker
    • 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 !

© 2026 Microbots.

★ Reviews

Let customers speak for us

67 reviews
Write a review
85%
(57)
6%
(4)
1%
(1)
3%
(2)
4%
(3)
62
21
C
CodeCell C3
Cloke74

Great piece of kit, had just what i needed to complete the project i had in mind. Shame shipping to the UK is so expensive, but appreciate this isn’t necessarily in the hands of MicroBots

A
CodeCell C6
Anonymous

I had an issue, got a red light, I used too much flux. Support said clean it, then the one sensor worked fine. I got the help and answer same day I provided a foto.

A
CodeCell C6 Drive
Anonymous

I think this is the best of the ESP offered, most versatile.

User picture
P
CodeCell C6
Prudhvi tej Chinimilli

Been testing the Microbots CodeCell C6 and honestly impressed with how much functionality they packed into such a tiny module. Great form factor for rapid prototyping wearable/embedded sensing applications. ESP32-C6 + IMU integration makes development much easier compared to building everything from scratch.

Still exploring battery optimization and compact LiPo options for our use case, but overall the platform is promising for low-cost real-time sensing systems. Excited to keep building with it.

F
CodeCell C6
Francisco Estivallet

Amazing hardware, my go to for compact projects.

User picture
123