Capteurs capacitifs

L’ESP32 possède des capteurs capacitifs qui peuvent être utilisés comme un bouton tactile. Ce sont les fameux « TOUCH » que l’on trouve sur les pinouts. Il y en a 9 disponibles sur les carte ESP32 uPesy (éventuellement 10 si le pin GPIO0 est présent sur la carte).

../../_images/full_pinout_Wroom_rev21.png

Pinout de la carte uPesy ESP32 Wroom Devkit

Qu’est ce que c’est ?

Les capteurs capacitifs sont énormément utilisés pour détecter la pression de nos doigts notamment sur les écrans tactiles. On peut les utiliser sur l’ESP32 pour remplaçer les boutons poussoirs.

../../_images/touch0.jpg

Capteurs capacitifs tactiles

Les capteurs capacitifs sont basés sur la variation de la capacité (d’un condensateur) lorsque l’on touche le capteur. Cette variation est lue et convertie par l’ADC (Convertisseur analogique à numérique).

Note

Il faut garder à l’esprit que ces capteurs capacitifs ne seront pas aussi fiables que des boutons poussoirs surtout pour l’usage que l’on va en faire.

En effet, beaucoup de capacités parasites rentrent en jeu et perturbent plus ou moins les valeurs mesurées.

../../_images/touch1.png

Capacités parasites

Pour avoir de bonnes mesures, il faudra donc prendre en compte tous ces paramètres et faire un circuit électrique beaucoup plus rigoureux et complexe.

Pour montrer le fonctionnement, le circuit se résumera à un fil de cuivre !

../../_images/touch2.png

Capacités parasites

Utilisation sur l’ESP32

Le code pour utiliser les capteurs capacitifs est très simple, une seule fonction est nécessaire touchRead().

Le code pour lire la mesure capacitive du pin 4 se résume à :

touchRead(4);
//ou
touchRead(T0);

Note

Le paramètre de la fonction est soit le numéro du pin (ici GPIO4), soit le numéro du capteur capacitif associé au pin (ici T0).

L’utilisation est très similaire à la fonction analogRead().

Avec un code très simple, on affiche dans le moniteur série les valeurs mesurées :

void setup() {
    Serial.begin(115200);
    delay(1000); // Delai pour lancer le moniteur série
    Serial.println("ESP32 Touch Demo");
}

void loop() {
    Serial.println(touchRead(4));
    delay(500);
}
../../_images/touch3.png

Les creux correspondent au moment ou l’on touche le fil. Pour déterminer si l’on a touché le fil, il faut définir une valeur seuil. Si on est en dessous de cette valeur seuil, on a touché sur le bouton.

Note

La valeur seuil dépend du matériel utilisé (fil, longueur, breadbord …) et devra être ajusté.

Le code avec le seuil est :

int capacitiveValue = 100;
int threshold = 20; //Seuil a ajuster

void setup() {
    Serial.begin(115200);
    delay(1000); // Delai pour lancer le moniteur série
    Serial.println("ESP32 Touch Demo");
}

void loop() {
    capacitiveValue = touchRead(4);
    if(capacitiveValue < threshold ){
        Serial.println("Fil touché");
        }
    delay(500);
}

C’est tout pour la programmation ! On peut aussi rajouter une feuille en aluminium au bout du fil pour une meilleure sensibilité.