Datalogger d’angle, de vitesse, d’altitude … pour voiture, vélo ou MOTO

image principale Datalogger d’angle, de vitesse, d’altitude … pour voiture, vélo ou MOTO

Difficulté:

Vous souhaitez vous réaliser un module vous permettant d’enregistrer des parcours en vélo, voiture ou moto. Vous permettant d’analyser vos accélérations ou mêmes les tangages. Ce tuto est fait pour vous !!

 


 


Bonjour dans ce tutoriel je vais vous montrer comment mettre en œuvre un datalogger composé d’une centrale inertielle et d’un gps.


Etant motard et partisan du fait maison j’ai souhaité réaliser un prototype pour ma moto me permettant d’analyser différentes données comme l’angle que je prends dans un virage, la vitesse, la position… (Outil en vente sur le net mais bien trop cher et moins enrichissant personnellement). Bien sur cela s’applique aussi sur d’autres véhicules !!
Alors ça fait plus d’un an que je travaille dessus avec de nombreuses versions car en effet ce n’est pas aussi simple que ça ni parait d’obtenir un angle d’inclinaison sur une moto. Lorsque l’on roule en moto ou en voiture, le véhicule est soumis à la force centrifuge qui notamment dans les virages perturbent énormément les capteurs. Il faut donc appliquer des algorithmes et du filtrage sur les données afin qu’elles soient exploitables.
A terme je souhaite embarquer un tel prototype sur circuit afin d’analyser ces résultats afin de progresser.


 

Matériel :

Budget : Non défini

  • #gallery-1 {
  • margin: auto;
  • }
  • #gallery-1 .gallery-item {
  • J’ai utilisé une carte de développement Linkit one de chez Médiatek très complète (peu chère pour le nombre de possibilités qu’elle propose). Pour information elle dispose d’un module Bluetooth, wifi, GSM, slot SD, GPS intégré, une mémoire Flash et une petite batterie. Pour ce projet j’ai utilisé la mémoire flash de 10mo intégrée. Tout cela accouplé à une centrale inertielle 9 axes MPU9255 (accéléromètre, gyroscope et magnétomètre) communicant en I2C et un capteur gps de type Ublox 6m. 
  • float: left;
  • margin-top: 10px;
  • text-align: center;
  • #gallery-1 img {
  • border: 2px solid #cfcfcf;
  • }
  • width: 33%;
  • }
  • #gallery-1 .gallery-caption {
  • margin-left: 0;
  • }
  • /* see gallery_shortcode() in wp-includes/media.php */
  • </style><p>J’ai utilisé une carte de développement Linkit one de chez Médiatek très complète (peu chère pour le nombre de possibilités qu’elle propose). Pour information elle dispose d’un module Bluetooth, wifi, GSM, slot SD, GPS intégré, une mémoire Flash et une petite batterie. Pour ce projet j’ai utilisé la mémoire flash de 10mo intégrée. Tout cela accouplé à une centrale inertielle 9 axes MPU9255 (accéléromètre, gyroscope et magnétomètre) communicant en I2C et un capteur gps de type Ublox 6m.</p><p><strong> </strong></p>

Etape 1 : Budget: 40€ environ

 

Etape 2 : Fonctions réalisées

 

Datalogger, analyseur d’angles, localisation, vitesse, altitude …

Le but est d’enregistrer un grand nombre de données sur la mémoire interne ou sur la carte SD qui sont alors post analysées par un outil informatique. J’ai utilisé Matlab mais il est possible d’écrire un programme en n’importe quel langage pour ça.

Etape 3 : Principe de fonctionnement et programme

 

1. Dans un premier temps j’ai initialisé la centrale inertielle (I2C) et je l’ai paramétré. (voir fonction initializeMPU9255(). On paramètre notamment les plages des capteurs et on réalise la calibration du magnétomètre.

2. Puis lorsque le mode datalogger est activé (via un BP), on vient venir ouvrir un fichier sur la mémoire afin de stocker les informations. J’ai ajouté pour faciliter l’utilisation une petite led qui s’allume lorsque l’on est dans ce mode.

3. Puis dans une boucle infinie ou arrêter (avec toujours un BP dans mon prototype), nous allons acquérir toutes les informations et les écrire dans le fichier texte.

Voici par exemple comment je réalise l’enregistrement de mes données, je réalise une concaténation des différentes valeurs dans un buffer, puis une fonction a pour but de les écrires sur la mémoire (SD ou mémoire flash interne).

sprintf(buffEcriture, “%.5f %f %f %f %f %f %f %.2f %.2f %.2f %.6f %.6f %.2f %.2f”, time, gx1, gy1, gz1, ax1, ay1, az1,(float)mx1, (float)my1, (float)mz1, longitude,latitude,vitesse,altitude);
datalog.println(buffEcriture);

J’enregistre notamment le temps entre deux écritures afin d’en déduire la fréquence d’échantillonnage, les données gyroscopiques, les données de l’accéléromètre, les données du magnétomètre ainsi que la longitude, la latitude, la vitesse et l’altitude. Plusieurs infos que je traiterais dans un programme sur pc.

4. Une fois la capture terminée (via l’arret par bouton poussoir), le programme revient en position d’attente, il nous reste qu’à connecter la carte via USB ou de récupérer la carte SD (si utilisé) et de récupérer les données. Dans le futur, j’essaierais de télécharger les données par la communication Bluetooth (plus pratique).

Etape 4 : Extraction des données

 

Les informations apparaissent comme ceci dans mon fichier texte :

5.00000 -0.365854 1.158537 -0.548781 0.307129 -0.067871 -0.920898 -8.40 44.40 -21.00
37.00000 -0.243902 0.853659 -0.243902 0.278320 -0.065918 -0.907715 -8.25 45.45 -21.15
133.00000 0.000000 -1.463415 -0.060976 0.265625 -0.059570 -1.046387 -8.55 44.55 -20.25

Je les passe ensuite dans un fichier Excel dont je passe la méthode (collage spécial dans Excel afin d’importer les données). Voir la capture d’écran

Etape 5 : Exploitation des données

5. Enfin voici le traitement des données. Le programme se contente de récupérer les données du fichier Excel, j’affiche les différents angles d’Euler qui sont calculés, le tracé du parcours et ainsi que d’autres informations! Les angles d’Euler sont tirés à partir des informations de la centrale inertielle et l’utilisation de quaternion.
Je génère aussi en parallèle un fichier .gpx exploitable par de nombreux sites internet permettant de tracer le parcours avec les vitesse etc..
Voici comment je le génère sous Matlab si ça peut aider:

%génère le fichier gpx exploitable sur le net
.2f\n2014-11-18T21:30:51.39Z\n’,v(i,1)*0.277778);
fprintf(gpx,’%i\n2\n1001\n\n’,i);
end
fprintf(gpx,’\n’);

fclose(gpx);

La norme est facilement accessible sur le net

Etape 6 : L’installation

Voici comment le proto à été réalisé, un bouton on/off pour l’alimenter, et un bouton pour lancer le programme. Il me manque juste une led pour afficher l’état du programme (à venir).
Pour le moment je fixe le boitier sur mon réservoir avec des scratch double face qui me permette de le tester et démonter rapidement.

Etape 7 : Perspectives

 

Avec ces données qui sont parfois abstraites (courbe et ratio), il est souvent difficile de ce rendre compte des résultats atteints. C’est pour cela que j’ai souhaité réaliser un petit utilitaire permettant de tracer en temps réelle ou en vitesse accélérée le parcours enregistré tout en affichant l’angle de la moto et la vitesse sur des compteurs style voiture. J’ai aussi ajouté la vitesse max, l’angle max et la vitesse moyenne sur des afficheurs LCD.
Je peux aussi revenir en arrière, zoomer etc..
C’est très pratique de ce servir de cette utilitaire qui se base encore une fois sur le fichier excel cité plus haut.

Ce petit logiciel est réalisé via Qt créator en C++. Très sympa pour faire ce genre de chose assez rapidement.

Etape 8 : Remerciements

 

Voilà merci à ceux qui ont lu ce petit tuto et n’hésitez pas à aller voir mon code afin de comprendre comment est faite la communication entre la carte et les capteurs (I2C et UART). Ces fonctions sont pour la plupart compatible avec les cartes Arduino et le programme s’ouvre avec l’IDE Arduino.
En espérant avoir intéressé du monde et si vous avez des questions n’hésitez pas.
Comme on dit chez nous les motards GAZZZZZZZ

 

 

Sources :

http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms/, http://labs.mediatek.com/site/global/developer_tools/mediatek_linkit/whatis_linkit/index.gsp


Impressionnant ton datalogger pour motard ! Merci pour le partage et pour le détail !

Merci l'ami 😉

Ces tutoriels devraient vous plaire

vignette Arduino Uno - Capteur d'humidité au sol.
Arduino Uno - Capteur d'humidité au sol.
vignette Comment fabriquer son filament pour imprimante 3D
Comment fabriquer son filament pour imprimante 3D
vignette Connecter un  écran LCD en I2C
Connecter un écran LCD en I2C
avaatar antoconde

antoconde

Suivre

Vues: 1572
Mis en favoris: 1

Découvrez d'autres tutoriels de

antoconde

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers