mpu6050 Complementary filter

Ciao a tutti,
volevo avere un informazione riguardo il filtro .

Per implementare il filtro su ogni asse gli devo dare in pasto tutti gli assi alla funzione ?

float tau=0.075;
float a=0.0;

// a=tau / (tau + loop time)
// newAngle = angle measured with atan2 using the accelerometer
// newRate =  angle measured using the gyro
// looptime = loop time in millis() 


float Complementary(float newAngle, float newRate,int looptime) {
  float dtC = float(looptime)/1000.0;                                    
  a=tau/(tau+dtC) ;
  x_angleC= a* (x_angleC + newRate * dtC) + (1-a) * (newAngle);

  return x_angleC;
}

Altra cosa..
visto che la mpu6050 + Nano e posto su una cintura sul fianco , ho visto anche delle fluttuazioni sull'asse Y in presenza di buche o dossi improvvisi , questa cosa mi da non pochi problemi nella misurazioni di decelerazioni , in quanto le fluttuazioni su questo asse incidono sulla soglia di accensione e spegnimento a intermittenza dei led quando in teoria si dovrebbero accendere in sequenza in presenza di decelerazioni improvvise tipo frenata o urti solo su asse Y.

Ho cercato un po in giro e mi dicono di integrare un low-filter ho trovato questo:

 // Filtro Low-Pass
        float angle = (0.98)*angle+(0.02)*accY;

questa la pagina: http://web.mit.edu/~jinstone/Public/filter.pdf
Mi può essere utile se si in che modo, cioè non capisco come possa attenuare le fluttuazioni sull'asse Y.

Altro problema che devo risolvere:
Per ora l'ho provato solo in strada in piano , ma ho già visto che in presenza di discese superiori a 20° ovviamente l'asse Y si inclina i valori vanno sotto la soglia che ho previsto sull'asse Y "-150" e i led si accendono tutti.
Insomma un insieme di problemi che sto cercando di risolvere per gradi con del codice che mi viene in mente , ma se una buon anima mi da dei consigli sul dove agire ..

Vespucci:
Ciao a tutti,
volevo avere un informazione riguardo il filtro .

Usare il filtro complementare, molto scarso, con un MPU650 è decisamente poco efficiente, usa il suo DMP interno.

Ok ho convertito il tutto, e ho utilizzato il dmp con lib I2Cdev e ho pensato all'utilizzo del giroscopio per controllare quando la moto è in salita o in discesa, ma ho sempre quelle benedette fluttuazioni sull'asse Y in caso buche o dossi che fanno accendere i led a intermittenza.
Secondo la tua esperienza otterrei qualcosa con l'utilizzo di un low-filter come quello che ho postato poco sopra , ho già il dmp le attenua.
E nel caso fosse così , pensi che l'unico modo sia di fare prove su strada e tarare al meglio possibile i valori sull'asse Y ?

Vespucci:
Ok ho convertito il tutto, e ho utilizzato il dmp con lib I2Cdev e ho pensato all'utilizzo del giroscopio per controllare quando la moto è in salita o in discesa, ma ho sempre quelle benedette fluttuazioni sull'asse Y in caso buche o dossi che fanno accendere i led a intermittenza.

Penso che stai chiedendo troppo ad un sensorino da 10 E. :slight_smile:

uhmm pensavo una cosa del genere ma non me ne facevo una ragione ::slight_smile:
Vabbè ottimizzo al meglio che posso , e per ora bene così chiudo questo step del progetto.
Poi in futuro vedremo se sostituirlo con qualcosa di meglio.

Mi é venuta un altra idea, di come potrei risolvere il problema così potrei sganciare l'accensione dei led dalla misurazione della forza g in frenata dall'mpu6050.
Non so se sia una cosa fattibile, praticamente ho pensato la luce del freno si aziona quando si preme il freno della moto e normalmente su quasi tutte le moto arrivano 12v quando è al minimo e 13,7-14 quando il motore gira sopra i 7000giri.
Ci sono in giro degli apparechietti che in caso di presenza di tensione invino un segnale.., non so wireless, wifi, bluetooth ?

edit: Nel caso non ci fossero potrei costruirmeli , le idee sono ben accette :grinning: