利用 MPR121 电容传感器在任意表面制作触控按键
项目简介
MPR121 是一款 12 通道电容触摸传感器,通过 I²C 接口与单片机通信。本项目演示如何用 Arduino UNO + MPR121 断出板,在任意非金属表面(木板、亚克力、纸张、甚至 Bare Conductive 导电漆绘制的图案)上制作触控按键,并控制一颗 LED 亮灭。
硬件清单
| 元器件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | 主控 |
| Adafruit MPR121 电容触摸模块 | 1 | 12 通道,I²C 地址可选 0x5A/0x5B/0x5C/0x5D |
| LED (任意颜色) | 1 | 接 D3,配合电流限制电阻 |
关键技术点
- 库选择:推荐 Bare Conductive 官方库 GitHub,API 简洁,支持中断触发
- 中断引脚:MPR121 拥有
IRQ引脚,任意通道触摸/释放均拉低,可接 Arduino 中断引脚(示例用 D4),避免轮询延迟 - I²C 地址配置:ADDR 引脚默认接地为 0x5A;接 3V3 为 0x5B;接 SDA 为 0x5C;接 SCL 为 0x5D。克隆板地址可能不同,建议先跑 I²C 扫描器确认
- 电压兼容:模块多为 3.3V 供电,Arduino UNO 为 5V 逻辑。I²C 总线因开漏结构通常直连无损,若通信不稳定请加电平转换模块
- 阈值设置:
setTouchThreshold(40)、setReleaseThreshold(20),差值越大抗干扰越强,灵敏度越低
接线图

MPR121 Arduino UNO VCC → 3.3V (切勿接 5V!) GND → GND SDA → A4 SCL → A5 IRQ → D4 (中断引脚) ADDR → GND (地址 0x5A)
示例代码:通道 0 触摸亮灯,通道 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();
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);
}
}
}
}
创意应用案例
- 儿童字母学习板:两块 MPR121 共 24 通道,每个字母贴铜箔或涂导电漆,触摸播放对应发音 MP3
- 导电漆互动墙面:用 Bare Conductive 导电漆绘制图案,连接 MPR121 实现墙面触控
- 薄膜键盘替代:在亚克力板背面贴铜箔胶带做电极,正面贴图案贴纸,实现无机械结构键盘
- 液位/接近检测:利用电容感应原理,非接触检测液体高度或手势接近
常见问题排查
- I²C 扫描不到设备:检查供电是否 3.3V、SDA/SCL 是否接反、ADDR 引脚连接、是否需要上拉电阻(模块通常已板载)
- 误触发频繁:增大触摸/释放阈值差值,缩短电极导线,远离大功率电源线
- 单通道无响应:确认电极未短路、未被大面积金属遮挡、库版本兼容
- 中断不触发:检查 IRQ 引脚连接、
setInterruptPin()参数、Arduino 引脚是否支持外部中断
扩展建议
- 级联多块 MPR121(修改地址)实现 24/36/48 通道
- 结合 MP3 模块(DFPlayer Mini)做独立声光交互装置
- 接入 Home Assistant / MQTT 实现智能家居触控面板
- 配合导电漆制作弧形、不规则形状触控区域
制造工艺
- 树莓派与 AS3935 闪电检测传感器实战指南
- 树莓派仓鼠健身追踪器:激光断束传感器记录每日运动量
- IoT 与 MQTT 入门:免代码 ESP8266 教程
- Arduino 与树莓派 2 I2C 通信集成:打造物联网传感器项目的最佳搭档
- 从概念到现实:将创意设计转化为有形产品
- CNC车铣复合加工优势深度解析:多轴联动重塑制造效能
- 革命性DNA存储让日常物品变身耐久数据档案
- 6大实战策略将线索转化为忠诚客户——附真实案例
- 以人为本的供应链转型:提升效率与韧性
- 智能车床:触屏电子控制赋能精密加工
- 春季空压机大保养:五大维护要点保障旺季满负荷运行
- OmniFibers:调节呼吸助表现与恢复的智能织物