Arduino - Capteur tactile

Le capteur tactile (également appelé bouton tactile ou interrupteur tactile) est largement utilisé pour contrôler des appareils (par exemple, une lampe tactile). Il a la même fonctionnalité qu'un bouton. Il est utilisé à la place du bouton sur de nombreux nouveaux appareils car cela donne au produit un aspect soigné.

Dans ce tutoriel, nous apprendrons à utiliser le capteur tactile avec Arduino.

Préparation du matériel

1×Arduino Uno R3
1×Câble USB 2.0 type A/B (pour PC USB-A)
1×Câble USB 2.0 type C/B (pour PC USB-C)
1×Capteur tactile
1×Fils de connexion
1×Optionnel: 9V Power Adapter for Arduino
1×Recommandé: Shield à bornier à vis pour Arduino Uno
1×Recommandé: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommandé: Shield plaque d'essai pour Arduino Uno
1×Recommandé: Boîtier pour Arduino Uno
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Arduino Uno

Ou vous pouvez acheter les kits suivants:

1×Kit de Démarrage DIYables STEM V3 (Arduino inclus)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du capteur tactile

Brochage

Le capteur tactile a 3 broches :

  • Broche GND : doit être connectée à GND (0V)
  • Broche VCC : doit être connectée à VCC (5V ou 3.3V)
  • Broche SIGNAL : est une broche de sortie : BASSE lorsqu'elle n'est pas touchée, HAUTE lorsqu'elle est touchée. Cette broche doit être connectée à la broche d'entrée de l'Arduino.
Schéma de brochage du capteur tactile

Comment ça marche

  • Lorsque le capteur n'est pas touché, la broche SIGNAL du capteur est à l'état BAS
  • Lorsque le capteur est touché, la broche SIGNAL du capteur est à l'état HAUT

Arduino - Capteur tactile

La broche SIGNAL du capteur tactile est connectée à une broche d'entrée de l'Arduino.

