Note

Bonjour et bienvenue dans la communauté SunFounder des passionnés de Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez plus profondément dans l’univers de Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

  • Support d’experts : Résolvez vos problèmes après-vente et vos défis techniques grâce à l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Bénéficiez d’un accès anticipé aux annonces de nouveaux produits et aux avant-premières.

  • Réductions spéciales : Profitez de réductions exclusives sur nos derniers produits.

  • Promotions festives et concours : Participez à des concours et des promotions pendant les fêtes.

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

2.24 Module MPR121

Aperçu

Dans cette leçon, vous apprendrez à utiliser le MPR121. Il constitue une excellente option lorsque vous souhaitez ajouter de nombreux interrupteurs tactiles à votre projet. L’électrode du MPR121 peut être étendue à l’aide d’un conducteur. Par exemple, en connectant un fil à une banane, vous pouvez transformer cette banane en un interrupteur tactile, réalisant ainsi des projets comme un piano fruité.

Composants Requis

../_images/Part_two_24.png

Circuit Fritzing

Dans cet exemple, insérez le MPR121 dans la breadboard. Connectez le GND du MPR121 au GND, 3.3V au 3V3, IRQ à la broche numérique 2, SCL à la broche SCL(21) et SDA à la broche SDA(20). Il y a 12 électrodes pour la détection tactile. Notez que le MPR121 est alimenté en 3.3V, et non en 5V.

../_images/image201.png

Schéma de Connexion

../_images/image202.png

Code

Note

  • Vous pouvez ouvrir directement le fichier 2.24_mpr121.ino situé dans le dossier sunfounder_vincent_kit_for_arduino\code\2.24_mpr121.

  • La bibliothèque Adafruit MPR121 est utilisée ici. Vous pouvez l’installer depuis le Gestionnaire de Bibliothèques.

    ../_images/lib_mpr121.png

Après avoir téléversé le code sur la carte Mega2560, l’état tactile des broches du MPR121 (soit « 1 », soit « 0 ») sera enregistré dans un tableau de type booléen de 12 bits qui sera affiché dans le moniteur série.

Analyse du Code

Ce code facilite la communication et l’opération du capteur tactile MPR121. Il peut détecter l’état des électrodes tactiles et afficher les informations concernant les électrodes touchées ou libérées sur l’interface série. Si des données détaillées du capteur sont nécessaires, le code correspondant peut être décommenté.

Voici l’analyse du code :

  1. Importation des bibliothèques :

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

    • Adafruit_MPR121.h : Bibliothèque Adafruit pour faire fonctionner 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 sa valeur binaire correspondante, similaire à 1 << bit.

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

    Adafruit_MPR121 cap = Adafruit_MPR121();
    

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

  4. Fonction setup() :

    Initialisation de la communication série avec un débit de 9600 bauds, puis initialisation du capteur tactile MPR121 avec l’adresse I2C par défaut 0x5A. Si l’initialisation échoue, un message d’erreur est affiché et une boucle infinie est lancée.

    void setup() {
        Serial.begin(9600);
    
        while (!Serial) { // nécessaire pour éviter que le Leonardo/micro démarre trop rapidement !
            delay(10);
        }
    
        Serial.println("Adafruit MPR121 Capacitive Touch sensor test");
    
        // L'adresse par défaut est 0x5A, si connecté à 3.3V c'est 0x5B
        // Si connecté à SDA, c'est 0x5C, et si connecté à SCL, c'est 0x5D
        if (!cap.begin(0x5A)) {
            Serial.println("MPR121 not found, check wiring?");
            while (1);
        }
        Serial.println("MPR121 found!");
    }
    
  5. Fonction loop() :

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

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

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

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

    • Mettez à jour lasttouched pour stocker l’état actuel du toucher afin de le comparer lors de l’itération suivante.

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

      // informations de débogage
      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();
      
      // mettez un délai pour éviter la surcharge d'informations
      delay(100);
      

Illustration du Phénomène

../_images/image203.jpeg