Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Capteurs de position > Accéléromètre Analog ADXL311

Accéléromètre Analog ADXL311

dimanche 7 décembre 2008, par Julien H.

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).

Accéléromètre (vue de dessous, ADXL311)
Accéléromètre (vue de dessus, ampli op)
vue de l’amplificateur opérationnel MCP6022I

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.

Datasheet ADXL311
document technique de l’accéléromètre.

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.

Connexion accéléro / USB
Plus rapide qu’un câble, la breadboard (mais moins pratique il est vrai)

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.

Programme Processing ADXL311 visu oscillo
Visualisation des valeurs reçues pour les axes X et Y de l’accéléromètre
Programme Processing ADXL311 visu XY
Une autre manière de représenter les valeurs, sous forme de points (x,y). Processing permet un effet de trace pour voir les valeurs précédentes.

Observation sur graphiques

En fonction du temps :

Visualisation d’un mouvement agité
Les deux courbes varient en même temps.
Visualisation d’oscillations régulières
On fait pivoter l’accéléromètre dans un sens puis dans l’autre.

En représentant les 2 valeurs comme un point (x,y) :

Visualisation (avec beaucoup de traces)
Visualisation XY (avec disparition)

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 :

Code source main AVR
conversion analogique numérique et affichage sur écran graphique LCD avec AVRlib

On affiche les différentes valeurs sur l’écran graphique, permettant de comparer la valeur initiale et les valeurs courantes :

Affichage des accélérations en X et Y

Portfolio

Vos commentaires

  • Le 4 novembre 2009 à 15:19, par ? En réponse à : Accéléromètre Analog ADXL311

    Bonjour,

    Je fais mes premiers pas dans le monde de l’électronique et cett epage est pleine d’inspiration pour moi.
    J’aimerai à partir d’un accéléromètre 2D sortie analogique controler un électro-aimant alimenté en 5 volts. Quand j’atteinds une accélération seuil, j’aimerai que mon électro aimant s’actionne. Est ce que le lien entre les deux est un micro controleur ou juste un montage qui amplifie mon signal de sortie de l’accéléro ?
    Merci pour votre aide.

    Nico

    • Le 4 novembre 2009 à 19:06, par Julien H. En réponse à : Accéléromètre Analog ADXL311

      Bonjour Nico,

      Bien sûr ça peut se faire avec de l’électronique non-programmable, comme un ampli-opérationnel et quelques résistances pour avoir un comparateur.

      Mais un micro-contrôleur sera certainement plus pratique pour faire des tests, et implémenter peut être une correction des valeurs de l’accéléromètre (lissage des valeurs dans le temps).

      Tout dépend du coût et de tes compétences en électronique. Les deux se valent.

    Répondre à ce message

  • Le 5 juillet 2011 à 11:30, par Larsen En réponse à : Accéléromètre Analog ADXL311

    Bonjour,

    Je cherche des solutions pour détecter le gonflage d’une batterie Li-Po pendant la charge (techno utilisée en modélisme et assez dangereuse). Le but est de mettre au point un système permettant d’éviter d’incendier sa maison en cas de problème, cela arrive assez souvent. Je voudrais savoir si ce genre de capteur peut detecter un mouvement de faible amplitude et relativement lent. Ordre de grandeur : déplacement de 3 mm vers le haut en 10 secondes.
    Merci d’avance.

    • Le 5 juillet 2011 à 15:47, par Julien H. En réponse à : Accéléromètre Analog ADXL311

      Bonjour Rodolphe.

      On connait bien le problème, et la solution passe d’abord par l’utilisation de sacs de sécurité (safety lipo bag).

      Concernant la détection, non un accéléromètre ne permettra pas la détection, en tout cas je ne pense pas que tu arriveras à le discriminer du bruit habituel. Mais cette information doit être précisée dans la doc technique (datasheet) du composant car avec les dernières générations, qui sait ?.

      Une solution à ton problème serait un capteur de contact positionné à la hauteur max (un microrupteur par exemple), sans doute avec un mécanisme de levier pour être plus sensible à l’élévation. Cela me semble en tout cas plus fiable et moins onéreux. Si tu as un problème de place, ça peut être l’inverse : un microrupteur enfoncé à côté de la batterie, dont l’élévation libère l’interrupteur.

    Répondre à ce message

  • Le 15 février 2011 à 18:00, par Rafik En réponse à : Accéléromètre Analog ADXL311

    Bonjour,
    Je ne sais pas si le thème est toujours d’actu pour vous, mais je prévois de faire une manip. avec peut être le même accéléromètre, en utilisant un microcontroleur (Easydspic30f4013 de MikroElektronika), et je n’ai pas d’écran d’affichage sur ce microcontroleur. Première question : comment pourrai-je visualiser les signaux que j’envoie pour la PIN selftest, et ceux de la réponse soit pour X soit celle de Y soit les deux (une me parrait suffisante pour moi) ?
    Deuxième question : comme je ne suis pas un connaisseur des MEMS, quelles sont les caractéristiques principales qu’on peut regarder dans un MEMS (exemple pour un amplificateur : Gain, le point de compression, la figure de bruit, ...) ?

    Merci pour votre réponse.

    • Le 16 février 2011 à 07:44, par Julien H. En réponse à : Accéléromètre Analog ADXL311

      Bonjour,

      Il faut utiliser la sortie série du micro-contrôleur pour envoyer les valeurs sur un ordinateur et les visualiser (voir nos exemples avec Processing dans ce même article).

      Pour les MEMS, je vous invite à consulter les documents techniques du constructeur.

    • Le 16 février 2011 à 08:57, par Rafik En réponse à : Accéléromètre Analog ADXL311

      Merci pour votre réponse,
      Lorsque vous me parlez de liailson série vous voulez dire la liaison RS232, puisque la liaison SPI sera utilisée pour communiquer avec le MEMS.

      Je voulais savoir s’il y a un moyen de stocker directement les signaux (excitation et réponses) sur l’ordinateur.

      Merci par avance.
      Rafik

    • Le 16 février 2011 à 19:37, par Julien H. En réponse à : Accéléromètre Analog ADXL311

      C’est tout à fait ça, RS232.

      Pour stocker les signaux, il suffit de mettre en place un logiciel qui récupère les valeurs par la RS232 et les stocke.

    Répondre à ce message

  • Le 24 novembre 2010 à 11:23, par Manue En réponse à : Accéléromètre Analog ADXL311

    Bonjour

    Je suis très intéressée par le sujet parce que j’ai le même projet à faire mais à partir d’un pic. Le problème est que je n’arrive pas à voir votre code source.
    Merci de m’indiquer comment je peux faire pour le visualiser.

    Je souhaite aussi savoir comment on fait pour connaitre la précision de l’accéléromètre ( je cherche un précis à 10%).

    Merci

    • Le 24 novembre 2010 à 14:31, par Julien H. En réponse à : Accéléromètre Analog ADXL311

      Bonjour,

      Je ne comprends pas le problème : le code source est disponible sur cette page.

      Si ton navigateur ne permet pas de le visualiser, fais un clic droit puis "enregistrer sous".

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.