Composants · 15 min de lecture

Capteur tactile TTP223 avec Arduino : modes, câblage et lampe

Capteur tactile TTP223 avec Arduino : ponts A/B pour mode momentané ou bascule, lampe tactile, détection à travers le plastique, exemples ESP32 et Pico.

Le capteur tactile TTP223 est un module tactile capacitif à une touche, très bon marché, qui remplace un bouton-poussoir mécanique et détecte ton doigt grâce à une variation de capacité. Il ne possède que trois broches (VCC, GND et I/O) : quand tu le touches, la sortie passe à HIGH, et quand tu retires ton doigt, elle redescend à LOW. Grâce à cette simplicité, tu le lis sur un Arduino avec digitalRead() exactement comme un bouton, et comme il fonctionne entre 2 et 5,5 V, il se branche aussi directement sur un ESP32 ou une Raspberry Pi Pico. Sans pièce mobile, il ne s'use pas, ne clique pas et peut se cacher derrière une fine couche de plastique, de verre ou de bois.

Dans ce guide, tu vas apprendre pas à pas ce qui se passe à l'intérieur du TTP223, comment utiliser les ponts de soudure A et B de la carte pour choisir le mode momentané ou bascule (toggle) et une sortie active à l'état haut ou bas, comment fabriquer avec Arduino une lampe tactile qui s'allume d'une touche brève et se règle d'une touche longue, comment faire fonctionner le capteur derrière un panneau, comment utiliser plusieurs touches, en quoi il diffère des broches tactiles intégrées de l'ESP32 et comment l'utiliser sur la Pico en MicroPython.

Module capteur tactile capacitif TTP223
Module capteur tactile TTP223 : capteur capacitif à une touche, trois broches (VCC, I/O, GND) et les ponts de soudure A et B pour choisir le mode.

Qu'est-ce que le capteur tactile TTP223 et comment fonctionne-t-il ?

La pastille de cuivre du module et la surface de masse (GND) de la carte forment un minuscule condensateur de quelques picofarads. Quand ton doigt s'approche de la pastille, ton corps s'ajoute à ce condensateur et la capacité totale augmente de quelques picofarads. L'oscillateur de mesure du TTP223, d'environ 1 MHz, perçoit cette hausse comme un changement de fréquence, compare le résultat à une valeur de référence qu'il mémorise et bascule la sortie si l'écart est suffisant. La formule du condensateur plan C = ε·A/d s'applique ici aussi : plus la surface de la pastille (A) est grande et plus le matériau entre le doigt et la pastille (d) est fin, meilleure est la détection.

La puce fixe elle-même sa valeur de référence. Dès que tu la mets sous tension, elle mesure son environnement pendant environ 0,5 seconde et ignore les contacts pendant ce temps. Ensuite, tant que personne ne la touche, elle se recalibre environ toutes les 4 secondes, ce qui compense peu à peu les variations lentes comme la température et l'humidité. C'est pourquoi le capteur considère comme "non touché" tout ce qui entoure la pastille à la mise sous tension : si ton doigt est posé dessus au démarrage, il ne te verra pas du tout.

CaractéristiqueValeur
PuceTTP223-BA6 (boîtier SOT-23 à 6 broches)
Tension d'alimentation2,0–5,5 V
Consommation de la puce (3 V, sans LED)1,5 µA typique, 3 µA maximum
Temps de réponseJusqu'à ~220 ms en mode basse consommation, ~60 ms en mode rapide
Type de sortieCMOS (push-pull) ; le niveau HIGH est égal à VCC
Courant de sortie (à 3 V)Fournit environ 4 mA, absorbe 8 mA
Calibrage à la mise sous tensionEnviron 0,5 s (ne pas toucher pendant ce temps)
Réglage de la sensibilitéCondensateur de 0–50 pF (Cs) entre la pastille et GND
Température de fonctionnementDe -20 à +70 °C
Broches du moduleVCC, I/O (SIG ou OUT), GND

Dans la version TTP223-BA6 utilisée sur ces modules, certaines options sont figées dans le boîtier : la puce fonctionne toujours en mode basse consommation, et la limite de 100 secondes de "durée maximale d'activation" présente sur d'autres boîtiers est désactivée. En mode basse consommation, la puce ne consomme que quelques microampères, mais elle peut mettre jusqu'à environ 220 ms pour réagir au premier contact. Une fois un contact détecté, elle reste environ 12 secondes en mode rapide et répond beaucoup plus vite aux contacts suivants. Tu ne remarqueras pas ce délai sur une lampe ou une sonnette, mais garde-le en tête si tu fabriques une manette de jeu qui exige des réactions rapides.

