PROBLEME accéléromètre HMC5883L Arduino Uno

Bonjour,

Je suis élève en première S (sciences de l'ingénieur) et pour mon TPE de cette année, j'ai choisi de mettre en place une combinaison anti-avalanche (pour survivre aux avalanches).

Pour cela le randonneur ou skieur emporterait à bord de son sac, une carte Arduino reliée à un accéléromètre et quand l'avalanche le percuterait, l'accéléromètre enverrait un signal à des résistances placée dans des endroits stratégiques dans la combinaison afin de faire fondre la neige et de pourvoir se dégager tout seul.

J'ai pris possession d'un accéléromètre 3 axes de ref: HMC5883L connectée à une carte arduino uno. Mais voilà, mon problème est le suivant : quand je lance le programme de base intitulé "simple" et compris dans la bibliothèque : "Arduino-HMC5883L-master", j'obtiens des valeurs comme celles figurantes sur cette capture d’écran :

léraInitialize HMC5883L
Selected range: 1.3 Ga
Selected Measurement Mode: Continuous-Measurement
Selected Data Rate: 15 Hz
Selected number of samples: 1
X 1 = -147
Y 1 = -451
Z 1 = -56
X 2 = -147
Y 2 = -451
Z 2 = -56
X 3 = -152
Y 3 = -451
Z 3 = -57

Mais à quoi correspondent ces valeurs !!!??? Quel est l'origine du repère ? Comment calculer une "accélération" avec ces valeurs ?

Bonne journée, en espérant que quelqu'un vienne à mon secours :slight_smile:

PS: j'ai essayé de calculer une "accélération" voici le code du programme :

#include <Wire.h>
#include <HMC5883L.h>

HMC5883L compass;

void setup()
{
pinMode(13, OUTPUT);

Serial.begin(9600);

// Initialize HMC5883L
Serial.println("Initialize HMC5883L");
while (!compass.begin())
{
Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
delay(500);
}

// Set measurement range
// +/- 0.88 Ga: HMC5883L_RANGE_0_88GA
// +/- 1.30 Ga: HMC5883L_RANGE_1_3GA (default)
// +/- 1.90 Ga: HMC5883L_RANGE_1_9GA
// +/- 2.50 Ga: HMC5883L_RANGE_2_5GA
// +/- 4.00 Ga: HMC5883L_RANGE_4GA
// +/- 4.70 Ga: HMC5883L_RANGE_4_7GA
// +/- 5.60 Ga: HMC5883L_RANGE_5_6GA
// +/- 8.10 Ga: HMC5883L_RANGE_8_1GA
compass.setRange(HMC5883L_RANGE_1_3GA);

// Set measurement mode
// Idle mode: HMC5883L_IDLE
// Single-Measurement: HMC5883L_SINGLE
// Continuous-Measurement: HMC5883L_CONTINOUS (default)
compass.setMeasurementMode(HMC5883L_CONTINOUS);

// Set data rate
// 0.75Hz: HMC5883L_DATARATE_0_75HZ
// 1.50Hz: HMC5883L_DATARATE_1_5HZ
// 3.00Hz: HMC5883L_DATARATE_3HZ
// 7.50Hz: HMC5883L_DATARATE_7_50HZ
// 15.00Hz: HMC5883L_DATARATE_15HZ (default)
// 30.00Hz: HMC5883L_DATARATE_30HZ
// 75.00Hz: HMC5883L_DATARATE_75HZ
compass.setDataRate(HMC5883L_DATARATE_15HZ);

// Set number of samples averaged
// 1 sample: HMC5883L_SAMPLES_1 (default)
// 2 samples: HMC5883L_SAMPLES_2
// 4 samples: HMC5883L_SAMPLES_4
// 8 samples: HMC5883L_SAMPLES_8
compass.setSamples(HMC5883L_SAMPLES_1);

// Check settings
checkSettings();
}

void checkSettings()
{
Serial.print("Selected range: ");

switch (compass.getRange())
{
case HMC5883L_RANGE_0_88GA: Serial.println("0.88 Ga"); break;
case HMC5883L_RANGE_1_3GA: Serial.println("1.3 Ga"); break;
case HMC5883L_RANGE_1_9GA: Serial.println("1.9 Ga"); break;
case HMC5883L_RANGE_2_5GA: Serial.println("2.5 Ga"); break;
case HMC5883L_RANGE_4GA: Serial.println("4 Ga"); break;
case HMC5883L_RANGE_4_7GA: Serial.println("4.7 Ga"); break;
case HMC5883L_RANGE_5_6GA: Serial.println("5.6 Ga"); break;
case HMC5883L_RANGE_8_1GA: Serial.println("8.1 Ga"); break;
default: Serial.println("Bad range!");
}

Serial.print("Selected Measurement Mode: ");
switch (compass.getMeasurementMode())
{
case HMC5883L_IDLE: Serial.println("Idle mode"); break;
case HMC5883L_SINGLE: Serial.println("Single-Measurement"); break;
case HMC5883L_CONTINOUS: Serial.println("Continuous-Measurement"); break;
default: Serial.println("Bad mode!");
}

Serial.print("Selected Data Rate: ");
switch (compass.getDataRate())
{
case HMC5883L_DATARATE_0_75_HZ: Serial.println("0.75 Hz"); break;
case HMC5883L_DATARATE_1_5HZ: Serial.println("1.5 Hz"); break;
case HMC5883L_DATARATE_3HZ: Serial.println("3 Hz"); break;
case HMC5883L_DATARATE_7_5HZ: Serial.println("7.5 Hz"); break;
case HMC5883L_DATARATE_15HZ: Serial.println("15 Hz"); break;
case HMC5883L_DATARATE_30HZ: Serial.println("30 Hz"); break;
case HMC5883L_DATARATE_75HZ: Serial.println("75 Hz"); break;
default: Serial.println("Bad data rate!");
}

Serial.print("Selected number of samples: ");
switch (compass.getSamples())
{
case HMC5883L_SAMPLES_1: Serial.println("1"); break;
case HMC5883L_SAMPLES_2: Serial.println("2"); break;
case HMC5883L_SAMPLES_4: Serial.println("4"); break;
case HMC5883L_SAMPLES_8: Serial.println("8"); break;
default: Serial.println("Bad number of samples!");
}

}

void loop()
{
Vector raw = compass.readRaw();
Vector norm = compass.readNormalize();

int const DELAY = 10;
int const SEUIL = 20;
int DELAY_CARRE = DELAY * DELAY;

int x1 = raw.XAxis;
int y1 = raw.YAxis;
int z1 = raw.ZAxis;
Serial.print(" X 1 = ");
Serial.println(x1);
Serial.print(" Y 1 = ");
Serial.println(y1);
Serial.print(" Z 1 = ");
Serial.println(z1);

delay(DELAY);

Vector raw2 = compass.readRaw();
Vector norm2 = compass.readNormalize();

int x2 = raw2.XAxis;
int y2 = raw2.YAxis;
int z2 = raw2.ZAxis;
Serial.print(" X 2 = ");
Serial.println(x2);
Serial.print(" Y 2 = ");
Serial.println(y2);
Serial.print(" Z 2 = ");
Serial.println(z2);

delay(DELAY);

Vector raw3 = compass.readRaw();
Vector norm3 = compass.readNormalize();

int x3 = raw3.XAxis;
int y3 = raw3.YAxis;
int z3 = raw3.ZAxis;
Serial.print(" X 3 = ");
Serial.println(x3);
Serial.print(" Y 3 = ");
Serial.println(y3);
Serial.print(" Z 3 = ");
Serial.println(z3);

int DIFF = (x3 - (2*x2) - x1);
float ACCELX = (float)DIFF / DELAY_CARRE;
Serial.print(" Accélération X = ");
Serial.println(ACCELX);

int DIFF2 = (y3 - (2*y2) - y1);
float ACCELY = (float)DIFF2 / DELAY_CARRE;
Serial.print(" Accélération Y = ");
Serial.println(ACCELY);

int DIFF3 = (z3 - (2*z2) - z1);
float ACCELZ = (float)DIFF3 / DELAY_CARRE;
Serial.print(" Accélération Z = ");
Serial.println(ACCELZ);

if(ACCELX > SEUIL || ACCELY > SEUIL || ACCELZ > SEUIL){
digitalWrite(13, HIGH);
delay(5000);
digitalWrite(13, LOW);
}

}

bonjour,
sauf erreur, le HMC5883L est un magnétomètre, pas un accéléromètre.
tu as le LSM303 qui fait accéléromètre.