Introduction La boussole électronique est conçu pour détecter le champ magnétique terrestre et fournir des données de cap magnétique à un microcontrôleur comme Arduino. Celui que l’on va utiliser aujourd’hui est le module GY-271, basé sur le capteur HMC5883L. Doté d’un capteur à effet Hall, le GY-271 offre une précision raisonnable pour mesurer l’orientation magnétique. Il comprend un système à trois axes qui permet de détecter les variations du champ magnétique sur les axes X, Y et Z. Ces données peuvent être utilisées pour déterminer la direction dans laquelle le module est orienté par rapport au nord magnétique. Les pins de la boussole GY-271 Vcc : A connecter au 3.3V de la carte ArduinoGND : Relier à la masse de la carte ArduinoSDA : A connecter à la pin A4 des sorties analogiquesSCL : Relier à la pin A5 des sorties analogiques Schéma électronique Voici le schéma électronique pour connecter le GY-271. Celui-ci utilise l’i2C de la carte Arduino : Programmation Pour téléverser le programme pour la boussole GY-271 vous aurez besoin d’installer la librairie d’adafruit pour le HMC5883 qui est la puce qui contôle notre boussole : #include <Wire.h> //I2C Arduino Librairie #define HMC5883L_ADDR 0x1E //addresse i2c du HMC5883 bool haveHMC5883L = false; bool detectHMC5883L () { Wire.beginTransmission(HMC5883L_ADDR); Wire.write(10); Wire.endTransmission(); Wire.requestFrom(HMC5883L_ADDR, 3); if(3 == Wire.available()) { char a = Wire.read(); char b = Wire.read(); char c = Wire.read(); if(a == 'H' && b == '4' && c == '3') return true; } return false; } void setup() { //On initialise le moniteur série et l'i2C Serial.begin(9600); Serial.println("Démarrage"); Wire.begin(); TWBR = 78; TWSR |= _BV (TWPS0); } void loop() { bool detect = detectHMC5883L(); if(!haveHMC5883L) { if(detect) { haveHMC5883L = true; Serial.println("La boussole est detecte"); Wire.beginTransmission(HMC5883L_ADDR); Wire.write(0x02); Wire.write(0x00); Wire.endTransmission(); } else { Serial.println("Boussole non detecte"); delay(2000); return; } } else { if(!detect) { haveHMC5883L = false; Serial.println("Connexion perdue"); delay(2000); return; } } int x,y,z; //trois axes Wire.beginTransmission(HMC5883L_ADDR); Wire.write(0x03); Wire.endTransmission(); Wire.requestFrom(HMC5883L_ADDR, 6); if(6<=Wire.available()){ x = Wire.read()<<8; x |= Wire.read(); z = Wire.read()<<8; z |= Wire.read(); y = Wire.read()<<8; y |= Wire.read(); } Serial.print("x: "); Serial.print(x); Serial.print(" y: "); Serial.print(y); Serial.print(" z: "); Serial.println(z); delay(250); } Voici le résultat sur le moniteur série . On ne peut pas vous montrer les différents axes qui apparaissent juste après que la boussole soit détectée :