/*Programme à compléter lorsque **** */ #include <MPU6050.h> //MPU6050 library #include <Wire.h> //IIC communication library MPU6050 mpu; //Instantiate an MPU6050 object; name mpu int16_t ax, ay, az, gx, gy, gz; //Define three-axis acceleration, three-axis gyroscope variables float angle_acc,angle_gyro; //angle variable float dt=0.005,K=0.40; // dt durée de la boucle cadencée // K=0.40 : 40% angle accéléromètre et 60% angle Gyroscope const int N=100; // Filtre moyenneur sur 100 mesures float Fifo[N],moyenne; float Gyro_y,Gyro_x; //Angular velocity variable // Offset gyroscope déterminé dans programme offset int offset_gx=*****,offset_gy=****, offset_gz=****; int offset_ax=****, offset_ay=***, offset_az=*****; unsigned long t0,i; void setup() { // Join the I2C bus Wire.begin(); //Join the I2C bus sequence Serial.begin(9600); //open serial monitor and set the baud rate to 9600 delay(1500); mpu.initialize(); //initialize MPU6050 delay(2); } void loop() { t0=micros();// top chrono pour un cycle de dt = 0,005 s soit 5000 µs // Lecture mpu6050 et calcul angle_acc mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //IIC to get MPU6050 six-axis data ax ay az gx gy gz ay=ay+offset_ay;az=az+offset_az; // correction d'offset angle_acc = *1*; //*1* Formule de calcul de l'angle de tangage. Signe selon convention : + = avant // Le filtre moyenneur Fifo[i%N]=*2*; // *2* Mise en place d'une file Fifo de N éléments angle_acc *3*; // *3* et *4* Calcul de la somme des N éléments de la file Fifo *4*; moyenne=moyenne/N; // Calcul angle gyro avec filtre complémentaire Gyro_x =*5*; // *5* Correction offset + Calcul vitesse en °/s (sensibilité : 131 LSB/(°/s)) angle_gyro=*6*; if (i<=N) angle_gyro=moyenne;// au début on utilise que angle_acc if (i%20==0) {// Transmission toutes les 20*5ms = 100ms Serial.print(angle_acc); // Pour exploitation par Labview transmission au format Serial.print(";"); // angle_acc;moyenne;angle_gyro Serial.print(moyenne); Serial.print(";"); Serial.println(angle_gyro); } // Possibilité à Labview de modifier K if (Serial.available()) { K=Serial.parseFloat(); while (Serial.available()) Serial.read();} while (*7*); // *7* attente pour boucle cadencée à dt=5000µs i++;// incrémentation du compteur de nombre de cycles }