Brochage et câblage du TTP223

Broche du TTP223Arduino UnoESP32Raspberry Pi Pico
VCC5V3V33V3(OUT) (broche 36)
GNDGNDGNDGND (broche 38)
I/O (SIG)D2GPIO 26GP15 (broche 20)
Comme la sortie du TTP223 est de type push-pull, son niveau HIGH est égal à la tension d'alimentation. Si tu alimentes le module en 5 V et branches sa sortie sur un ESP32 ou une Pico, tu appliques 5 V sur une broche 3,3 V et tu l'abîmes. Sur les cartes 3,3 V, alimente toujours le module par la broche 3V3. Évite aussi de toucher la pastille pendant la première demi-seconde après la mise sous tension, sinon le capteur prendra ton doigt pour une partie de son environnement.

Comme la broche de sortie pilote elle-même le signal à HIGH et à LOW, tu n'as besoin ni d'INPUT_PULLUP ni d'une résistance externe sur l'Arduino : il suffit de déclarer la broche en INPUT. Il n'y a pas de rebonds comme avec les boutons mécaniques, car la puce ne change sa sortie qu'une fois le contact stable. Si tu veux néanmoins que ton code compte un contact comme un seul événement, utilise la détection de front expliquée dans brancher un bouton sur Arduino.

Choisir le mode avec les ponts de soudure A et B

À côté de la puce, le module porte deux petites paires de pastilles de soudure marquées A et B. Elles sont reliées à deux broches d'option de la puce : sur la plupart des modules, A choisit si la sortie est active à l'état haut ou bas (AHLB), et B si le capteur fonctionne en mode momentané ou bascule (TOG). À l'intérieur de la puce, ces broches sont tirées vers GND par une résistance, donc l'option vaut "0" quand les pastilles sont ouvertes ; relie les deux pastilles avec une goutte de soudure et elle passe à "1". Après avoir modifié un pont, le plus sûr est de couper puis de rétablir l'alimentation. Si les marquages de ta carte sont différents, tu peux facilement vérifier le mode avec la LED du premier programme de test.

ABMode de fonctionnementAu toucherSortie à la mise sous tension
OuvertOuvertMomentané, actif à l'état haut (réglage d'usine)HIGH tant que tu touchesLOW
PontéOuvertMomentané, actif à l'état basLOW tant que tu touchesHIGH
OuvertPontéBascule (toggle), actif à l'état hautL'état change à chaque contactLOW
PontéPontéBascule (toggle), actif à l'état basL'état change à chaque contactHIGH
Si tu travailles avec un microcontrôleur, garde le réglage d'usine (les deux pastilles ouvertes) et gère la logique marche/arrêt dans le logiciel ; tu pourras ainsi ajouter des comportements comme l'appui long ou le double appui. Le mode bascule est utile dans les montages où le module commute directement un transistor ou une LED, sans aucun code. Le mode actif à l'état bas est pratique quand tu remplaces par le capteur un bouton câblé en INPUT_PULLUP : le code attend déjà LOW à l'appui, tu n'as donc aucune ligne à modifier. Pour rouvrir un pont fermé par erreur, utilise de la tresse à dessouder ; tu trouveras des conseils dans comment souder.

Premier test avec Arduino : lire un contact

  1. Relie la broche VCC du module à la broche 5V de l'Arduino, GND à GND et la broche I/O à D2.
  2. Téléverse le programme ci-dessous et ouvre le moniteur série à 9600 bauds.
  3. Après le démarrage de la carte, attends environ une seconde sans toucher la pastille ; la puce se calibre pendant ce temps.
  4. Touche la pastille du doigt : la LED intégrée de l'Arduino sur la broche 13 (et, sur la plupart des modules, la LED de la carte elle-même) doit s'allumer et le nombre de contacts dans le moniteur série doit augmenter de un.
  5. Tant que ton doigt reste sur la pastille, la LED reste allumée ; le compteur, lui, n'augmente qu'une fois par nouveau contact.
