Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Capteurs de position > Contrôleur 3D sans contact

Contrôleur 3D sans contact

mercredi 22 octobre 2008, par Julien H.

Nous présentons ici une mise en application des capteurs capacitifs par une expérience simple dans une configuration ludique. On peut ainsi sans aucun contact détecter la présence et même estimer la distance à un objet de taille importante.

L’utilisation de ces capteurs peut servir sur un robot pour détecter les murs ou les adversaires. La précision est certes moindre qu’un radar électronique à ultrasons ou à infrarouge, mais c’est très économique et permet d’ajouter une détection dans plusieurs directions.

Pour notre démonstration, on a conservé le jeu vidéo en 3D réalisé par l’auteur inital, une sorte de tic-tac-toe en trois dimensions :

Interface du morpion 3D

On va présenter la réalisation à faible coût d’un contrôleur 3D puis passer à des tests et expliquer le phénomène physique. Il s’agit à la base d’une manip’ présentée en anglais par Kyle McDonald sur le site Instructables (en anglais) : DIY 3D Controller

.

Le principe scientifique a été étudié pendant l’année scolaire 2008-2009 par deux élèves de classe préparatoire scientifique du Centre International de Valbonne (CIV) qui ont choisi ce sujet d’étude pour leur TIPE. Pour 2011, nous prévoyons de mettre à disposition de l’INRIA notre démonstration pour des exposés dans les établissements scolaires.

Les explications

Le corps humain est plein de charges électriques. Il réagit avec les surfaces conductrices polarisées du capteur comme un condensateur géant, l’air faisant office de diélectrique capable de faire passer plus ou moins de charges du corps au capteur.

Plus les deux surfaces conductrices sont près l’une de l’autre, le plus de charges vont passer. L’explication est qu’une force s’exerce sur ces charges : la force Coulombienne. Cette force est proportionnelle à l’inverse du carré de la distance qui sépare les deux surfaces. Plus d’informations : loi de Coulomb

Le principe de mise en œuvre est que la carte Arduino va utiliser un port numérique à la fois en sortie et en entrée. Pas un port analogique car la conversion serait beaucoup trop longue.

  • Étape 1 : mettre la sortie numérique à 0, ce qui met la plaque à la masse et elle est alors "déchargée".
  • Étape 2 : mettre le port en entrée numérique et lancer le chrono.

La plaque agit alors comme un capteur et se charge progressivement (courbe ci-dessus). Quand on atteint la tension de seuil (environ 3,5 volts, voir la valeur exacte dans la documentation technique d’un AVR ATmega8), l’entrée passe de 0 à 1 et on arrête le chronomètre.

  • Et on recommence un certain nombre de fois avant de passer à la plaque suivante... avec une petite astuce made in Kyle Mc Donald (l’auteur anglophone de la manip) qui consiste à faire des mesures tous les 50 Hz (ou 60 Hz dans son pays) pour s’affranchir des effets indésirables de l’alimentation EDF.

Le matériel

Pour l’acquisition du signal, nous utiliserons une entrée numérique d’un micro-contrôleur, que nous pouvons également faire passer en sortie. Le modèle choisi est l’Atmel AVR via la carte Arduino qui nous sert à ce genre de prototype.

Pour le capteur en lui-même, nous avons juste besoin :
 d’une feuille de papier d’aluminium par capteur (3 en tout)
 de deux résistances (10 kOhms et 270 kOhms) par capteur (6 en tout)
 3 pinces crocodiles
 3 câbles
 1 connecteur 3 pins mâle ou femelle selon votre carte électronique

Matériel nécessaire

Et c’est tout !

La construction

On découpe des feuilles d’alu en carré de largeur d’un rouleau de cuisine (et oui..) et on les colle sur un carton. On forme alors avec ces cartons 3 faces contiguës d’un cube et on obtient le contrôleur 3D.

Contrôleur 3D alu assemblé

Astuce : du scotch métallique permet de protéger le papier d’aluminium aux endroits où vous accrocherez les pinces croco.

Scotch métal

Il faut ensuite faire le circuit électronique. Vous trouverez plus bas les explications avec un schéma électronique qui explique le principe. Nous avons également besoin d’un schéma pratique pour réaliser la soudure.

Circuit schématique pour soudure

Sur l’image ci-dessus, on va souder sur une plaquette d’essai découpée aux dimensions suffisantes pour les quelques composants à souder (avec suffisament de place pour les résistances).

