Un accéléromètre est un composant de plus en plus courant dans des objets du quotidien : stabilisateurs d’image des camescopes numériques grand public, manette de console de jeux vidéo Nintendo Wii, etc..
On peut les utiliser dans des robots pour détecter des chocs, ou pour mesurer un déplacement (c’est un des composants d’une centrale inertielle, ou IMU, avec le gyroscope).
Les puces MEMS
L’accéléromètre que nous utilisons prend la forme d’un petit bout de silicium de quelques millimètres de large. On utilise une puce électronique fixée à un circuit de test (disponible sur le site de MikroElectronika ou sur Sparkfun).
Cette puce utilise une technologie qui permet de faire des mesures précises grâce à un micro-système électromécanique (ou MEMS) qui reproduit à l’échelle électronique des réactions mécaniques. C’est encore plus bluffant pour les gyroscopes, des machines qui faisaient plusieurs dizaines de centimètres de large remplacées par un MEMS d’à peine 5 mm de large et à un prix dérisoire (mais on en reparlera une prochaine fois).
Nous avions déjà utilisé ce module de test pour une manip’ avec la carte EasyAVR. La puce elle-même coûte moins de 10 euros et on trouve le circuit adaptateur (ou break-out en anglais) avec la puce déjà soudée et les composants de base pour une vingtaine d’euros.
Aujourd’hui, il s’agit de faire des tests avec le module de conversion USB/I2C de Devantech. Nous n’allons pas l’utiliser pour dialoguer en I2C mais il dispose d’un mode particulier pour l’acquisition de deux signaux analogiques : exactement ce qu’il nous faut.
La préparation
Le composant accéléromètre est un ADXL311. C’est le petit frêre de celui qui est utilisé dans la manette Nunchuck de la console Nintendo Wii. Il mesure des accélérations entre -2g et +2g, g étant la gravité terrestre. En effet, ce circuit va se comporter comme un gravitomètre, et sa valeur "au repos" (quand vous n’y touchez pas) ne sera pas nulle : vous aurez une mesure de la gravité terrestre.
Il est alimenté en 5 volts et fournit les informations d’accélération sur les deux axes par une tension analogique. Nous allons donc utiliser un convertisseur analogique numérique (ADC ou CAN en français) pour recevoir un nombre plutôt qu’une tension. Le convertisseur fonctionne en 10 bits, on recevra donc des valeurs comprises entre 0 et 1024.
Le module USB-I2C répond à des consignes envoyées sur une liaison série
(convertisseur USB-RS232, un classique composant FTDI) puis un microcontrôleur (PIC 16F) embarqué sur le module va pouvoir convertir les consignes soit en protocole I2C soit ici en conversion analogique numérique.
Les tests préliminaires
S’agissant de notre première utilisation du module USB-I2C, nous allons vérifier son fonctionnement en envoyant les octets via un terminal. Depuis longtemps nous avons abandonné l’ hyperterminal Windows au profit de Docklight, un terminal évolué permettant de définir des trames série et de les envoyer par un simple clic sur le bouton correspondant.
En lisant la documentation de Devantech, on trouve une commande très simple permettant de connaitre le numéro de version.
Le module répond (numéro de version 06) donc on a réussi à établir un dialogue : les paramètres du port série sont bons et le circuit fonctionne.
On va maintenant connecter le circuit portant l’accéléromètre à notre module USB-I2C et on va programmer une application graphique permettant de visualiser les valeurs.
De la même manière, on a besoin de vérifier la commande et le résultat retourné. Docklight est pratique car il peut envoyer régulièrement la même trame : on va donc vérifier qu’on reçoit les informations en retour de la commande de lecture analogique et on va tester les valeurs qu’on devra convertir.
On a bien 4 octets : octet de poids fort puis octet de poids faible pour chacun des deux signaux.
Le code Processing
Il faut bien configurer la connexion série, car le module utilise des paramètres particuliers :
– vitesse : 19200
– parité : aucune (’N’)
– bits de données : 8
– bits de stop : 2
Puis on va reprendre le code de ’l’oscilloscope minimal pour faire une conversion des deux octets de chacune des valeurs (codées sur 8 bits).
Ensuite il suffit de choisir la représentation : en fonction du temps ou en points (x,y).
Voici le code Processing dans les deux cas.
Observation sur graphiques
En fonction du temps :
En représentant les 2 valeurs comme un point (x,y) :
Utilisation avec microcontrôleur
On peut aussi utiliser un microcontrôleur pour faire l’acquisition car la plupart possèdent un convertisseur analogique numérique. Par exemple sur les ATmega (famille d’Atmel AVR), une conversion 10 bits permet d’avoir une valeur entre 0 et 1024 pour représenter une tension entre 0 et 5 volts (cette tension étant modifiable grâce à une entrée spécifique).
Nous avons fait des tests avec une carte de test / prototypage "EasyAVR", voici le code :
On affiche les différentes valeurs sur l’écran graphique, permettant de comparer la valeur initiale et les valeurs courantes :