C++ (Arduino IDE)
1const int TOUCH_PIN = 2;    // TTP223 I/O (SIG) pini / TTP223 I/O (SIG) pin
2const int LED_PIN = 13;     // Uno'nun dahili LED'i / Uno onboard LED
3
4bool lastState = false;
5unsigned long touchCount = 0;
6
7void setup() {
8  Serial.begin(9600);
9  pinMode(TOUCH_PIN, INPUT);   // çıkış push-pull, pull-up gerekmez / push-pull output, no pull-up needed
10  pinMode(LED_PIN, OUTPUT);
11  delay(600);                  // açılış kalibrasyonu bitsin (~0,5 s) / let power-on calibration finish (~0.5 s)
12}
13
14void loop() {
15  bool state = digitalRead(TOUCH_PIN) == HIGH;   // dokunurken true / true while touched
16  digitalWrite(LED_PIN, state ? HIGH : LOW);
17
18  if (state && !lastState) {   // LOW -> HIGH: yeni dokunuş / new touch
19    touchCount++;
20    Serial.print("Dokunus / Touch: ");
21    Serial.println(touchCount);
22  }
23  lastState = state;
24}

La partie la plus importante du code est la détection de front. La lecture précédente est stockée dans la variable lastState ; si la nouvelle lecture vaut HIGH et la précédente LOW, c'est un nouveau contact. Sans ce test, le compteur augmenterait à chaque tour de boucle tant que ton doigt reste sur la pastille, c'est-à-dire des milliers de fois par seconde. L'attente de 600 ms dans setup() garantit que la puce a fini son calibrage quand l'Arduino et le module sont alimentés en même temps. Nous avons choisi D2 parce que c'est une broche d'interruption de l'Uno ; si tu veux, tu peux aussi capter le contact par interruption avec attachInterrupt(digitalPinToInterrupt(2), fonction, RISING).

Projet : une lampe tactile avec Arduino

Fabriquons maintenant une vraie lampe tactile : une touche brève l'allume et l'éteint, si tu laisses le doigt sur la pastille quand elle est allumée la lumière baisse doucement, et la touche longue suivante la fait remonter. Comme la luminosité est réglée en PWM, on branche la lampe sur D9, l'une des broches PWM de l'Uno. Pour les essais, une LED et une résistance de 220 Ω sur D9 suffisent (trouve la bonne valeur avec le calculateur de résistance pour LED). Pour un ruban LED 12 V, intercale un MOSFET à niveau logique comme l'IRLZ44N ; tous les détails sont dans utiliser un MOSFET avec Arduino.

C++ (Arduino IDE)
1const int TOUCH_PIN = 2;                // TTP223 I/O (fabrika ayarı: anlık, aktif yüksek) / factory default: momentary, active high
2const int LAMP_PIN = 9;                 // PWM pini: LED ya da MOSFET kapısı / PWM pin: LED or MOSFET gate
3const unsigned long LONG_PRESS = 600;   // uzun dokunuş eşiği (ms) / long-touch threshold (ms)
4
5bool lampOn = false;
6bool lastTouch = false;
7bool dimming = false;
8int brightness = 255;                   // son parlaklık (10-255) / last brightness (10-255)
9int step = 5;                           // kısma yönü ve adımı / dimming direction and step
10unsigned long touchStart = 0;
11unsigned long lastStep = 0;
12
13void setup() {
14  pinMode(TOUCH_PIN, INPUT);
15  pinMode(LAMP_PIN, OUTPUT);
16  delay(600);                           // TTP223 kalibrasyonu bitsin / let the TTP223 finish calibrating
17}
18
19void loop() {
20  bool touch = digitalRead(TOUCH_PIN) == HIGH;
21  unsigned long now = millis();
22
23  if (touch && !lastTouch) {            // dokunuş başladı / touch started
24    touchStart = now;
25    dimming = false;
26  }
27
28  if (touch && lampOn && now - touchStart > LONG_PRESS) {   // lamba açıkken uzun dokunuş / long touch while the lamp is on
29    if (!dimming) {
30      dimming = true;
31      step = -step;                     // her uzun dokunuşta yön değişir / direction flips on every long touch
32    }
33    if (now - lastStep >= 20) {         // 20 ms'de bir adım / one step every 20 ms
34      lastStep = now;
35      brightness += step;
36      if (brightness <= 10 || brightness >= 255) {
37        brightness = constrain(brightness, 10, 255);
38        step = -step;                   // uca gelince geri dön / bounce back at the ends
39      }
40      analogWrite(LAMP_PIN, brightness);
41    }
42  }
43
44  if (!touch && lastTouch && !dimming) {   // kısa dokunuş bitti: aç/kapa / short touch ended: toggle
45    lampOn = !lampOn;
46    analogWrite(LAMP_PIN, lampOn ? brightness : 0);
47  }
48
49  lastTouch = touch;
50}
Partie du codeRôle
touchStartEnregistre avec millis() l'instant où le contact a commencé
LONG_PRESS = 600Les contacts de plus de 600 ms comptent comme une commande de variation
dimmingActivé si la luminosité a été réglée pendant ce contact, pour que la lampe ne s'éteigne pas quand tu lèves le doigt
stepChange de signe à chaque contact long ; la lumière baisse une fois, remonte la suivante
constrain(brightness, 10, 255)Garde la luminosité dans une plage où la lampe ne s'éteint jamais complètement
Basculer au relâchementLa décision est prise quand le doigt se lève, pour distinguer les contacts brefs et longs

