Arduino Nano + TPA81 热堆阵列 + 8×PIR 传感器构建手势/动作检测器
所需元件与物料
| Arduino Nano R3 | ×1 |
| TPA81 Devantech 8 像素热堆阵列传感器 (I2C) | ×1 |
| HC-SR505 迷你 PIR 人体红外传感器 (低成本替代方案) | ×8 |
| 0.96" SPI OLED 显示屏 (128x64, SSD1306) | ×1 |
| 面包板、公母杜邦线 | 若干 |
软件工具
- Arduino IDE
原理与应用
被动红外 (PIR) 传感器工作原理
任何绝对零度以上的物体都会发射红外辐射。PIR 传感器不主动发射能量,而是接收视场内物体辐射的红外热能。典型应用:安防报警、感应灯。
TPA81 特点:8 个热堆元件排成一行,视场约 12° (带硅透镜),可同时测量 8 个相邻点的温度,分辨率 1°C,能在 2 米外探测蜡烛火焰,不受环境可见光干扰。本质是一个 8 像素的热成像仪。

低成本替代方案
若 TPA81 预算不足,可用 8 个 HC-SR505 (拆去菲涅耳透镜) 并联到 8 个数字输入引脚,轮询读取,亦可实现类似 8 像素热成像,但需自行处理采样时序。

代码开发三阶段
阶段 1: 读取 TPA81 原始温度
#include
#include
TPA81 tpa;
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
Serial.print(tpa.getAmbient()); Serial.print(" "); // 环境温度
for (int i=1;i<=8;i++) { Serial.print(tpa.getPoint(i)); Serial.print(" "); }
Serial.println();
delay(100);
}
串口绘图器可观察 8 通道温度波形。将手放在传感器前,对应像素温度升高 (约 29-32°C)。
阶段 2: 简单阈值可视化 (串口绘图器显示手势轮廓)
void loop() {
Serial.print(tpa.getAmbient()); Serial.print(" ");
for (int i=1;i<=8;i++) {
if (tpa.getPoint(i) > 29) Serial.print("# "); else Serial.print(". ");
}
Serial.println();
delay(100);
}
手在传感器前左右移动,串口会显示类似热成像的 "#" 轨迹。
阶段 3: 手势识别算法 + OLED 显示音量条
算法核心:
1. 待机态:8 像素全高于阈值 (sum==8) 置标志位 sflag=1
2. 检测到非全高 (sum!=8) 且 sflag==1 → 进入手势记录态
3. 连续采样 (50ms 间隔) 记录每像素随时间的触发计数 gesture[8][gcount]
4. 手势结束 (sum==8) 后,将 8 像素两两合并为 4 组 (0+1, 2+3, 4+5, 6+7),再合并为左半 (0-3) 与右半 (4-7) 总计数 tgesture[0] 与 tgesture[4]
5. 若左半计数 > 右半 → 判定为「右划/音量+」;反之「左划/音量-」
6. 音量值 (1-11) 对应 11 幅预存位图 (v1~v11, PROGMEM) 显示在 OLED 上
// 关键变量
int gesture[8][20], tgesture[8], sum=0, sflag=0, gcount=0, vol=5;
// v1~v11 为 128x64 位图数组 (PROGMEM, 此处省略,完整代码见下载)
void loop() {
// 1. 采样 8 像素
sum=0;
for (int i=0;i<8;i++) {
if (tpa.getPoint(i+1)>29) { gesture[i][0]=1; sum++; } else gesture[i][0]=0;
}
// 2. 待机/启动判断
if (sum==8) { sflag=1; }
else if (sflag==1) {
// 手势记录循环
gcount=0; sum=0;
while (sum<8) {
sum=0;
for (int i=0;i<8;i++) {
if (tpa.getPoint(i+1)>29) { gesture[i][gcount]=1; sum++; }
else gesture[i][gcount]=0;
}
gcount++; delay(50);
}
// 3. 统计左右半侧积分
for (int c=0;c<8;c++) for (int z=0;z

进阶拓展
同理可扩展识别:点击、拖拽、拉伸、旋转等手势,映射到不同控制指令 (如翻页、缩放、开关灯等)。
依赖库下载
- TPA81 Library (C/C++)
- SSD1306 Library (C/C++)
库文件较大,仅提供下载链接,需在 Arduino IDE 中通过“添加 .ZIP 库”安装。
制造工艺
- 树莓派 PIR 运动传感器控制 LED 实战指南
- 掌握树莓派 GPIO:在 B+/Model 2 上接入 PIR 运动传感器
- HC‑SR501 PIR 运动传感器与树莓派接线、校准与 Python 编程全指南
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
- 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
- 互动 LED 矩阵门显:PIR 触发节日问候 + 待机特效
- Arduino Cloud 传感器塔:温度、动作与气体监测
- 基于 Arduino Nano 的智能运动感应水枪
- 基于Arduino、Windows IoT与Azure云的高级跌倒检测系统
- Arduino传感器:类型、应用与实战项目
- PIR传感器电路工作原理、设计与实际应用全解析