Accélération en G

Bonjour,
j'essaie de faire un simple capteur d'accélération sur l'axe Z, ça fonctionne si le capteur est bien a plat , dès qu'il penche les valeurs ne sont plus bonnes. j'imagine qu'il faut compenser avec les valeurs des deux autre axes , mais malgré mes recherches, je ne trouve pas sur le net.
esp32 dev kit et LSM303AGR.
résumé des principales lignes:

#include <Adafruit_LSM303_Accel.h>
 sensors_event_t event;
  accel.getEvent(&event);
 float aZ = event.acceleration.z;
  G = aZ - 9.8;

et c'est quoi ta question ?

à mon avis elles sont bonnes, c'est bien la composante de l'accélération sur l'axe de Z que vous recevez

par exemple si votre capteur est immobile et à plat, la composante sur l'axe des Z sera juste la pesanteur. si vous penchez le module, ce vecteur gravité va se répartir en 3 vecteurs sur les 3 axes et la somme de ces 3 vecteurs vous redonne le vecteur de la pesanteur.

si votre capteur est en mouvement avec accélération et rotation, c'est plus compliqué...

Définissez plus clairement ce que vous voulez


PS:

bravo pour l'usage des balises de code mais ne postez pas de snippets (Snippets R Us!)

c'est pour prendre la valeur des accélération un peut comme on peu voir des fois sur les images embarquées de F1. :wink:

#include <Adafruit_LSM303_Accel.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(54321);

void setup() {
   Serial.begin(115200);
     if (!accel.begin()) {
    Serial.println("Ooops, no LSM303 detected ... Check your wiring!");
    while (1)
      ;
  }
    accel.setRange(LSM303_RANGE_4G);
 accel.setMode(LSM303_MODE_HIGH_RESOLUTION);
}

void loop() {
 
  sensors_event_t event;
  accel.getEvent(&event);

  float aX = event.acceleration.x;
  float aY = event.acceleration.y;
  float aZ = event.acceleration.z;
  
 int G = (aX - 9.8) - (aY - 9.8) - (aZ - 9.8);

 Serial.print("Acceleration en G = ");
 Serial.println( G );
 delay(300);

}

c'est ce que vous donne le capteur, la projection de l'accélération ressentie par le module sur 3 axes d'un repère orthonormé et dans le référentiel du module

"le repère orthonormé dans le référentiel du module" je comprends, mais je ne sais pas quoi en faire :wink:
je continu la recherche.

Tant que vous n’aurez pas clairement défini ce que vous voulez mesurer la recherche sera difficile…

Je vais tenter d’être plus clair
j'aimerais connaitre la valeur en G, par exemple dans une voiture lors de du freinage, d'un virage a droite ou gauche, de l'accélération ou dans un avion aussi quand l'avion pique ou remonte.
Je sais que ca fait plusieurs direction , mais juste une seule valeur qui indiquerait le nombre de G peut importe la direction.

si ax, ay et az sont les accélérations sur les trois axes vous calculez le vecteur résultant de la somme des trois vecteurs accélération et vous avez le sens de l'accélération et en prenant la norme de ce vecteur l'amplitude de cette accélération. Si vous la voulez en G, il faut exprimer les coordonnées vectorielles en G aussi

➜ il vous faut la norme du vecteur en bleu sur le dessin

pour mémoire

C'est :

 float G = sqrt(aX * aX + aY * aY + aZ * aZ) / 9.81;
 Serial.print("Acceleration en G = ");
 Serial.println( G, 2); // Pour afficher 2 chiffres après la virgule

Merci beaucoup.
je vais tester ça ce soir, même si je sais déjà que c'est OK , j'aurai du écouter plus souvent a l'école.

on regrette ensuite mais ce n'est pas trop tard pour s'y remettre, on apprend à tout age !! :slight_smile:

oui c'est sur, et a 63 ans il y a des choses qui sont un peut loin :wink:
Le code fonctionne .
merci encore.

on est quelques retraités depuis quelques années ici... ça fait bosser les neurones :slight_smile:

ouiiii

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.