Remarque qu'il n'y a aucun delay() dans le code : toute la temporisation repose sur millis(), donc la boucle tourne en permanence et ne rate aucun contact. Pour en savoir plus sur cette technique, lis millis() ou delay(). Comme la dernière luminosité reste dans la variable brightness, la lampe se rallume au niveau que tu avais réglé en dernier, exactement comme les lampes de chevet tactiles du commerce.

Tu peux aussi commander une lampe secteur 230 V avec le même capteur, mais uniquement en marche/arrêt : un module relais ne peut pas faire varier la lumière en PWM, utilise donc digitalWrite au lieu d'analogWrite. Garde le câblage secteur dans un boîtier fermé et ne colle jamais la pastille du TTP223 sur une surface métallique reliée au secteur ; il doit toujours y avoir un panneau isolant entre la pastille et le secteur. Si tu n'as pas d'expérience avec la tension du secteur, fais cette partie avec un adulte.

Détecter à travers un matériau fin

L'atout préféré du TTP223, c'est qu'il fonctionne depuis l'intérieur d'un boîtier sans trou. Le plastique, l'acrylique, le verre, le bois, le papier et le tissu laissent passer le champ électrique ; le matériau entre la pastille et le doigt joue le rôle de diélectrique d'un condensateur. Plus le matériau est épais, plus d augmente dans la formule et plus la capacité entre le doigt et la pastille diminue ; doubler l'épaisseur divise à peu près cette capacité par deux. Le verre a une constante diélectrique plus élevée que la plupart des plastiques, donc un verre de même épaisseur donne en général de meilleurs résultats. En pratique, le module fonctionne le plus souvent sans souci derrière un panneau de plastique, d'acrylique ou de verre de 1 à 3 mm ; avec des panneaux plus épais, il te faudra une pastille plus grande, et teste toujours avec ton propre matériau.

  • Pas de lame d'air : l'air a une constante diélectrique de 1, et même un espace de 1 mm réduit nettement la sensibilité. Colle fermement le module contre le panneau, pastille tournée vers lui, avec un adhésif double face fin ou de la colle.
  • Agrandis la pastille : pour une zone tactile plus grande, découpe une électrode dans du ruban de cuivre ou du papier aluminium, gratte doucement le vernis protecteur sur un coin de la pastille et soude l'électrode avec un fil très court. Plus le fil est long, plus il ajoute sa propre capacité et plus le capteur devient instable.
  • Évite le métal : les panneaux métalliques, les matériaux chargés en métal et les peintures métallisées concentrent le champ électrique sur eux ; le capteur ne détecte alors rien ou se déclenche tout seul.
  • Réduis une sensibilité excessive : si le capteur se déclenche avant que ton doigt n'approche, ajoute un petit condensateur céramique de 5 à 20 pF (Cs) entre la pastille et GND ; plus la valeur est grande, plus la sensibilité baisse, avec 50 pF comme limite. Tu peux décoder le marquage du condensateur (par ex. 100 = 10 pF, 220 = 22 pF) avec l'outil code des condensateurs.
  • Monte d'abord, alimente ensuite : comme la puce prend son environnement comme référence à la mise sous tension, n'alimente le montage qu'une fois le panneau et le couvercle en place. Si tu poses le panneau sous tension, la puce peut le prendre pour un contact permanent ; il suffit alors de couper et de rétablir l'alimentation.

Utiliser plusieurs touches tactiles

