Bonjour,
Voici le code utilisé :
#include <SparkFun_MAG3110.h>
MAG3110 mag = MAG3110(); //Instantiate MAG3110
int minX = 0;
int maxX = 0;
int minY = 0;
int maxY = 0;
int minZ = 0;
int maxZ = 0;
void setup() {
Serial.begin(9600);
mag.initialize(); //Initializes the mag sensor
mag.start(); //Puts the sensor in active mode
}
void loop() {
int x, y, z;
//Only read data when it's ready
if(mag.dataReady()) {
//Read the data
mag.readMag(&x, &y, &z);
// First : calibrate captor
// Determine min and max values
if (x < minX) minX = x;
if (x > maxX) maxX = x;
if (y < minY) minY = y;
if (y > maxY) maxY = y;
// calculate offsets
int offX = (maxX + minX)/2;
int offY = (maxY + minY)/2;
// determine magnetic compensation
float avg_delta_x = (maxX-minX)/2.0;
float avg_delta_y = (maxX-minX)/2.0;
float avg_delta_z = (maxX-minX)/2.0;
float avg_delta = (avg_delta_x + avg_delta_y + avg_delta_z)/3.0;
float ech_x = avg_delta/avg_delta_x;
float ech_y = avg_delta/avg_delta_y;
// After calibrate captor and know offsets and magnetic compensation values
// correct axes x and y.
// Exemple : corrected_x = (sensor_x - offset_x)*scale_x
float X = (x-523.0)*1.0 ;
float Y = (y+190.0)*1.0 ;
// Calculate heading
float heading = atan2(Y,X);
// Correct for heading < 0deg and heading > 360deg
if (heading < 0)
{
heading += 2 * PI;
}
if (heading > 2 * PI)
{
heading -= 2 * PI;
}
// Convert to degrees
float headingDegrees = heading * 180.0/M_PI;
/*Serial.print("X: ");
Serial.print(x);
Serial.print(", Y: ");
Serial.print(y);
Serial.print(", Z: ");
Serial.println(z);
Serial.print("offset x=");
Serial.print(offX);
Serial.print("offset y =");
Serial.print(offY);
Serial.print("echelle x =");
Serial.print(ech_x);
Serial.print("echelle y =");
Serial.print(ech_y);
*/Serial.print(" Degress = ");
Serial.print(headingDegrees);
Serial.println("--------");
}
}
En appliquant ce code, au lieu d'avoir un angle variant continuellement de 0 à 360° lorsque je fais tourner mon capteur; j'obtiens un angle qui va partir de 0°, croître jusque 41° et puis repartir vers 0°.. (voir PJ)
Sur la pièce jointe, on voit qu'au dessus de la ligne noire, l'angle croît. En dessous de cette ligne , il repart vers 0°...
Merci d'avance pour votre aide.
