Crea Botones Táctiles en Cualquier Superficie con el Sensor Capacitivo MPR121
Componentes y Suministros
| Componente | Cantidad |
|---|---|
| Arduino UNO | 1 |
| Adafruit Capacitive Touch Sensor Breakout - MPR121 | 1 |
| LED (genérico) | 1 |
Aplicaciones y Servicios Online
- Arduino IDE
Sobre el Proyecto
El MPR121 es un sensor táctil de 12 pines que aprovecha las capacidades de capacitancia del IC. Existen dos librerías principales; personalmente prefiero la de Bare Conductive: GitHub BareConductive/mpr121.
Características Clave
- Pin de interrupción (trigger) que avisa cuando un pin es tocado o liberado, permitiendo gran tiempo de respuesta y uso de interrupciones en lugar de sondeo continuo.
- Solo un pin de interrupción para los 12 IOs del IC.
- Dirección I2C configurable mediante pin ADDR: por defecto 0x5A (conectado a GND mediante 100K). También 0x5B (3Vo), 0x5C (SDA), 0x5D (SCL). En placas Adafruit; clones pueden tener direcciones distintas. Usa un escáner I2C si no conoces la tuya.
Conexión
La conexión es sencilla (ver esquemático). Importante: La mayoría de breakout boards funcionan a 3.3V; no alimentes con 5V. Sobre nivel lógico de datos: por la naturaleza del hardware I2C no dañarás el MPR121 con 5V del Arduino, pero si hay problemas de lectura o no se detecta en el bus, prueba un conversor de nivel lógico.
Ejemplos de Aplicaciones
- Juego educativo para niños: letras conectadas a 2 MPR121, cada toque reproduce MP3 con el nombre de la letra.
- Experimentos con pintura conductiva Bare Conductive: funciona excelente con el MPR121.
Código
Encendido/Apagado Simple de LED en Pines 0/1
Enciende un LED en pin 3 al tocar pin 0 del MPR121; apaga al soltar pin 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();
// 0x5C es la dirección I2C MPR121 en Bare Touch Board
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);
}
}
}
}
Esquemático

Proceso de manufactura
- Detección de Rayos con Raspberry Pi y AS3935: Guía Práctica
- Registre el Ejercicio Diario de su Hámster con un Rastreador de Actividad Raspberry Pi
- Primeros pasos con IoT y MQTT: tutorial ESP8266 sin código
- Integración I2C Fluida entre Arduino y Raspberry Pi 2 para Proyectos IoT con Sensores
- De Concepto a Realidad: Transformando Diseños Creativos en Productos Tangibles
- Explorando los Beneficios del Mecanizado CNC Mill-Turn (Fresado-Torneado)
- Almacenamiento basado en ADN revoluciona: convierte objetos cotidianos en archivos duraderos
- Transformación de cadena de suministro centrada en el ser humano: impulsando eficiencia y resiliencia
- Torno inteligente: Controles táctiles avanzados para mecanizado de precisión
- Primavera en acción: Mantenimiento experto del compresor para máxima eficiencia
- OmniFibers: Tejido Inteligente que Regula la Respiración para Rendimiento y Recuperación