Chaque TTP223 surveille sa propre pastille de façon indépendante ; pour quatre touches, tu branches quatre modules sur quatre broches numériques différentes, les modules partageant VCC et GND. Si les touches sont très rapprochées, ton doigt peut aussi influencer la pastille voisine ; laisse au moins 1 à 2 cm entre les pastilles et éloigne les modules des fils de moteurs ou de relais. Le programme ci-dessous utilise quatre TTP223 et un buzzer passif pour créer un petit piano tactile : chaque touche joue sa note, et le son s'arrête quand tu lèves le doigt.

C++ (Arduino IDE)
1const int TOUCH_PINS[] = {2, 3, 4, 5};          // dört TTP223 I/O pini / four TTP223 I/O pins
2const int NOTES[]      = {262, 294, 330, 349};  // Do, Re, Mi, Fa (Hz) / C4, D4, E4, F4 (Hz)
3const int KEY_COUNT    = 4;
4const int BUZZER_PIN   = 8;                     // pasif buzzer / passive buzzer
5
6int currentNote = 0;
7
8void setup() {
9  for (int i = 0; i < KEY_COUNT; i++) {
10    pinMode(TOUCH_PINS[i], INPUT);
11  }
12  pinMode(BUZZER_PIN, OUTPUT);
13  delay(600);                                   // sensörlerin kalibrasyonu / sensor calibration
14}
15
16void loop() {
17  int note = 0;
18  for (int i = 0; i < KEY_COUNT; i++) {
19    if (digitalRead(TOUCH_PINS[i]) == HIGH) {   // ilk dokunulan tuş çalar / the first touched key plays
20      note = NOTES[i];
21      break;
22    }
23  }
24  if (note != currentNote) {                    // yalnızca nota değişince güncelle / update only when the note changes
25    currentNote = note;
26    if (note > 0) tone(BUZZER_PIN, note);
27    else noTone(BUZZER_PIN);
28  }
29}

Comme tone() ne peut jouer qu'une note à la fois, le code choisit la première touche touchée et ne met la note à jour que lorsqu'elle change, pour éviter les grésillements. Sur l'Uno, tone() utilise le Timer2, donc analogWrite ne fonctionne pas sur les broches 3 et 11 pendant que le buzzer joue ; ce n'est pas un problème ici, car le piano n'utilise D3 qu'en entrée. Quand le nombre de touches augmente, il est plus propre de passer à des puces multicanaux plutôt qu'à un module par touche : le TTP224 offre quatre touches avec quatre sorties séparées, le TTP229 lit 8 ou 16 touches via une interface série à deux fils, et le MPR121 surveille 12 électrodes en I2C.

ESP32 : TTP223 ou broches tactiles intégrées ?

L'ESP32 classique intègre un capteur tactile capacitif, et 10 broches (T0–T9) peuvent servir de touches tactiles sans aucun module : GPIO 4, 0, 2, 15, 13, 12, 14, 27, 33 et 32, dans cet ordre. La fonction touchRead() renvoie une valeur brute ; sur l'ESP32 classique, cette valeur baisse quand tu touches la broche, alors que sur l'ESP32-S2 et le S3 elle augmente. L'ESP32-C3 n'a aucun capteur tactile. Pour tout savoir sur les broches intégrées, consulte les broches tactiles de l'ESP32 ; le tableau ci-dessous compare les deux approches.

