Bonjour à tous,
Je viens vous présenter un projet sur lequel je travail depuis quelques temps. J'aimerai réaliser une plate forme d'acquisition pour moto. Cela me permettrait de valider mes travaux de thèse qui traitent de la modélisation des véhicules à deux-roues motorisés. Je suis suis plus familier avec Matlab qu’avec la programmation en C pour Arduino. C'est la raison pour laquelle je viens chercher de l’accompagnement sur ce forum.
La solution matérielle retenue est la suivante :
- Arduino mega 2560
- Adafruit Micro SD slot
- GPS venus sparkfun (20Hz)
- 2 capteurs effet hall (1kHz) (compteur)
- IMU BNO055 Bosch (100Hz)
- Codeur rotatif (100Hz)
- 2.8 TFT screen Adafruit
J'ai commencé le projet avec la programmation du GPS. Le programme enregistre les données (localisation, vitesse, ...) sur la carte SD avec une fréquence de 20 Hz. Cette partie est fonctionnelle et ci-jointe si elle peut servir à quelqu’un c’est avec plaisir.
Je me penche maintenant sur l'ajout de l'IMU. J'ai trouvé des exemples qui fonctionnent pour cette centrale mais je n'arrive pas à comprendre comment combiner les codes (GPS & IMU).
J'ai quelques soucis sur la syntaxe du programme dus aux différentes fréquences d'acquisition et également sur la gestion du processus d'écriture sur la SD sans empêcher l'acquisition des capteurs rapides.
Je pensais créer un buffer assez conséquent stockant toutes les données rapides supérieures ou égales à 100 Hz (IMU, capteurs effet hall, Codeur) jusqu'à l'exécution de la boucle la plus lente 20 Hz du GPS. Puis enregistrer les données (GPS et le buffer) sur la SD toute les 1/20=0.05 secondes.
Mais j'imagine que lorsque le processeur de l'Arduino écrit les données sur la SD le programme sera entrain de réaliser une nouvelle boucle d’acquisition et je vais avoir des soucis de concurrence de tâches.
Est ce que mon raisonnement se tient ? Et comment je peux résoudre le problème ?
J’espère trouver de l’aide.
En vous remerciant par avance,
Pm
NMEASDlog_PM_v4.ino (14.3 KB)