Détecteur de touche de surface

Salut,

Je voudrais faire un truc relativement simple : je voudrais que mon arduino détecte quand je touche une surface. L’idée, c’est de recouvrir une surface avec de la peinture conductrice. Quand je touche la peinture, mon arduino le sait et fait qqchose.

Par contre je ne trouve pas comment le faire. Est-ce que vous auriez une idée ?

Merci par avance

Changement de capacité de la surface

Regardez ce genre de posts (ou encore celui là)

Vous pouvez aussi regarder le concept des boutons capacitifs (chercher TTP223B )

Si tu as un Arduino (Uno, nano, etc), tu devrais jeter un oeil à la bibliothèque CapacitiveSensor. Si tu as un ESP32, certaines des broches sont équipées de capteurs sensibles au toucher de base.

Damned : grillé par J-M-L !!

:slight_smile:

@J-M-L : le deuxième lien a l'air d'être ce qu'il me faut, merci ! par contre autre question : si je veux me faire ça pour environ 15 détecteurs, il me faudra plusieurs arduino ?

Oui et Non soit un arduino avec assez de pins, une par zone de touch, soit vous multiplexez les entrées - il y a des composants chainables pour cela

merci !

vous pouvez aussi regarder le "TTP229 16 Key Capacitive Touch Keypad" et voir comment c'est géré

bonsoir JML, je viens de tester ce tuto http://www.instructables.com/id/How-To-Use-Touch-Sensors-With-Arduino/ que vous m'avez conseillé, et ça marche nickel ! Merci beaucoup :slight_smile:

je regarderai les autres liens pour la culture

merci encore !

super :slight_smile:

Salut, je remonte cette question que j'ai posée.

Je suis parti de ce montage : http://www.instructables.com/id/How-To-Use-Touch-Sensors-With-Arduino/