CaractéristiqueModule TTP223Tactile intégré de l'ESP32
Pièce supplémentaireNécessaire (1 touche par module)Inutile ; un fil ou une pastille de cuivre sur la broche suffit
SortieHIGH/LOW numérique prêt à l'emploiValeur brute ; tu choisis le seuil
CalibrageFait par la puce elle-mêmeÀ mesurer et régler dans le code
Quelles cartes ?Toutes (Uno, Nano, ESP, Pico)Uniquement ESP32, ESP32-S2 et ESP32-S3
Nombre de touchesAutant que de modules10 sur l'ESP32, 14 sur les S2 et S3
Réveil du deep sleepVia ext0/ext1 sur un GPIO RTCAvec touchSleepWakeUpEnable()
Fils longs et humiditéStable, car la pastille est sur le moduleLes valeurs dérivent avec des fils plus longs et le seuil n'est plus bon
C++ (Arduino IDE)
1const int TTP223_PIN = 26;   // TTP223 I/O, modül 3,3 V ile beslenir / module powered from 3.3 V
2const int TOUCH_GPIO = 4;    // dahili dokunmatik T0 / built-in touch pad T0
3const int LED_PIN = 2;       // çoğu DevKit'te dahili LED / onboard LED on most DevKits
4int threshold = 0;
5
6void setup() {
7  Serial.begin(115200);
8  pinMode(TTP223_PIN, INPUT);
9  pinMode(LED_PIN, OUTPUT);
10  delay(600);                                  // dokunmadan bekle / wait without touching
11  threshold = touchRead(TOUCH_GPIO) * 0.7;     // dokunulmamış değerin %70'i / 70% of the untouched value
12}
13
14void loop() {
15  int raw = touchRead(TOUCH_GPIO);             // klasik ESP32'de dokununca düşer / drops when touched on the classic ESP32
16  bool builtIn = raw < threshold;
17  bool module = digitalRead(TTP223_PIN) == HIGH;
18  digitalWrite(LED_PIN, (builtIn || module) ? HIGH : LOW);
19  Serial.printf("ham/raw: %d  esik/threshold: %d  T0: %d  TTP223: %d\n", raw, threshold, builtIn, module);
20  delay(100);
21}

Au démarrage, ce programme mesure la valeur de T0 sans contact et en prend 70 % comme seuil ; observe la valeur brute dans le moniteur série (115200 bauds) pour ajuster ce rapport à ton câblage. Si tu utilises un ESP32-S3, la valeur augmente au toucher, inverse donc la comparaison (par exemple seuil = valeur mesurée × 1,3 et raw > seuil). Nous avons aussi branché le TTP223 sur GPIO 26 parce que c'est un GPIO RTC : avec esp_sleep_enable_ext0_wakeup(GPIO_NUM_26, 1), tu peux mettre l'ESP32 en deep sleep et le réveiller d'un simple contact. Comme le TTP223 ne consomme que quelques microampères, ils forment un duo idéal pour les projets sur batterie ; plus de détails dans le deep sleep de l'ESP32.

TTP223 avec la Raspberry Pi Pico (MicroPython)

La puce RP2040 de la Pico n'a pas de capteur tactile, le TTP223 est donc le moyen le plus simple d'ajouter une touche tactile à une Pico. Alimente le module par la broche 3V3(OUT) (broche physique 36) et relie la broche I/O à GP15 (broche physique 20). Le code MicroPython ci-dessous inverse l'état de la LED intégrée à chaque contact. Comme il capte le contact par interruption (IRQ), aucun contact n'est perdu même si la boucle principale est occupée à autre chose. Si tu ne sais pas encore installer MicroPython sur la Pico, commence par Qu'est-ce que la Raspberry Pi Pico ?.

MicroPython
1from machine import Pin
2import time
3
4touch = Pin(15, Pin.IN)            # TTP223 I/O -> GP15 (fiziksel pin 20) / physical pin 20
5led = Pin("LED", Pin.OUT)          # dahili LED (Pico ve Pico W) / onboard LED (Pico and Pico W)
6last = 0
7
8def on_touch(pin):
9    global last
10    now = time.ticks_ms()
11    if time.ticks_diff(now, last) > 250:   # bir dokunuşu bir kez say / count each touch once
12        led.toggle()
13        last = now
14
15time.sleep_ms(600)                 # TTP223 açılış kalibrasyonu / TTP223 power-on calibration
16touch.irq(trigger=Pin.IRQ_RISING, handler=on_touch)
17
18while True:
19    print("Dokunma / Touch:", touch.value(), " LED:", led.value())
20    time.sleep(1)

Dans les versions récentes de MicroPython, le nom Pin("LED") désigne la LED intégrée aussi bien sur la Pico que sur la Pico W. Si tu as soudé le pont B pour passer le module en mode bascule, tu n'as même pas besoin de l'interruption : il suffit d'écrire led.value(touch.value()) dans la boucle, puisque c'est désormais la puce elle-même qui mémorise l'état marche/arrêt. Même si la sortie de la puce ne rebondit pas, le verrou de 250 ms du code empêche de courtes impulsions parasites sur des fils longs de faire basculer la LED deux fois.

Idées de projets avec le TTP223

  • Veilleuse tactile : ajoute une LDR pour que la lampe ne réagisse au contact que dans l'obscurité.
  • Lampe à couleurs changeantes : change la couleur d'un anneau WS2812B NeoPixel à chaque contact et règle la luminosité par un contact long.
  • Serrure à code cachée : place quatre TTP223 derrière un panneau en acrylique ; en touchant les touches dans le bon ordre, un servomoteur ouvre le verrou.
  • Sonnette sans trou : colle le capteur à l'intérieur d'un boîtier en plastique ; au contact, un DFPlayer Mini joue la mélodie de la sonnette.
  • Interrupteur tactile de prise : allume et éteins une lampe de bureau ou un ventilateur avec un module relais.
  • Télécommande sur pile : garde un ESP32 en deep sleep ; quand tu touches le TTP223, il se réveille et envoie un ordre via ESP-NOW.

Erreurs fréquentes et solutions

SymptômeCause probableSolution
Aucune réaction au contactUn doigt était sur la pastille à la mise sous tension ou le panneau est trop épaisRetire la main, coupe puis rétablis l'alimentation ; utilise un panneau plus fin ou une pastille plus grande
Se déclenche tout seulTrop sensible, métal près de la pastille, alimentation bruyanteAjoute 5–20 pF entre pastille et GND, éloigne le métal, place 100 nF entre VCC et GND
Reste comme touché en permanenceLe panneau ou le couvercle a été posé sous tensionMonte d'abord, alimente ensuite
Le compteur augmente plusieurs fois par contactLe code lit le niveau, pas le frontMémorise l'état précédent et compte seulement le passage LOW→HIGH
Le premier contact est détecté avec retardLa puce est en mode basse consommation (~220 ms)C'est normal ; les contacts suivants sont détectés plus vite
Broche de l'ESP32 ou de la Pico abîméeLe module a été alimenté en 5 VAlimente toujours le module par la broche 3V3
En mode bascule, la lampe démarre alluméeLe pont A sélectionne l'état bas actifChoisis l'état de démarrage avec le pont A ou inverse la logique dans le code
Les capteurs tactiles sont sensibles aux fluctuations de l'alimentation, et le fabricant de la puce insiste sur le fait qu'elle doit être stable. Les chargeurs de téléphone bon marché, les moteurs et les relais génèrent du bruit. Souder un condensateur céramique de 100 nF entre VCC et GND du module, éloigner les fils des moteurs du capteur et garder court le fil vers la pastille élimine la plupart des faux déclenchements.

Le TTP223 est la façon la plus simple d'ajouter une interface tactile moderne à tes projets avec un module très bon marché : il remplace le bouton mécanique, fonctionne derrière des panneaux sans trou et s'entend avec tous les microcontrôleurs. Essaie d'abord de le lire avec le réglage d'usine, puis consolide la détection de front et la logique de l'appui long avec les exemples de la lampe et du piano. Dans l'application BlueGrays, tu trouveras pas à pas, avec schémas et code, des projets pour allumer une LED avec un bouton, une LED marche/arrêt, des projets de boutons avec l'ESP32 et la Pico ainsi que la commande d'une ampoule secteur, et tu pourras tous les rendre tactiles en remplaçant le bouton par un TTP223.

Questions fréquentes

Avec quelle tension fonctionne le TTP223 ?

La puce TTP223 fonctionne de 2,0 à 5,5 V ; sur un Arduino Uno, on l'alimente en 5 V, et sur un ESP32 ou une Raspberry Pi Pico en 3,3 V. Comme le niveau HIGH de la sortie est égal à la tension d'alimentation, alimente toujours le module avec la tension logique de la carte à laquelle il est relié.

À quoi servent A et B sur le TTP223 ?

A et B sont des ponts d'option que l'on ferme avec de la soudure. Sur la plupart des modules, le pont A rend la sortie active à l'état bas (LOW au contact) et le pont B passe le capteur en mode bascule, où la sortie change à chaque contact et reste ainsi. Avec les deux ouverts, le module est en mode momentané et donne HIGH tant que tu le touches.

Le TTP223 fonctionne-t-il à travers le verre ou le plastique ?

Oui, il fonctionne à travers le plastique, l'acrylique, le verre, le bois et le papier tant qu'ils ne contiennent pas de métal. En pratique, les panneaux de 1 à 3 mm passent généralement sans problème ; pour des panneaux plus épais, il faut agrandir la pastille avec du ruban de cuivre. Pense à coller le module contre le panneau sans laisser de lame d'air.

Pourquoi mon TTP223 se déclenche-t-il tout seul ?

