ADXL 345 LECTURE DES DONNEES

Bonsoir,
Étant en classe préparatoire, j’ai eu besoin de créer un système embarqué et pour cela d’avoir recours à une carte Arduino.
Je n’ai eu aucun souci de compréhension pour les capteurs de pression BMP180 et accéléromètre mma7361.
Cependant, je ne comprends pas ce que me retourne mon programme lorsque j’utilise l’accéléromètre ADXL 345.

Je mets en copie le code utilisé
#include <SparkFun_ADXL345.h> // SparkFun ADXL345 Library

/*********** COMMUNICATION SELECTION **********/
/
Comment Out The One You Are Not Using */
ADXL345 adxl = ADXL345(10); // USE FOR SPI COMMUNICATION, ADXL345(CS_PIN);
//ADXL345 adxl = ADXL345(); // USE FOR I2C COMMUNICATION

/****************** INTERRUPT *****************/
/
Uncomment If Attaching Interrupt */
//int interruptPin = 2; // Setup pin 2 to be the interrupt pin (for most Arduino Boards)

/******************** SETUP *******************/
/
Configure ADXL345 Settings */
void setup(){

Serial.begin(9600); // Start the serial terminal
Serial.println(“SparkFun ADXL345 Accelerometer Hook Up Guide Example”);
Serial.println();

adxl.powerOn(); // Power on the ADXL345

adxl.setRangeSetting(8); // Give the range settings
// Accepted values are 2g, 4g, 8g or 16g
// Higher Values = Wider Measurement Range
// Lower Values = Greater Sensitivity

adxl.setSpiBit(0); // Configure the device to be in 4 wire SPI mode when set to ‘0’ or 3 wire SPI mode when set to 1
// Default: Set to 1
// SPI pins on the ATMega328: 11, 12 and 13 as reference in SPI Library

}

/****************** MAIN CODE *****************/
/
Accelerometer Readings and Interrupt */
void loop(){

// Accelerometer Readings
int x,y,z;
adxl.readAccel(&x, &y, &z); // Read the accelerometer values and store them in variables declared above x,y,z

// Output Results to Serial
/* UNCOMMENT TO VIEW X Y Z ACCELEROMETER VALUES */
Serial.print(x);
Serial.print(", “);
Serial.print(y);
Serial.print(”, ");
Serial.println(z);

delay(500);

}

Contrairement au mma7361, il ne retourne pas directement l’accélération mais il la renvoie codée et c’est la que je ne comprends plus vraiment.
Si quelqu’un est familier de ce capteur :slight_smile:

Bonne soirée

(je peux donner plus d’informations sur la nature du projet à savoir le vol d’une mini fusée).

Tu devrais lire ça et l'appliquer parce que la ton code est partiellement illisible.

Tu grille les étapes, il faut lire la datasheet.

Oui bien sur j’ai lu la datasheet ! Quoi survolé plutôt… :confused:

Mais bon elle ne m’a pas éclairé beaucoup. Je me remets sérieusement dessus ce soir !

Sinon voilà pour plus lisible , merci beaucoup !

#include <SparkFun_ADXL345.h>         // SparkFun ADXL345 Library

/*********** COMMUNICATION SELECTION ***********/
/*    Comment Out The One You Are Not Using    */
ADXL345 adxl = ADXL345(10);           // USE FOR SPI COMMUNICATION, ADXL345(CS_PIN);
//ADXL345 adxl = ADXL345();             // USE FOR I2C COMMUNICATION

/****************** INTERRUPT ******************/
/*      Uncomment If Attaching Interrupt       */
//int interruptPin = 2;                 // Setup pin 2 to be the interrupt pin (for most Arduino Boards)


/******************** SETUP ********************/
/*          Configure ADXL345 Settings         */
void setup(){
  
  Serial.begin(9600);                 // Start the serial terminal
  Serial.println("SparkFun ADXL345 Accelerometer Hook Up Guide Example");
  Serial.println();
  
  adxl.powerOn();                     // Power on the ADXL345

  adxl.setRangeSetting(8);           // Give the range settings
                                      // Accepted values are 2g, 4g, 8g or 16g
                                      // Higher Values = Wider Measurement Range
                                      // Lower Values = Greater Sensitivity

  adxl.setSpiBit(0);                  // Configure the device to be in 4 wire SPI mode when set to '0' or 3 wire SPI mode when set to 1
                                      // Default: Set to 1
                                      // SPI pins on the ATMega328: 11, 12 and 13 as reference in SPI Library 
   


}

/****************** MAIN CODE ******************/
/*     Accelerometer Readings and Interrupt    */
void loop(){
  
  // Accelerometer Readings
  int x,y,z;   
  adxl.readAccel(&x, &y, &z);         // Read the accelerometer values and store them in variables declared above x,y,z

  // Output Results to Serial
  /* UNCOMMENT TO VIEW X Y Z ACCELEROMETER VALUES */  
 Serial.print(x);
 Serial.print(", ");
 Serial.print(y);
 Serial.print(", ");
 Serial.println(z); 
  
 delay(500);

}

Oui bien sur j'ai lu la datasheet ! Quoi survolé plutôt... :confused:

Il ne faut pas être impressionner par la taille d'une datasheet, le truc c'est de savoir ce que l'on cherche.

En gros, le programme configure l'acceleromètre puis la fonction adxl.readAccel() récupèrent les données brutes correspondant à chaque axe dans leurs registres respectifs.

les données brutes

Pour moi une variation de tension traduit une variation d’une unité quelconque mais la aucun lien direct dans la datasheet entre tension et variation d’accélération. J’ai juste une variation de g par LSB (bit de poids faible…), mais la mon niveau en analogique/numérique me freine… et le fait que mon info soit codée sur 10 bits …je capte pas trop
J’ai mis en lien une image de la datasheet avec les éléments mentionnées ci-dessus.
Encore merci

http://hpics.li/09dd7c7

du coup… je pense avoir capté!! Si j’ai bien compris la valeur brute qu’il me renvoie si je choisis un intervalle de 16g est telle que:
-on ait une variation de 32 bits par g … plus moins le bruit causé par les différents paramètres.
du coup quand je fais le test bah… ça marche j’ai bien 1g sur l’axe Z de l’accéléro

si je me mets maintenant en mode ±4g… J’ai bien à peu près une valeur retournée de 128 bits.

Fin bref dites moi si je me trompe mais en gros en mode ±16 g si je lis 64 mon capteur subira 2g positif.
Merci en tout cas le sujet peut être fermé/archivé, à moins que je n’ai rien capté du tout au final.

Bonne soirée

Bonsoir,

Tu as un registre 0x31 Data Format avec un bit Full_res à mettre à 1 pour passer en haute résolution (jusqu'à 13 bits), sinon la résolution par défaut est 10 bits.

En 10 bits, la fonction ReadAccel te retourne un entier entre -512 et +512.

Si tu configures la plage +/-16g, 16g retourne 512 soit une variation de 512/16=32 par g (32 LSB/g dans la doc). Ce qui donne une résolution en accélération de g/32 ( ou 31.2 mg comme écrit dans la doc).

Super clair ! J'ai bien compris :slight_smile: merci