Arduino 电容式触控开关:一枚硬币点亮 LED 的极简 DIY
项目简介
利用 Arduino 官方 CapacitiveSensor 库,仅需一枚硬币(或铝箔)、一只 1MΩ 电阻和几根跳线,即可在 Arduino UNO 上实现非接触/触摸感应控制 LED 亮灭。原理基于人体电容耦合:手指靠近传感极板会改变 RC 电路充放电时间常数,经软件滤波后触发翻转逻辑。成本极低、无需专用触摸 IC,适合初学者理解电容感应原理。
所需材料
- Arduino UNO R3 × 1
- LED(任意颜色,建议 3mm/5mm 直插)× 1
- 1MΩ 电阻(1/4W,色环:棕-黑-绿)× 1
- 硬币(1元/5角均可)或铝箔纸 2×2cm × 1
- 跳线 × 4
- 面包板 × 1(可选)
电路原理
RC 充放电测量法:
- 发射引脚(D2)输出高电平,经 1MΩ 电阻给接收引脚(D4)充电
- 接收引脚连接传感极板(硬币),形成等效电容 C_sensor
- 人体靠近/触碰 → 并联人体电容 C_body (~100-200pF) → 总电容增大
- 充电时间 τ = R × C 变长,库函数测量充电周期数(循环计数)
- 阈值判决:计数超过基线 + 偏移量 → 判定为触摸事件


接线步骤
- 1MΩ 电阻跨接 Arduino D2(发射)与 D4(接收)
- 硬币/铝箔通过跳线连接 D4(接收引脚)
- LED 阳极(长脚)接 D8,阴极(短脚)接 220Ω 电阻后接 GND
- 若用面包板:D2-D4 跨电阻,D4 接硬币,D8 接 LED+电阻到 GND
软件准备
- Arduino IDE → 草图 → 包含库 → 管理库 → 搜索 "CapacitiveSensor" → 安装(由 Paul Badger 维护)
- 或手动下载:GitHub 打包库 → IDE → 草图 → 包含库 → 添加 .ZIP 库
完整代码(带消抖与状态机)
#include <CapacitiveSensor.h>
// 发射引脚 2,接收引脚 4,跨接 1MΩ 电阻
CapacitiveSensor cs_2_4 = CapacitiveSensor(2, 4);
const uint8_t LED_PIN = 8;
const long THRESHOLD = 800; // 触摸阈值,需实测校准
const unsigned long DEBOUNCE_MS = 200; // 消抖时间
bool ledState = false;
unsigned long lastToggle = 0;
void setup() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
cs_2_4.set_CS_AutocaL_Millis(0xFFFFFFFF); // 关闭自动校准,防止基线漂移
Serial.begin(115200);
Serial.println(F("电容触控启动,触摸硬币翻转 LED"));
}
void loop() {
long sensorValue = cs_2_4.capacitiveSensor(30); // 30 次采样平均
// 串口绘图器观测波形
Serial.println(sensorValue);
if (sensorValue > THRESHOLD) {
unsigned long now = millis();
if (now - lastToggle > DEBOUNCE_MS) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
lastToggle = now;
Serial.print(F("触发 -> LED ")); Serial.println(ledState ? "ON" : "OFF");
}
}
delay(10); // 降低 CPU 占用
}
调试与校准
- 上传代码,打开 串口绘图器(Tools → Serial Plotter,波特率 115200)
- 不触摸时记录基线值(通常 10-50)
- 触摸硬币观察峰值(通常 500-2000+)
- 将
THRESHOLD设为 基线 + (峰值-基线) × 0.3 左右 - 若过于灵敏(悬空触发),增大电阻至 2M-10MΩ 或启用自动校准
进阶玩法
- 多通道扩展:一个发射引脚可共用,接多个接收引脚+电阻+电极,实现多键触控键盘
- 近接感应:增大电阻至 10MΩ,检测距离可达 5-10cm,做非接触开关
- 滑动条/滚轮:排列多个电极,插值计算手指位置
- 防水封装:电极贴 PCB 背面,覆盖亚克力/玻璃面板,做浴室镜灯开关
原理图

常见问题
| 问题 | 解决 |
|---|---|
| 完全不触发 | 检查电阻阻值、引脚定义、硬币与 D4 连接是否可靠 |
| 疯狂闪烁/自触发 | 增大阈值、加装 0.1μF 滤波电容跨接 D4-GND、接地良好 |
| 串口绘图器无波形 | 确认波特率 115200,库版本兼容,尝试 capacitiveSensorRaw() |
制造工艺
- 树莓派 PIR 运动传感器控制 LED 实战指南
- 树莓派多传感器温度光照监测系统:DS18B20 实战构建
- 基于树莓派的卫生间占用传感器:通过 Twilio 实现语音与短信提醒
- 数字光照传感器驱动 LED:Windows 10 IoT Core 树莓派实战
- 两块 Arduino 通过 Firebase 传递温湿度数据
- 手势控制 RGB 台灯 —— 交互式免手操作照明
- 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
- Arduino 红外心率传感器 DIY:低成本高精度,串口绘图器实时波形
- Android 手势遥控车:Raspberry Pi + Arduino 101 + 电机扩展板,I2T 协同控制
- 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
- Arduino Cloud 传感器塔:温度、动作与气体监测
- MAX30100脉搏血氧传感器与Arduino接入指南:获取PPG波形与SpO2