inclinometro con LSM303

salve a tutti ho utilizzato dopo alcune prove LSM303 per creare la bussola compensata , ho fatto la taratura e tuttosembra funzionare correttamente...

Ora volevo utilizzare lo stesso LSM303 anche per creare l'inclinometro, ma non trovo documentazione a riguardo, mi serviva per sapere in Gradi l'inclinazione di X.

qualcuno potrebbe aiutarmi?

L' accelerometro misura i 1g (ca 9,81 m/s^2) del accelerazione terrestre con i 3 vettori x,y e z. Visto che sai che la somma vettoriale é 1g é facile con 2 funzioni di trigonometria calcolare l' inclinazione del sensore.

Ciao Uwe

Grazie Uwe, condivido il mio studio trigonometrico con la comunity...

per chi avesse la stessa mia esigenza... ecco delle formule ed uno sketch funzionante.

#include <Wire.h>
#include <LSM303.h>

LSM303 compass;


int xmin=-412;
int xmax=+622;
int ymin=-595;
int ymax=+365;
int zmin=-1114;
int zmax=-115;



void setup()
{
  Serial.begin(9600);
  Wire.begin();
  compass.init();
  compass.enableDefault();
  compass.m_min = (LSM303::vector<int16_t>){xmin, ymin, zmin}; //inserisci i valori min risultanti dalla calibrazione.
  compass.m_max = (LSM303::vector<int16_t>){xmax, ymax, zmax}; //inserisci i valori min risultanti dalla calibrazione.

  
}

void loop()
{
  compass.read();

  // converto il tutto in range da -90 a +90 gradi
  int xAng = map(compass.a.x, -412, +622, -90, 90);
  int yAng = map(compass.a.y, -595, +365, -90, 90);
  int zAng = map(compass.a.z, -1114, -115, -90, 90);

  // converto in gradi
  int beccheggio = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
  int rollio = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);

  if (beccheggio > 180) {
    beccheggio = beccheggio - 360;
  }
  if (rollio > 180) {
    rollio = rollio - 360;
  }

  Serial.println("Calcolo Angoli Beccheggio,\t Rollio");
  Serial.print(beccheggio );
  Serial.print("\t");
  Serial.println(rollio);

  delay(500);
}