Go Down

Topic: PROBLEME accéléromètre HMC5883L Arduino Uno (Read 214 times) previous topic - next topic

Tristan17

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 :)


PS: j'ai essayé de calculer une "accélération" voici le code du programme :
Quote
#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);
  }
 
}




infobarquee

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.
AUCUNE AIDE PAR MP

Go Up