Les causes les plus courantes sont une sensibilité trop élevée, des pièces métalliques près de la pastille, des fils d'électrode trop longs et une alimentation bruyante. Ajouter un condensateur de 5 à 20 pF entre la pastille et GND réduit la sensibilité. Placer un condensateur de 100 nF entre VCC et GND et utiliser un bon adaptateur règle aussi le problème la plupart du temps.

Comment allumer une lampe 230 V avec un TTP223 ?

La sortie du TTP223 ne fournit que quelques milliampères, elle ne peut donc piloter directement ni une lampe ni la bobine d'un relais. Relie le capteur à un Arduino et laisse l'Arduino commander un module relais ; le relais ne fait que marche/arrêt, il ne fait pas varier la lumière. Garde le câblage secteur dans un boîtier fermé et ne colle jamais la pastille sur une surface reliée au secteur.

Faut-il un TTP223 pour le tactile sur l'ESP32 ?

Non, les 10 broches tactiles de l'ESP32 classique s'utilisent directement avec touchRead(). En revanche, tu dois régler le seuil dans le logiciel, et les valeurs dérivent avec des fils longs. Si tu veux une sortie numérique stable et prête à l'emploi, ou si tu utilises une carte sans broches tactiles comme l'ESP32-C3, le TTP223 est plus pratique.

Voir tous les projets
Allumer et éteindre une LED avec un bouton
#10Débutant

Allumer et éteindre une LED avec un bouton

Un appui et la lumière s'allume, un deuxième et elle s'éteint, exactement comme l'interrupteur de ta chambre. L'Arduino remarque chaque appui et fait passer la LED à l'état inverse, en attendant un co

4.8(100)
167
Allumer une LED avec un bouton-poussoir (Push)
#9Débutant

Allumer une LED avec un bouton-poussoir (Push)

Comme une sonnette : la lumière reste allumée tant que tu appuies et s'éteint quand tu relâches. L'Arduino surveille le bouton en permanence ; tant qu'il est enfoncé la LED est allumée, et dès que tu

4.8(113)
229
ESP32 Contrôle de LED avec bouton (Toggle)
#105Débutant

ESP32 Contrôle de LED avec bouton (Toggle)

Chaque fois que l'on appuie sur le bouton, la LED change d'état : si elle est allumée, elle s'éteint, si elle est éteinte, elle s'allume. Modèle classique de basculement. Avec le debounce, nous nettoyons le bruit mécanique du bouton-poussoir pour garantir un seul basculement avec une seule pression.

4.6(39)
57
Raspberry Pi Pico Bouton Toggle LED
#156Débutant

Raspberry Pi Pico Bouton Toggle LED

Bouton + LED — niveau supérieur ! Contrairement au projet bouton de base, pas besoin de maintenir le bouton. Appuie et relâche → LED allumée. Réappuie → LED éteinte (toggle). Même circuit, mais grande différence de code. Apprends edge detection, state tracking et debounce.

0.0(0)
9
Allumer et éteindre une ampoule 220 V avec un bouton
#20Avancé
Premium

Allumer et éteindre une ampoule 220 V avec un bouton

Envie d'allumer et d'éteindre une vraie ampoule de la maison avec un petit bouton ? À chaque appui, l'Arduino bascule un relais et l'ampoule s'allume ; un nouvel appui l'éteint. Le relais est un inter

4.5(33)
44
Piano simple avec buzzer et bouton
#26Avancé
Premium

Piano simple avec buzzer et bouton

Construis ton propre petit piano avec huit boutons. Chaque bouton est une note, de la plus grave à la plus aiguë : do, ré, mi, fa, sol, la, si et le do aigu. La note sonne dans le buzzer tant que tu g

4.9(66)
88
ESP32 LED Fade avec PWM
#110Débutant

ESP32 LED Fade avec PWM

Modifiez la luminosité de la LED en douceur de 0 à max, de max à 0. Nous contrôlons le PWM avec analogWrite() comme dans Arduino - la même syntaxe avec ESP32 Arduino Core 3.0+ fonctionne sans problème. La définition du pin + pinMode + analogWrite est suffisante.

4.8(36)
54
Éclairage intelligent des escaliers et des couloirs
#82Intermédiaire
Premium

Éclairage intelligent des escaliers et des couloirs

Pose le pied dans l'escalier ou le couloir et les lumières s'allument marche après marche dans ton sens de passage. Un capteur de distance se trouve à chaque extrémité ; quel que soit celui devant leq

5.0(35)
51