En lisant l'état de la broche d'Arduino (configurée comme une broche d'entrée), nous pouvons détecter si le capteur tactile est touché ou non.

Diagramme de câblage

Schéma de câblage du capteur tactile Arduino

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Comment programmer un capteur tactile

  • Initialise la broche Arduino en mode entrée numérique en utilisant la fonction pinMode(). Par exemple, la broche 7.
pinMode(7, INPUT_PULLUP);
  • Lit l'état de la broche Arduino en utilisant la fonction digitalRead().
int inputState = digitalRead(7);

※ Note:

Il existe deux cas d'utilisation fréquemment utilisés :

  • Le premier : Si l'état d'entrée est HAUT, faire quelque chose. Si l'état d'entrée est BAS, faire autre chose en inverse.
  • Le second : Si l'état d'entrée change de BAS à HAUT (ou de HAUT à BAS), faire quelque chose.

Selon l'application, nous choisissons l'un d'eux. Par exemple, dans le cas de l'utilisation d'un capteur tactile pour contrôler une LED :

  • Si nous voulons que la LED soit ALLUMÉE lorsque le capteur est touché et ÉTEINTE lorsque le capteur n'est PAS touché, nous DEVONS utiliser le premier cas d'utilisation.
  • Si nous voulons que la LED bascule entre ALLUMÉ et ÉTEINT chaque fois que nous touchons le capteur, nous DEVONS utiliser le second cas d'utilisation.
  • Comment détecter le changement d'état de BAS à HAUT
// Les constantes ne changeront pas. Elles sont utilisées ici pour définir les numéros de broches : const int SENSOR_PIN = 7; // la broche d'entrée de l'Arduino qui se connecte à la broche SIGNAL du capteur // Les variables vont changer : int lastState = LOW; // l'état précédent de la broche d'entrée int currentState; // la lecture actuelle de la broche d'entrée void setup() { // initialiser la communication série à 9600 bits par seconde : Serial.begin(9600); // initialiser la broche de l'Arduino comme une entrée pinMode(SENSOR_PIN, INPUT); } void loop() { // lire l'état de la broche d'entrée : currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The sensor is touched"); // sauvegarder le dernier état lastState = currentState; }

Capteur tactile - Code Arduino

Nous exécuterons quatre exemples de code :

  • Lit la valeur du capteur tactile et l'affiche sur le moniteur série.
  • Contrôle la LED selon l'état du capteur.
  • Détecte si le capteur est touché ou relâché.
  • Bascule la LED lorsque le capteur est touché (c'est l'utilisation la plus courante).

Lit la valeur du capteur tactile et l’affiche sur le moniteur série.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-touch-sensor */ // les constantes ne changent pas. Elles sont utilisées ici pour définir les numéros de broche : const int SENSOR_PIN = 7; // la broche d'entrée de l'Arduino qui se connecte à la broche SIGNAL du capteur void setup() { // initialiser la communication série à 9600 bits par seconde : Serial.begin(9600); // initialiser la broche de l'Arduino comme une entrée pinMode(SENSOR_PIN, INPUT); } void loop() { // lire l'état de la broche d'entrée : int state = digitalRead(SENSOR_PIN); // imprimer l'état au moniteur série Serial.println(state); }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload de l'IDE Arduino pour charger le code dans l'Arduino
  • Touchez le capteur avec votre doigt puis relâchez.
  • Vérifiez le résultat sur le moniteur série.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
0 0 0 1 1 1 1 1 1 0 0
Ln 11, Col 1
Arduino Uno on COM15
2

Contrôle la LED selon l'état du capteur

Si le capteur est touché, allumez la LED. Si le capteur n'est pas touché, éteignez la LED.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-touch-sensor */ // Les constantes ne changent pas. Elles sont utilisées ici pour définir les numéros de broches : const int SENSOR_PIN = 7; // la broche d'entrée de l'Arduino qui se connecte à la broche SIGNAL du capteur void setup() { // initialiser la communication série à 9600 bits par seconde : Serial.begin(9600); // initialiser la broche de l'Arduino comme une entrée pinMode(SENSOR_PIN, INPUT); // initialiser la broche numérique LED_BUILTIN comme une sortie. pinMode(LED_BUILTIN, OUTPUT); } void loop() { // lire l'état de la broche d'entrée : int state = digitalRead(SENSOR_PIN); // contrôler la LED selon l'état du capteur digitalWrite(LED_BUILTIN, state); }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload de l'IDE Arduino pour téléverser le code sur Arduino
  • Touchez le capteur avec votre doigt et continuez de toucher.
  • Observez l'état de la LED ⇒ La LED devrait être allumée.
  • Retirez votre doigt du capteur.
  • Observez l'état de la LED ⇒ La LED devrait être éteinte.

Détecte si le capteur est touché ou relâché.

// Les constantes ne changent pas. Elles sont utilisées ici pour définir les numéros des broches : const int SENSOR_PIN = 7; // la broche d'entrée de l'Arduino qui se connecte à la broche SIGNAL du capteur // Les variables vont changer : int lastState = LOW; // l'état précédent de la broche d'entrée int currentState; // la lecture actuelle de la broche d'entrée void setup() { // initialiser la communication série à 9600 bits par seconde : Serial.begin(9600); // initialiser la broche de l'Arduino comme une entrée pinMode(SENSOR_PIN, INPUT); } void loop() { // lire l'état de la broche d'entrée : currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The sensor is touched"); else if(lastState == HIGH && currentState == LOW) Serial.println("The sensor is is released"); // sauvegarder le dernier état lastState = currentState; }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload de l'IDE Arduino pour téléverser le code sur Arduino
  • Posez votre doigt sur le capteur et maintenez-le.
  • Consultez le résultat sur le moniteur série.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The sensor is touched
Ln 11, Col 1
Arduino Uno on COM15
2
  • Relâchez votre doigt du capteur.
  • Consultez le résultat sur le moniteur série.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The sensor is touched The sensor is is released
Ln 11, Col 1
Arduino Uno on COM15
2

Bascule la LED lorsque le capteur est touché.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-touch-sensor */ // les constantes ne changent pas. Elles sont utilisées ici pour définir les numéros de broche: const int SENSOR_PIN = 7; // la broche d'entrée de l'Arduino qui se connecte à la broche SIGNAL du capteur // Les variables vont changer: int lastState = LOW; // l'état précédent de la broche d'entrée int currentState; // la lecture actuelle de la broche d'entrée int ledState = LOW; // l'état actuel de la LED void setup() { // initialiser la communication série à 9600 bits par seconde: Serial.begin(9600); // initialiser la broche de l'Arduino comme une entrée pinMode(SENSOR_PIN, INPUT); // initialiser la broche numérique LED_BUILTIN comme une sortie. pinMode(LED_BUILTIN, OUTPUT); } void loop() { // lire l'état de la broche d'entrée : currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH){ // basculer l'état de la LED if(ledState == LOW) ledState = HIGH; else if(ledState == HIGH) ledState = LOW; // contrôler la LED digitalWrite(LED_BUILTIN, ledState); } // sauvegarder le dernier état lastState = currentState; }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload de l'IDE Arduino pour charger le code sur Arduino
  • Touchez le capteur avec votre doigt puis relâchez.
  • Observez l'état de la LED ⇒ La LED devrait être allumée.
  • Touchez le capteur avec votre doigt puis relâchez.
  • Observez l'état de la LED ⇒ La LED devrait être éteinte.
  • Touchez le capteur avec votre doigt puis relâchez.
  • Observez l'état de la LED ⇒ La LED devrait être allumée.

Vidéo

La démo vidéo ci-dessous utilise le code ci-dessous. Notez que la vidéo montre l'Arduino Uno R4, mais cela fonctionne de manière identique pour l'Arduino Uno R3 :

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-touch-sensor */ // --- Hardware Pin Definitions --- #define BUZZER_PIN 8 #define TOUCH_1_PIN 2 // Happy Birthday trigger #define TOUCH_2_PIN 3 // Jingle Bells trigger #define LED_A_PIN 4 // First indicator LED (Active-Low) #define LED_B_PIN 5 // Second indicator LED (Active-Low) // --- Musical Note Frequencies (Hz) --- #define NOTE_C4 262 #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 #define NOTE_A4 440 #define NOTE_A5 880 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_D5 587 #define NOTE_E5 659 // --- Melody 1: Happy Birthday --- const int happyBirthdayMelody[] = { NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4, NOTE_C4, NOTE_C4, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_B4, NOTE_B4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4 }; const int happyBirthdayDurations[] = { 8, 8, 4, 4, 4, 2, 8, 8, 4, 4, 4, 2, 8, 8, 4, 4, 4, 4, 4, 8, 8, 4, 4, 4, 2 }; const int happyBirthdayLength = sizeof(happyBirthdayMelody) / sizeof(happyBirthdayMelody[0]); // --- Melody 2: Jingle Bells --- const int jingleBellsMelody[] = { NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_G4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_D4, NOTE_G4 }; const int jingleBellsDurations[] = { 4, 4, 2, 4, 4, 2, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 8, 8, 4, 4, 4, 4, 2 }; const int jingleBellsLength = sizeof(jingleBellsMelody) / sizeof(jingleBellsMelody[0]); // --- Function Prototypes --- void playSong(const int melody[], const int durations[], int songLength); void updateLeds(int noteIndex, bool isQuietNote); void turnOffBothLeds(); /** * @brief Initializes peripheral pins and system communication. */ void setup() { Serial.begin(115200); pinMode(TOUCH_1_PIN, INPUT); pinMode(TOUCH_2_PIN, INPUT); pinMode(BUZZER_PIN, OUTPUT); pinMode(LED_A_PIN, OUTPUT); pinMode(LED_B_PIN, OUTPUT); // For Active-Low LEDs, setting pins HIGH turns them OFF on startup turnOffBothLeds(); Serial.println(F("Active-Low LED Music Box Jukebox Ready.")); } /** * @brief Main execution loop checking for touch sensor triggers. */ void loop() { if (digitalRead(TOUCH_1_PIN) == HIGH) { Serial.println(F("Touch 1 detected: Playing Happy Birthday...")); playSong(happyBirthdayMelody, happyBirthdayDurations, happyBirthdayLength); } else if (digitalRead(TOUCH_2_PIN) == HIGH) { Serial.println(F("Touch 2 detected: Playing Jingle Bells...")); playSong(jingleBellsMelody, jingleBellsDurations, jingleBellsLength); } } /** * @brief Iterates through the provided melody arrays to play the full song with LED sync. * @param melody Array containing note frequencies. * @param durations Array containing corresponding note lengths. * @param songLength Total number of notes in the song. */ void playSong(const int melody[], const int durations[], int songLength) { for (int thisNote = 0; thisNote < songLength; thisNote++) { bool isQuietNote = (melody[thisNote] == 0); int noteDuration = 1000 / durations[thisNote]; // Trigger Active-Low LED effect updateLeds(thisNote, isQuietNote); tone(BUZZER_PIN, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(BUZZER_PIN); turnOffBothLeds(); // Drive both pins HIGH to turn off the LEDs } Serial.println(F("Song finished. LEDs reset to standby (HIGH).")); } /** * @brief Logic switch designed for Active-Low configurations (LOW = ON, HIGH = OFF). * @param noteIndex Current position in the melody array. * @param isQuietNote Evaluation flag determining if the note produces no sound. */ void updateLeds(int noteIndex, bool isQuietNote) { if (isQuietNote) { turnOffBothLeds(); return; } // Alternating Active-Low pattern if (noteIndex % 2 == 0) { digitalWrite(LED_A_PIN, LOW); // LED A turns ON digitalWrite(LED_B_PIN, HIGH); // LED B turns OFF } else { digitalWrite(LED_A_PIN, HIGH); // LED A turns OFF digitalWrite(LED_B_PIN, LOW); // LED B turns ON } } /** * @brief Forces both LED control pins to HIGH, turning them OFF in Active-Low logic. */ void turnOffBothLeds() { digitalWrite(LED_A_PIN, HIGH); digitalWrite(LED_B_PIN, HIGH); }

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !