Note

Bonjour, bienvenue dans la communauté SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez-vous dans l’univers de Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre & Partager : Échangez des conseils et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux nouvelles annonces de produits et aux avant-goûts.

  • Remises spéciales : Profitez de remises exclusives sur nos derniers produits.

  • Promotions festives et cadeaux : Participez à des cadeaux et promotions de vacances.

👉 Prêt à explorer et créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !

MPR121

Aperçu

Dans cette leçon, vous apprendrez à utiliser le MPR121. C’est une bonne option lorsque vous souhaitez ajouter de nombreux interrupteurs tactiles à votre projet. L’électrode du MPR121 peut être étendue avec un conducteur. Si vous connectez un fil à une banane, vous pouvez transformer la banane en un interrupteur tactile, réalisant ainsi des projets comme un piano de fruits.

Composants nécessaires

Pour ce projet, nous avons besoin des composants suivants.

Il est définitivement pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit Elite Explorer

300+

Elite Explorer Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Arduino Uno R4 WiFi

-

Plaque de Montage (Breadboard)

ACHETER

Fils de Liaison

ACHETER

MPR121

-

Câblage

Dans cet exemple, nous insérons le MPR121 dans la breadboard. Connectez le GND du MPR121 à GND, 3.3V à 3V3, IRQ à la broche numérique 2, SCL à la broche SCL (A5), et SDA à la broche SDA (A4). Il y a 12 électrodes pour la détection tactile.

Note

Le MPR121 est alimenté par 3,3V, pas par 5V.

../_images/23-mpr121_bb.png

Schéma de câblage

../_images/23_mpr121_schematic.png

Code

Note

  • Vous pouvez ouvrir le fichier 23-mpr121.ino sous le chemin elite-explorer-kit-main\basic_project\23-mpr121 directement.

  • La bibliothèque Adafruit MPR121 est utilisée ici, vous pouvez l’installer à partir du Gestionnaire de bibliothèques.

    ../_images/22_mpr121_lib.png

Après avoir téléchargé le code sur la carte UNO, l’état tactile des broches MPR121 « 1 » et « 0 » sera enregistré dans un tableau booléen de 12 bits. Ce tableau sera ensuite imprimé sur le moniteur série.

Analyse du code

Ce code facilite la communication et l’utilisation du capteur tactile MPR121. Il peut détecter l’état des électrodes tactiles et imprimer des informations sur les électrodes touchées ou relâchées sur l’interface série. Si des données de capteur détaillées sont nécessaires, le code pertinent peut être décommenté.

Voici une analyse du code :

  1. Importation des bibliothèques :

    #include <Wire.h>
    #include "Adafruit_MPR121.h"
    
    • Wire.h : Utilisé pour la communication I2C.

    • Adafruit_MPR121.h : Bibliothèque Adafruit pour le capteur tactile MPR121.

  2. Définition de la macro _BV :

    #ifndef _BV
    #define _BV(bit) (1 << (bit))
    #endif
    

    _BV(bit) définit une macro qui convertit un bit donné en valeur binaire correspondante, similaire à 1 << bit.

  3. Initialisation de l’instance de la classe Adafruit_MPR121 :

    Adafruit_MPR121 cap = Adafruit_MPR121();
    

    Création d’une instance de la classe Adafruit_MPR121 nommée cap. L’objet cap sera utilisé pour communiquer avec et utiliser le capteur tactile MPR121.

  4. Fonction setup() :

    Initialisation de la communication série à un débit de 9600 bauds. Puis, initialisation du capteur tactile MPR121 avec l’adresse I2C par défaut de 0x5A. Si l’initialisation échoue, imprimer un message d’erreur et entrer dans une boucle infinie.

    void setup() {
        Serial.begin(9600);
    
        while (!Serial) { // nécessaire pour éviter que leonardo/micro ne démarre trop vite !
            delay(10);
        }
    
        Serial.println("Test du capteur tactile capacitif Adafruit MPR121");
    
        // L'adresse par défaut est 0x5A, si reliée à 3.3V c'est 0x5B
        // Si reliée à SDA c'est 0x5C et si à SCL alors 0x5D
        if (!cap.begin(0x5A)) {
            Serial.println("MPR121 non trouvé, vérifier le câblage ?");
            while (1);
        }
        Serial.println("MPR121 trouvé !");
    }
    
  5. Fonction loop() :

    • Obtenir l’état actuel du toucher, renvoyé sous forme d’entier 16 bits.

      currtouched = cap.touched();
      
    • Parcourir l’état des 12 électrodes (numérotées de 0 à 11).

      for (uint8_t i=0; i<12; i++) {
          // si *est* touchée et *n'était pas* touchée avant, alerte !
          if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
              Serial.print(i); Serial.println(" touched");
          }
          // si *était* touchée et maintenant *ne l'est pas*, alerte !
          if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
              Serial.print(i); Serial.println(" released");
          }
      }
      
      • Si une électrode est touchée et ne l’était pas avant, imprimer « x touchée », où x est le numéro de l’électrode.

      • Si une électrode était touchée avant mais ne l’est plus maintenant, imprimer « x relâchée. »

    • Mettre à jour lasttouched pour stocker l’état actuel du toucher pour comparaison lors de la prochaine itération.

      lasttouched = currtouched;
      
    • Informations de débogage (section optionnelle) :

      // informations de débogage, ce qui
      Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX);
      Serial.print("Filt: ");
      for (uint8_t i=0; i<12; i++) {
          Serial.print(cap.filteredData(i)); Serial.print("\t");
      }
      Serial.println();
      Serial.print("Base: ");
      for (uint8_t i=0; i<12; i++) {
          Serial.print(cap.baselineData(i)); Serial.print("\t");
      }
      Serial.println();
      
      // ajouter un délai pour ne pas submerger
      delay(100);