Pages

mercredi 25 juin 2014

IMU

Pour rappel, une IMU est une centrale inertielle, c'est à dire un capteur composé d'un accéléromètre et d'un gyroscope et de capacités de calcul pour déterminer son orientation (éventuellement sa position).

L'objectif est ici de monter ce composant directement sur ou à proximité du cerf-volant, pour avoir une image de la position et de l'orientation du cerf-volant.
Si l'on fixe le capteur directement sur le cerf-volant, la mesure dépendra du border-choquer et du différentiel de longueur entre les arrières.
Si l'on fixe le capteur sur une ligne seulement, l'information de rotation autour de l'axe des lignes ne sera pas mesurable.
La bonne solution serait donc de fixer le capteur sur un support reliant les deux arrières

Je cherche à utiliser le magnétomètre pour avoir l’azimut des lignes du kite, l'accéléromètre pour retrouver l'orientation par rapport à l'axe des lignes, ainsi que l'élévation.
Le gyroscope permet d'avoir une mesure qui n'est pas (moins) perturbées par les accélérations qui sont importantes au niveau du cerf-volant.

Une communication radio est ensuite nécessaire pour renvoyer les résultats vers la station au sol. Une carte arduino nano sert d'interface entre les deux, le tout alimenté par une batterie dans un premier temps, peut-être par une micro-éolienne ensuite.

Je n'abandonne pas l'idée du téléphone portable et de la caméra, entre les lignes avant, au niveau du sol, mais cela permettra en tout cas de faire une comparaison des différentes solutions (coût, précision, latence).

J'ai repris le travail de Lucas sur l'IMU Drotek.

Arduino Nano et IMU 10dof Drotek. Notez la connexion pour les interruptions, non détaillée sur le site de Drotek.


Il m'a tout d'abord fallu installer toute une série de bibliothèque et les installer, ce que je ne détaillerai pas ici.

http://www.pjrc.com/teensy/td_libs_MsTimer2.html

http://www.airspayce.com/mikem/arduino/VirtualWire/ version 1.27

http://www.i2cdevlib.com/usage

Cette dernière bibliothèque contient des exemples pour tester la communication avec le protocole I2C avec les composants de l'IMU.

Parmi les exemples, un ne fonctionnait pas (gy_521_send_serial), mais le MPU6050_DMP6 qui fait un peu de fusion de données renvoyait des valeurs variables.

J'ai ainsi pu vérifier la réception de données depuis le MPU6050 (accéléromètre et gyroscope), ainsi que des capteurs donnant la température et la pression (de laquelle peut-être calculée la pression).

Un exemple (avec Processing) permet de visualiser la qualité des mouvements mesurés par l'IMU. Mais cet exemple ne fonctionnait pas très bien. J'ai trouvé une version améliorée
http://www.geekmomprojects.com/mpu-6050-dmp-data-from-i2cdevlib/

On constate que la communication ne se passe pas très bien lorsque le "baud rate" est maximum, ni quand on le diminue (erreur "FIFO overflow"  qui se traduit pas des discontinuités dans les mouvements).
Il ne semble pas y avoir de solutions à ce problème.

En ce qui concerne le capteur de pression, la pression semble biaisée (très faible), ce qui a pour effet de donner après calcul une hauteur de près de 9000m... Mais cela n'est pas forcément gênant s'il s'agit seulement d'un problème de calibration.

Deux difficultés restaient à résoudre :
  • réussir à lire les données du magnétomètre qui n'était pas directement relié à l'arduino.
  • envoyer les données vers le sol en liaison radio
En ce qui concerne le problème de lecture du magnétomètre, la documentation est un peu légère sur le site de Drotek, mais heureusement d'autres se sont déjà trouvés face au problème. La solution est en fait de dire à des composants de la carte (le MPU6050) de laisser passer le signal du magnétomètre http://www.drotek.fr/forum/viewtopic.php?f=10&t=204

Pour la liaison radio, je disposais d'une paire émetteur récepteur.
La bibliothèque VirtualWire avait permis à Lucas de faire quelques tests au baudrate spécifié (4800bps, voire 9600bps).

https://www.pjrc.com/teensy/td_libs_VirtualWire.html

Malheureusement comme expliqué précédemment la communication à cette vitesse n'est pas possible, car c'est trop lent.

A suivre

Aucun commentaire:

Enregistrer un commentaire