Accelero Brindan

Dependencies:   mbed LSM6DS33

Files at this revision

API Documentation at this revision

Comitter:
Birunthan
Date:
Thu May 09 21:02:26 2019 +0000
Parent:
1:bcb2d1a61147
Commit message:
Pour le finale !

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r bcb2d1a61147 -r 59eeb8637e5d main.cpp
--- a/main.cpp	Thu May 09 14:43:53 2019 +0000
+++ b/main.cpp	Thu May 09 21:02:26 2019 +0000
@@ -7,49 +7,49 @@
 
 LSM6DS33 acc = LSM6DS33(I2C_SDA, I2C_SCL);      //Déclarations des broches pour la communication en I2C
 
-float axx0;
-float ayy0; 
+float axx0; // On définit la variable pour l'accélération initiale en x
+float ayy0; // On définit la variable pour l'accélération initiale en y
 
-float axx1;
-float ayy1; 
+float axx1; // On définit la variable pour l'accélération évoluant au cours du temps selon x
+float ayy1; // On définit la variable pour l'accélération évoluant au cours du temps selon y
 
-float vx0;
-float vy0; 
+float vx0; // On définit la variable pour la vitesse initiale en x
+float vy0; // On définit la variable pour la vitesse initiale en y
 
-float vx;
-float vy;
-float V;
+float vx; // On définit la variable pour la vitesse évoluant au cours du temps selon x
+float vy; // On définit la variable pour la vitesse évoluant au cours du temps selon y
+float V; // On définit la variable pour la norme de la vitesse.
 
-float epsilonx;
-float epsilony;
+float epsilonx; //  Variable utilisé pour l'initialisation, elle permet d'avoir la valeur de axx0 la plus proche possible de l'accélération initiale en x
+float epsilony; //  Variable utilisé pour l'initialisation, elle permet d'avoir la valeur de ayy0 la plus proche possible de l'accélération initiale en y
+// En effet, lors de la mesure de l'accélération initiale, on ne peut pas être certains que la première mesure faite par l'accéléromètre correspond 
+// exactement à l'accélération intiale : il est possible qu'un léger décalage/rotation ait eu lieu, résultant à une accélération intiale erronée. 
+// Par la suite, on explique la méthode utilisée pour résoudre ce problème
 
-float tabax[5];
-float tabay[5]; 
-float tabvx[5];
-float tabvy[5];
+float tabax[5]; // Tableau des 5 dernières accélérations en x mesurées
+float tabay[5]; // Tableau des 5 dernières accélérations en y mesurées
+float tabvx[5]; // Tableau des 5 dernières vitesses en x mesurées
+float tabvy[5]; // Tableau des 5 dernières vitesses en y mesurées
 
-int k;
-
+int k; // Variable d'incrémentation
 
-int a1; //Grandeurs pour déterminer si les roues de la voiture sont immobiles 
-int a2; //ou non. Mesure si la valeur du compteur incrémental change
 
 int main()
 {
-    a2 = 0;
-    k = 0;
-    vx = 0;
-    vy = 0;
+    // On initialise les différentes variables qui évoluent : 
+    k = 0; // l'entier k nous permettant d'indexer les mesures
+    vx = 0; // la vitesse en x
+    vy = 0; // la vitesse en y
     
-    acc.begin();
+    acc.begin(); // On démarre la lecture de l'accéléromètre 
     
-    acc.readAccel();
-    axx0 = acc.ax; 
-    ayy0 = acc.ay; 
+    acc.readAccel(); // On lit les données de l'accéléromètre
+    axx0 = acc.ax;  // On affecte à axx0 la première lecture par l'accéléromètre selon l'axe x
+    ayy0 = acc.ay;  // On affecte à ayy0 la première lecture par l'accéléromètre selon l'axe y
     
-    acc.readAccel();
-    epsilonx = acc.ax-axx0;
-    epsilony = acc.ay-ayy0;
+    acc.readAccel(); // On lit de nouveau les valeurs sur l'accéléromètre et on les compare avec les valeurs précédentes
+    epsilonx = acc.ax-axx0; // écart selon x entre la nouvelle accélération et l'ancienne accélértion
+    epsilony = acc.ay-ayy0; // écart selon y entre la nouvelle accélération et l'ancienne accélértion
     
     while (1) {
         
@@ -57,22 +57,22 @@
     // On calcule l'écart entre la valeur lue et la valeur initial (contenant le bruit)
     // On veut que l'accéleration qu'on mesure soit nul, pour cela, nous devons trouver axx0
     // le plus précisement possible ( à 10^-2). On pourra alors retrancher axx0 au futur valeur.
-    
-        while(abs(epsilonx)>0.001 or abs(epsilony)>0.001)
+    // NB : D'autres méthodes sont possibles, par exemple faire la moyenne des n premières valeurs...
+        while(abs(epsilonx)>0.001 or abs(epsilony)>0.001) 
         {
             axx0=axx0+epsilonx;
             ayy0=ayy0+epsilony;
             acc.readAccel();
             epsilonx = acc.ax-axx0;
             epsilony = acc.ay-ayy0;
-            printf("epsilonx vaut : %f\n", epsilonx);
+            printf("epsilonx vaut : %f\n", epsilonx); 
             printf("epsilony vaut : %f\n", epsilony);
         }
         
     // Mesure de l'accélération en g (1g = 9,8 m/s^2) 
     acc.readAccel();
-    axx1 = acc.ax-axx0;    
-    ayy1 = acc.ay-ayy0; 
+    axx1 = acc.ax-axx0;    // accélération en x mesurée auquel nous avons retranché l'accélération initial en x
+    ayy1 = acc.ay-ayy0;    // accélération en y mesurée auquel nous avons retranché l'accélération initial en y 
     
     // Condition de seuil pour eviter de prendre en  compte le bruit
     if (abs(axx1) < 0.01) 
@@ -85,19 +85,22 @@
         }
     // Calcul de la vitesse par intégration
     wait(0.0005);
-    vx = vx + axx1*9.8*0.0005*1000;
-    vy = vy + ayy1*9.8*0.0005*1000;
-    V = sqrt(vx*vx+vy*vy);
+    vx = vx + axx1*9.8*0.0005*1000; // l'accéleration est lue en g, on souhaite l'obtenir en m/s^2. Lors de l'intégration, on multiplie tout simplement
+    vy = vy + ayy1*9.8*0.0005*1000; // par le temps d'intégration entre deux lectures.
+    V = sqrt(vx*vx+vy*vy); // Calcul de la norme de la vitesse
     
-    if (abs(vx)<0.001)
-    {
+    if (abs(vx)<0.001) //  On considère que si la vitesse mesurée est inférieur à 0.001 m/s résulte du bruit
+    {                  //  Cette condition fixe notre sensibilité, ainsi toute vitesse inférieur à cette condition est tout simplement ignorée.
         vx=0;
         }
     if (abs(vy)<0.001)
     {
         vy=0;
         } 
-        
+    // Malgré tout, due au faite que l'accéleration n'est pas continue, nous n'arrivons pas à faire redescendre la vitesse à 0. 
+    // (problème d'intégration de l'accéleration due à son échantillonnage)
+    // Pour combler ce soucis, nous comparons les 5 dernières valeurs et considérons que si l'accélération ET la vitesse est inférieur à une certaines valeurs
+    // alors, l'objet est bien immobile et on remet donc la vitesse à zéro. 
         if (k == 5) {k=0;}; 
         tabax[k] = axx1;
         tabay[k] = ayy1;
@@ -122,8 +125,6 @@
     
     //printf("acceleration en V = %f\n", V);
     
-    //if (a1=a2)
-    
     } // fin du while
 
 } // fin du main
\ No newline at end of file