Je veux mettre plusieurs capteurs en parallèle, pour ça je vais utiliser un multiplexeur (comme expliquer ici : Utiliser un multiplexeur analogique CD4051B avec une carte Arduino / Genuino | Carnet du maker - L'esprit Do It Yourself). Sur la même pin d'envoi, je mets deux résistances que je lie ensuite à deux entrées distinctes (disons 0 et 1) de mon multiplexeurs. Dans une boucle, je lis les valeurs des sorties 0 et 1 de mon multiplexeur.

  • quand je touche seulement le capteur de l'entrée 0, je mesure environ 300, et une valeur insignifiante sur l'autre entrée
  • quand je touche seulement le capteur de l'entrée 1, je mesure environ 300 également, et une valeur insignifiante pour l'autre
  • quand je touche les deux, je mesure environ 20 sur chaque entrée... alors que j'espérais mesurer 300 pour les deux.

J'intuite une sorte de court-circuit...

  1. Ai-je raison (sinon quelle est la raison) ?
  2. Comment solutionner ?

Merci par avance !

dans ce dessin du tuto que vous avez mentionné on voit que la pin source va servir à "alimenter" la résistance qui est super grande

si cette pin source est partagée entre 2 résistances et que vous créez un chemin capacitif en touchant l'un des deux capteurs alors le courant s'effondre dans l'autre car la pin n'a pas une puissance illimitée
--> à mon avis soit il vous faut 2 pins sources différentes pour vos 2 capteurs (et 2 pins destination, de lecture)

N'oubliez pas qu'il faut que votre GND du système soit aussi relié à la terre chez vous (si votre PC est alimenté avec une prise terre et que votre arduino est alimenté par USB alors ça devrait aller, sinon relier le GND à une conduite d'eau ou broche de prise de terre)

à tester

Merci pour la réponse, je me permets quelques questions / remarques :

  • je ne comprends pas cette histoire d'effondrement et le rapport avec quand je touche deux capteurs à la fois
  • je ne peux pas mettre 2 pins source différentes puisqu'à terme j'aurai besoin d'environ 15 capteurs... C'est pour ça que j'étais passé par un multiplexeur
  • il me faut une autre solution pour la terre. En effet à terme je veux que mon système soit alimenté par pile. Et pour le moment, je n'ai pas du tout de terre puisque j'utilise mon PC non branché (et en plus je n'ai pas la terre partout chez moi...)

MrFlo666:

  • je ne comprends pas cette histoire d’effondrement et le rapport avec quand je touche deux capteurs à la fois

j’ai répondu trop vite je pense c’est pas une histoire de courant en fait, vu les résistances, le courant est super faible et donc ne présente aucun soucis. c’est plus je pense une histoire de changement de configuration (à moins que ce ne soit un problème de calibration et de terre).

Voilà ce que j’en pense - mais pas sûr à 100%

La librairie sait gérer plusieurs pins de capture et une seule d’émission, vous déclarez 2 instances du capteur

CapacitiveSensor   capteurA = CapacitiveSensor(4,2); // résistance de 10M entre pin 4(source) et pin 2 (capteur) 
CapacitiveSensor   capteurB = CapacitiveSensor(4,6); // résistance de 10M entre pin 4(source) et pin 6 (capteur)

La théorie derrière la librairie c’est que l’Arduino pour effectuer une mesure commence par inverser la valeur courante de la Pin Source et déclenche un compteur (en unité arbitraire) en attendant de voir quand la pin de réception prendra la même valeur (HIGH ou LOW) que la source et rapporte ce compte.

Ce délai entre le changement d’état de la broche d’émission et le changement d’état de la broche de réception est déterminé par une constante de temps de type RC, où R est la valeur de la résistance et C est la capacité existante (tout circuit en a un peu) sur la broche de réception plus toute autre capacité (par exemple interaction du corps humain) présente au niveau du capteur.

On répète la bascule de la pin source un certain nombre de fois pour obtenir une sorte de moyenne représentative et dans le code on va écrire (après calibration initiale dans le setup)

long tA =  capteurA.capacitiveSensor(30); // 30 bascules
long tB =  capteurB.capacitiveSensor(30);

pour obtenir dans tA et tB cette mesure de temps arbitraire pour mesurer d’abord sur la pin 2 puis sur la pin 6 la même valeur que la source.

En schéma avec les condensateurs ça donnerait quelque chose comme cela:

Sans que l’on touche:

montage1.png

Quand on touche le capteur A:
montage2.png


En gros donc si vous ne touchez rien, d’un point de vue électrique ça ressemble à cela
notouch.png
La capacité de base étant très très faible et même avec une résistance R grande, RC est assez faible et les circuits destination étant indépendants, chaque compteur retourne une petite valeur (la pin source et destination vont au même potentiel rapidement) et tA ou tB seront comparables et petits.

Quand vous approchez la main du capteur A, ça ressemble à cela
1touch.png
En supposant que la terre et GND soient au même potentiel (d’où l’importance de relier à la terre), lors de la lecture sur pin 2 (capteur A) vous chargez deux capacités qui sont en parallèles, donc la capacité équivalente est la somme des capacités → la capacité augmente. R est resté identique, C a augmenté et donc RC augmente et donc le compteur vous retourne une plus grande valeur.

donc tA (mesure sur capteurA) est plus grand qu’avant.

Maintenant si vous touchez deux touches en même temps, ça ressemble à cela
2touch.png
Ce n’est pas comme si on avait une capacité séparée par pin de destination, puisque c’est votre corps qui créée cette capacité, il n’y en a qu’une seule qui est partagée entre les 2 capteurs et donc ce "condensateur’ se charge en même temps des deux cotés et donc pendant que vous lisez le capteurA, comme le courant arrive aussi par le côtéB, la capacité se charge ou décharge plus rapidement et donc vous abaissez la mesure de temps nécessaire à l’alignement des potentiels et donc il est normal que ça vous donne une mesure plus basse.

→ l’important c’est de pouvoir différencier un appui ou pas… donc mettez votre seuil de déclenchement à 25 par exemple et si vous avez 30 ou 300 vous saurez qu’une touche est appuyée…


Concernant le soucis de la terre… c’est pas un problème simple. Dans l’absolu si le système est “mobile” et est fait pour être tenu dans la main alors généralement on met un peu de métal conducteur sur le boitier relié au GND et que l’humain va toucher et va donc le relier à la terre. Sinon c’est un soucis, il vaudrait mieux une alimentation avec prise de terre.

Alors déjà un grand MERCI, c'est hyper bien expliqué.

l'important c'est de pouvoir différencier un appui ou pas... donc mettez votre seuil de déclenchement à 25 par exemple et si vous avez 30 ou 300 vous saurez qu'une touche est appuyée...

Par contre j'ai pas compris la conclusion... pourquoi le fait d'abaisser à 25 bascules va changer quelque chose ? (ça ne m'empêchera pas d'essayer, hein)

Sinon c'est un soucis, il vaudrait mieux une alimentation avec prise de terre.

Embêtant mais peut-être que ça ira pour un proto.

---- EDIT ----
Un second merci : est-ce dû au foot ou à autre chose - en fait si, c'est dû à votre explication sur ce qu'il se passe quand je touche les deux en même temps -, mais j'ai eu une révélation. De fait, il y avait un problème dans mon montage et dans l'utilisation du multiplexeur. J'avais en fait mis au niveau de chaque entrée dudit multiplexeur un capteur, chaque capteur étant relié au pin send. Donc tous était relié ensemble.
J'ai changé cela et relié ma pin send à la pin réception, qui est elle-même reliée à la sortie commune du multiplexeur. Ensuite je n'ai plus qu'à mettre seulement un capteur au niveau de chaque entrée du multiplexeur, et voilà !
(si c'est pas clair, je ferai un dessin).

Et sinon j'ai relié mon PC à la terre, mais difficile d'affirmer que c'est mieux ou pas.

MrFlo666:
Par contre j'ai pas compris la conclusion... pourquoi le fait d'abaisser à 25 bascules va changer quelque chose ? (ça ne m'empêchera pas d'essayer, hein)

non non pas 25 bascules - je dis que la valeur pour décider si une touche est appuyée ou pas c'est en dessus de 25. (comme ça 30 ou 300 c'est pareil)

ah ok, j'avais vu ça dans la doc, donc c'est déjà à 30.