venerdì 4 dicembre 2015

ADXL335 Accelerometro come tiltmetro

In questo post del 2012  avevo usato il componente CMPS10 per avere le indicazione di Yaw, Pitch e Roll.
Con il solo accelerometro (quindi senza una bussola) e' possibile tuttavia avere le informazioni di inclinazione dell'accelerometro in Pitch e Roll (Yaw non e' possibile perche' il calcolo richiede la scomposizione del vettore di accelerazione di gravita' e quindi la rotazione sul piano ortogonale al vettore gravita' non e' registrabile)



Sfruttando questo post ho provato a fare la stessa cosa con un ADXL335

Nel post e' peraltro interessante l'uso di un filtro passa basso.Agendo  sul parametro alpha si puo' ottenere un filtraggio meno (con numeri vicini a 1) o piu' aggressivi (con numeri dell'ordine di 0.1)
A sensore fermo la misura oscilla con filtro a 0.4 di circa +/- 1°
---------------------------------------------------------------------------
const float alpha = 0.5;

double fXg = 0;
double fYg = 0;
double fZg = 0;

double Xg = 0;
double Yg = 0;
double Zg = 0;


void setup()
{
    Serial.begin(9600);
    delay(100);
}

void loop()
{
    double pitch, roll, Xg, Yg, Zg;
    Xg = (analogRead(A5)*(5.0/1023.0))-1.59;
    Yg = (analogRead(A4)*(5.0/1023.0))-1.60;
    Zg = (analogRead(A3)*(5.0/1023.0))-1.67;

    Xg = 9.8*(Xg/0.33);
    Yg = 9.8*(Yg/0.33);
    Zg = 9.8*(Zg/0.33);
   
  
    //Low Pass Filter
    fXg = Xg * alpha + (fXg * (1.0 - alpha));
    fYg = Yg * alpha + (fYg * (1.0 - alpha));
    fZg = Zg * alpha + (fZg * (1.0 - alpha));

    //Roll & Pitch Equations
    roll  = (atan2(-fYg, fZg)*180.0)/M_PI;
    pitch = (atan2(fXg, sqrt(fYg*fYg + fZg*fZg))*180.0)/M_PI;

    Serial.print(pitch);
    Serial.print(":");
    Serial.println(roll);

    delay(100);
}

---------------------------------------------------------------------------

Nessun commento:

Posta un commento

Physics informed neural network Fukuzono

Visto che puro ML non funziona per le serie tempo di cui mi sto occupando ed le regressioni basate su formule analitiche mostrano dei limiti...