On peut aussi souder directement les composants entre eux sans passer par un circuit imprimé / plaque à trous. Cela prend moins de place, mais c’est juste un peu plus "rock’n’roll" pour y arriver et on peut faire des bêtises comme des courts-circuits ou casser les pattes de résistances.

Soudure et protection des résistances

Mais le résultat est sympathique :

Pour protéger ce circuit pendant les manipulations, on utilise de la gaine thermorétractable. On entoure les fils soudés avec un fuseau de plastique que l’on chauffe pour qu’il se resserre.

Gaine thermo autour du connecteur

L’expérimentation

Le premier travail est de bien connecter les pinces crocodiles, donc d’identifier les entrées sorties.

Il y a 3 entrées numériques sur notre carte d’expérimentation :
 entrée Arduino n°8 : axe ’x’ = plaque verticale gauche = oscillo rouge
 entrée Arduino n°9 : axe ’y’ = plaque horizontale bas = oscillo vert
 entrée Arduino n°10 : axe ’z’ = plaque verticale droite = oscillo bleu

... quand on regarde le cube depuis son coin ouvert.

Voici l’interface graphique "Tic Tac Toe 3D" de Kyle :

Visualisation 3D

Et voici ce que ça donne sur notre oscilloscope minimal (juste une visualisation graphique des valeurs reçues de la carte d’acquisition par liaison série) :

Visualisation des valeurs
normalisées en retirant le minimum de chaque valeur et multipliant par 2 pour "grossir" les différences.

Mais au delà de l’aspect ludique du montage, on veut surtout comprendre comment ça fonctionne, quelle précision ça peut avoir et les valeurs que l’on va pouvoir interpréter. On va donc connecter de vrais appareils de mesure : un analyseur logique et un oscilloscope.

L’oscillo sert à mesurer une tension. Il va donc représenter la tension aux bornes de la carte d’acquisition selon une échelle temporelle choisie par l’utilisateur (un "calibre"). Comme dans notre cas il ne s’agit pas d’une entrée analogique, mais d’un port de microcontrôleur fonctionnant alternativement en entrée et en sortie, l’oscilloscope va montrer ce qui se passe réellement.

Contrairement à ce qu’on pourrait croire, les I/O numériques d’un microcontrôleur ne sont pas soit à la masse soit à la tension nominale de la carte : la différence entre le 0 et le 1 se situe à une certaine tension ( 3 volts pour un microcontrôleur TTL dont la tension nominale est à 5 volts, et de moins en moins (jusqu’à moins d’un volts pour les dernières générations de processeurs dont la tension nominale est de 1,1 volts).

En connectant un oscilloscope (un vrai, pas celui qui trace les données numériques issues de nos calculs), ici un Tektronix THS720A à 100 MHz, on peut comprendre ce qui se passe : la décharge du capteur et sa charge progressive semblable à celle d’un condensateur, avec une pente qui varie selon la distance entre notre main et la surface d’aluminium du capteur.

Visualisation sur l’oscilloscope
Sur un vrai oscillo, on voit bien la charge du capteur.

L’analyseur logique est quant à lui un appareil complètement numérique : il représente sur un chronogramme les valeurs 0 ou 1 à l’identique de ce que le microcontrôleur perçoit. Voici à quoi ressemble un analyseur moderne : c’est un joujou plus petit qu’une boite d’allumettes, il s’agit ici du formidable Saleae Logic que nous avons en prêt en ce moment (many thanks Joe !)

Analyseur logique de Saleae

Voici ce que montrent les acquisitions. Tout d’abord on retrouve le principe d’acquisitions successives sur chacun des 3 ports / axes.

10 secondes d’acquisition

Puis en zoomant sur une des périodes de capture, on retrouve l’alternance niveau bas (décharge) niveau haut (charge du capteur dépassant la tension seuil du microcontrôleur pour faire la différence entre un 0 ou un 1 logiques).

Série d’acquisitions sur une entrée/sortie du microcontrôleur

On peut ensuite mesurer la longueur d’un créneau, donnant ainsi une valeur (celle qui va être envoyée aux applications graphiques) plus ou moins grande selon qu’on s’approche ou qu’on s’éloigne de la surface métallique du capteur.

Valeur minimum : 20 µs
Valeur maximum : 31 µs

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.