Créer des Boutons Tactiles sur N'importe Quelle Surface avec le Capteur MPR121
Composants et Fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Capteur capacitif tactile Adafruit MPR121 (breakout) | 1 |
| LED générique | 1 |
Applications et Services en Ligne
- Arduino IDE
À Propos du Projet
Le MPR121 est un capteur tactile 12 broches exploitant les capacités capacitives de l'IC. Il existe deux bibliothèques principales ; la bibliothèque Bare Conductive est recommandée.
Caractéristiques Clés
- Broche d'interruption (IRQ) : Signale qu'une broche a été touchée ou relâchée, offrant un excellent temps de réponse et permettant l'utilisation d'une interruption au lieu d'un sondage en boucle.
- Adresse I2C configurable : La broche
ADDRsélectionne l'adresse I2C. Par défaut (reliée à GND via 100 kΩ) : 0x5A. Options : 3,3V → 0x5B, SDA → 0x5C, SCL → 0x5D. (Valable pour cartes Adafruit ; les clones peuvent différer. Utilisez un scanner I2C en cas de doute.) - Alimentation : La plupart des breakouts sont en 3,3V — ne pas alimenter en 5V. Côté données, l'I2C tolère généralement le 5V de l'Arduino, mais un convertisseur de niveau logique peut aider en cas de problèmes de détection.
Exemples d'Applications
Au fil des ans, j'ai réalisé plusieurs projets avec cet IC :
- Jeu éducatif pour enfant : lettres connectées à 2 MPR121, chaque contact déclenche un MP3 prononçant la lettre.
- Expérimentations avec la peinture conductrice Bare Conductive — très ludique et fonctionne parfaitement avec le MPR121.
Schéma de Connexion

Code Exemple : Allumage/Extinction LED sur Broches 0/1
Cet exemple allume une LED (broche 3) au contact de l'électrode 0 et l'éteint au relâchement de l'électrode 1.
#include <MPR121.h>
#include <Wire.h>
#define numElectrodes 2
#define LEDPIN 3
void setup() {
Serial.begin(115200);
Serial.println("System started");
pinMode(LEDPIN, OUTPUT);
Wire.begin();
// 0x5A = adresse I2C par défaut (ADDR à GND)
if (!MPR121.begin(0x5A)) {
Serial.println("error setting up MPR121");
switch (MPR121.getError()) {
case NO_ERROR: Serial.println("no error"); break;
case ADDRESS_UNKNOWN: Serial.println("incorrect address"); break;
case READBACK_FAIL: Serial.println("readback failure"); break;
case OVERCURRENT_FLAG: Serial.println("overcurrent on REXT pin"); break;
case OUT_OF_RANGE: Serial.println("electrode out of range"); break;
case NOT_INITED: Serial.println("not initialised"); break;
default: Serial.println("unknown error"); break;
}
while (1);
}
MPR121.setInterruptPin(4);
MPR121.setTouchThreshold(40);
MPR121.setReleaseThreshold(20);
MPR121.updateTouchData();
}
void loop() {
if (MPR121.touchStatusChanged()) {
MPR121.updateTouchData();
for (int i = 0; i < numElectrodes; i++) {
if (MPR121.isNewTouch(i)) {
if (i == 0) digitalWrite(LEDPIN, HIGH);
} else if (MPR121.isNewRelease(i)) {
if (i == 1) digitalWrite(LEDPIN, LOW);
}
}
}
}
Processus de fabrication
- Détection d'éclairs avec Raspberry Pi et AS3935 : Guide pratique
- Suivre l'exercice quotidien de votre hamster avec un tracker de fitness Raspberry Pi
- Démarrer avec l'IoT et MQTT : Tutoriel ESP8266 sans code
- Intégration I2C fluide entre Arduino et Raspberry Pi 2 pour projets IoT de capteurs
- Stockage ADN révolutionnaire transforme objets du quotidien en archives durables
- Transformation de la chaîne d'approvisionnement centrée sur l'humain : booster efficacité et résilience
- Tour intelligent : Commandes à écran tactile avancées pour usinage de précision
- OmniFibers : tissu intelligent qui régule la respiration pour la performance et la récupération
- Du concept à la réalité : transformer des designs créatifs en produits tangibles