jeudi 10 mai 2012

Contact

Ce qui est séduisant avec Arduino, c'est la facilité de mise en œuvre et le coût relativement modéré (surtout quand on achète des clones chinois). Après l'installation du logiciel (une espèce d'environnement intégré écrit en Java), il suffit de brancher la carte sur un port USB et de commencer l'expérimentation avec les exemples fournis avec le logiciel. Il existe de nombreuses vidéos sur Youtube et de nombreux blogs qui montrent à quel point il est facile de démarrer.

Ainsi, pour 15 euros, j'ai acheté une carte Arduino Uno, pour moins de 5 euros, un module accéléromètre MMA7361 et pour 7 euros de plus, un lecteur de carte SD. À la réflexion, j'aurais probablement dû prendre un 'shield' (c'est comme ça que s'appellent les modules piggybag Arduino) Ethernet, pas beaucoup plus cher qui comprennent un lecteur de carte micro-SD... Et donc, après avoir mis le fil rouge sur le bouton rouge et le fil bleu sur le..., me voilà en mesure de tester l'accéléromètre.

Petit système d'acquisition permettant de mesurer les variations de 'g' dans un ascenseur.

Cela donne quelque chose comme :

Premières séries de mesures dans deux ascenseurs.

On voit bien les changements d'accélération : 'g' diminue quand on commence à descendre, augmente en fin de descente, etc... Cependant, c'est très bruité et je n'ai aucun contrôle temporel sur la mesure. Il s'agit juste du 'sketch' de démo 'datalogger' (c'est ainsi qu'ils appellent les 'programmes' Arduino).

En mettant des capacités de découplage, on peut réduire le bruit à ce qui semble être un niveau acceptable. Il y avait beaucoup moins de bruit avec Serial.println() qu'il n'y en a avec SD.println(). Et moins de bruit quand on utilise l'alimentation par le port USB que quand on utilise les piles. Autre amélioration : plutôt que d'ouvrir et fermer le fichier à chaque écriture, l'ouvrir une seule fois et faire un file.sync() toutes les 100 écritures. Si on ne fait pas le 'sync()', le fichier reste vide quelque soit le nombre d'écritures. Si on fait des 'open/close' à chaque écriture, on ne fait que ~50 écritures (de 3 données)/seconde alors qu'on en obtient 70 par la ligne série (simulée sur l'USB) à 9600 bauds! Il faut dire qu'à chaque écriture d'une ligne, il faut lire plusieurs blocs de 512 sur la carte SD (localiser le fichier, lire le bloc où on veut écrire,...) et en écrire le bloc modifié et le bloc contenant la taille du fichier... Si on n'écrit sur la carte que toutes les 100 mesures, on arrive à plus de 2000 mesures par seconde. Et, cela donne quelque chose comme :

9 secondes dans un ascenseur...; le bruit a fortement diminué et les mesures sont 200 fois plus fréquentes

On voit que le bruit est fort réduit et on a beaucoup plus de mesures pour lisser la courbe. Reste qu'on n'a aucune notion de temps-réel. On sait juste que l'on mesure de l'ordre de 2000 fois par seconde (mais que quand on écrit réellement sur la carte SD, cela ralentit très fort. Cela empêche, par exemple d'estimer la vitesse ou de faire une analyse fréquentielle par transformée de Fourier. Pour cela, il va falloir utiliser un RTOS...

<à suivre>