一、项目背景与意义
在博物馆、科技馆、艺术展览等场景中,如何客观评估不同展品对观众的吸引力,一直是策展人和场馆运营者面临的难题。传统的评估方法主要依赖人工观察、问卷调查等方式,存在主观性强、样本量小、无法实时反馈等局限。
随着物联网与传感技术的发展,利用传感器量化观众行为已成为展览设计优化的新趋势。本项目的核心思路是:用数据说话——通过检测观众在每个展品前的停留时间,量化评估展品的吸引力,为展陈优化提供数据支撑。
本项目选用DFRobot C4002 24GHz毫米波人体存在传感器作为核心检测设备。相比传统PIR红外传感器,C4002具备以下关键优势:
| 对比维度 | C4002毫米波雷达 | 传统PIR传感器 |
|---|---|---|
| 静态人体检测 | ✅ 可检测静坐、躺卧 | ❌ 只能检测运动 |
| 抗环境干扰 | ✅ 过滤窗帘/空调干扰 | ❌ 易误报 |
| 检测距离 | 运动11m/静止10m | 通常5-7m |
| 响应时间 | <0.5秒 | 约1-2秒 |
特别值得注意的是,C4002能够检测静态存在(通过识别呼吸引起的胸腔微动),这意味着即使观众安静地站在展品前欣赏,传感器也能准确识别,完美匹配展品观看场景的需求。

二、系统架构设计
整个系统采用三层架构,实现从数据采集到可视化展示的完整链路:

设计要点说明:
1.采用模式2(仅静态存在触发):观众走动时不触发,只有静止观看展品时才记录,避免过路行人干扰
2.检测范围设定为1-3米:覆盖展品前有效观赏区域
3.3秒判定机制:观众需在展品前停留3秒以上才开始计时,排除短暂经过的误判
三、实施过程
C4002传感器引脚焊接:

1. 环境校准
在Arduino IDE中使用Arduino UNO R3开发板进行传感器环境校准。
操作步骤:
按照接线图连接C4002与Arduino UNO R3(VCC→5V,GND→GND,TX→D4,RX→D5)
上传环境校准程序
校准期间所有人员离开检测区域
关闭风扇、空调等可能产生干扰的设备
等待约40秒校准完成,串口监视器显示“校准完成”提示

/*
C4002 环境校准程序 - 9600 波特率版
接线:
C4002 VCC → Arduino 5V
C4002 GND → Arduino GND
C4002 TX → Arduino D4
C4002 RX → Arduino D5
串口监视器波特率:115200(电脑端)
*/
#include "DFRobot_C4002.h"
#include <SoftwareSerial.h>
// 软串口:RX=D4, TX=D5,波特率=9600(与你模块匹配)
SoftwareSerial mySerial(4, 5);
DFRobot_C4002 c4002(&mySerial, 9600); // ★ 关键:9600 不是 115200
void setup() {
Serial.begin(115200);
Serial.println("========================================");
Serial.println("C4002 环境校准程序启动 (9600波特率)");
Serial.println("========================================");
// 尝试初始化
int retry = 0;
while (!c4002.begin()) {
retry++;
Serial.print("初始化失败,重试 ");
Serial.print(retry);
Serial.println(" 次...");
Serial.println("请检查:");
Serial.println(" 1. TX→D4, RX→D5 接线正确");
Serial.println(" 2. 模块已上电(5V)");
Serial.println(" 3. 模块波特率是否为9600");
delay(1000);
if (retry > 10) {
Serial.println("多次失败,请检查硬件接线");
while(1);
}
}
Serial.println("✓ 传感器连接成功!");
Serial.println("✓ 当前波特率: 9600");
delay(100);
// 开启指示灯(便于观察状态)
c4002.setRunLedState(eLedOn);
c4002.setOutLedState(eLedOn);
// 设置上报周期
c4002.setReportPeriod(10);
Serial.println("✓ 上报周期已设置");
// 启动校准
Serial.println("========================================");
Serial.println("请立即离开房间!");
Serial.println("10 秒后开始校准,整个过程约 40 秒");
Serial.println("========================================");
c4002.startEnvCalibration(10, 30);
}
void loop() {
sRetResult_t retResult = c4002.getNoteInfo();
if (retResult.noteType == eCalibration) {
Serial.print("校准倒计时: ");
Serial.print(retResult.calibCountdown);
Serial.println(" 秒");
if (retResult.calibCountdown == 0) {
Serial.println("========================================");
Serial.println("★★★ 校准完成! ★★★");
Serial.println("========================================");
Serial.println("现在可以拆除 TX/RX 线,使用 OUT 引脚");
while(1);
}
}
delay(500);
}

2. 参数设置
校准完成后,使用Arduino UNO R3开发板进行传感器参数配置。
配置内容:
检测范围:设置为1~3米
OUT引脚模式:设置为模式2(仅静态存在触发)
LED指示灯:全部关闭(避免灯光影响观众观展体验)
消失延时:设置为0秒(人离开立即恢复低电平)
操作步骤:
保持接线不变(VCC、GND、TX、RX)
上传参数配置程序
观察串口监视器确认各项配置成功
配置完成后拆除TX、RX接线,仅保留VCC、GND、OUT三根线

/*
C4002 OUT 模式配置程序,模式2:仅观众静态看展时触发
配置目标:
- 模式2(仅静态存在触发)
- 所有指示灯关闭,避免灯光影响观众欣赏展品
- 检测范围 1-3 米
- 每秒检测一次
接线(配置时):
C4002 VCC → Arduino 5V
C4002 GND → Arduino GND
C4002 TX → Arduino D2
C4002 RX → Arduino D3
C4002 OUT → Arduino D6(可选)
配置完成后:
C4002 VCC → 行空板 K10 5V
C4002 GND → 行空板 K10 GND
C4002 OUT → 行空板 K10 P0
*/
#include "DFRobot_C4002.h"
#include <SoftwareSerial.h>
// 软串口配置:RX=D2, TX=D3, 波特率=9600
SoftwareSerial c4002Serial(2, 3);
DFRobot_C4002 c4002(&c4002Serial, 9600);
const int outPin = 6;
void setup() {
Serial.begin(115200);
pinMode(outPin, INPUT);
Serial.println("=========================================");
Serial.println("C4002 OUT 模式配置程序");
Serial.println("配置目标:");
Serial.println(" - 模式2:仅静态存在触发");
Serial.println(" - 所有指示灯关闭");
Serial.println(" - 检测范围 1-3 米");
Serial.println("=========================================");
// 初始化传感器
while (!c4002.begin()) {
Serial.println("初始化失败,请检查接线...");
delay(1000);
}
Serial.println("✓ 传感器连接成功!");
delay(100);
// ========== 1. 设置上报周期:10 = 1秒检测一次 ==========
c4002.setReportPeriod(10);
Serial.println("✓ 上报周期已设置(1秒/次)");
delay(100);
// ========== 2. 设置检测范围:1米 ~ 3米 ==========
Serial.print("设置检测范围:1米 ~ 3米...");
if (c4002.setDetectRange(100, 300)) {
Serial.println(" ✓ 成功");
} else {
Serial.println(" ✗ 失败");
}
delay(100);
// ========== 3. 关闭运行指示灯 ==========
Serial.print("关闭运行指示灯...");
if (c4002.setRunLedState(eLedOff)) {
Serial.println(" ✓ 已关闭");
} else {
Serial.println(" ✗ 失败");
}
delay(100);
// ========== 4. 关闭输出指示灯 ==========
Serial.print("关闭输出指示灯...");
if (c4002.setOutLedState(eLedOff)) {
Serial.println(" ✓ 已关闭");
} else {
Serial.println(" ✗ 失败");
}
delay(100);
// ========== 5. 设置 OUT 引脚模式:模式2(仅静态存在触发) ==========
Serial.print("设置 OUT 引脚模式(模式2:仅静态存在触发)...");
if (c4002.setOutPinMode(eOutpinMode2)) {
Serial.println(" ✓ 成功");
} else {
Serial.println(" ✗ 失败,尝试重新设置...");
delay(100);
if (c4002.setOutPinMode(eOutpinMode2)) {
Serial.println(" ✓ 第二次尝试成功");
} else {
Serial.println(" ✗ 仍然失败,请检查接线");
}
}
delay(100);
// ========== 6. 设置人离开后延时 ==========
if (c4002.setTargetDisappearDelay(0)) {
Serial.println("✓ 消失延时设置为 0 秒");
}
Serial.println("");
Serial.println("=========================================");
Serial.println("配置完成!");
Serial.println("");
Serial.println("OUT 引脚行为(模式2):");
Serial.println(" - 观众静止观看展品 → OUT = HIGH");
Serial.println(" - 观众走动或无人 → OUT = LOW");
Serial.println("");
Serial.println("所有指示灯已关闭,不影响观展体验");
Serial.println("");
Serial.println("现在可以:");
Serial.println("1. 拆除 TX(D2) 和 RX(D3) 接线");
Serial.println("2. 保留 VCC、GND、OUT(D6) 三根线");
Serial.println("3. 连接到行空板 K10 即可使用");
Serial.println("=========================================");
}
void loop() {
// 实时显示 OUT 引脚状态(用于验证,配置完成后可删除此段)
static unsigned long lastPrint = 0;
unsigned long now = millis();
if (now - lastPrint > 1000) { // 每秒输出一次
lastPrint = now;
int outState = digitalRead(outPin);
if (outState == HIGH) {
Serial.println("OUT = HIGH → 观众正在观看展品(静态存在)");
} else {
Serial.println("OUT = LOW → 无人 或 观众走动");
}
}
delay(50);
}
模式测试:

3. 功能测试
在Mind+编程平台,使用行空板K10连接C4002传感器进行功能测试。
硬件连接:
C4002 VCC → 行空板K10 5V
C4002 GND → 行空板K10 GND
C4002 OUT → 行空板K10 P0(通过电阻降压)
电压匹配处理:
由于C4002输出高电平为5V,而行空板K10的GPIO为3.3V逻辑电平
在OUT引脚与K10的P0引脚之间串联小电阻进行降压保护
检测逻辑:
每秒读取一次P0引脚电平
连续3秒检测到高电平(HIGH)才判定为观众正在观看展品
判定为观看后开始累计观展时长
电平变为低电平(LOW)时结束计时,记录本次观展时长
程序流程图:





4. 模型制作
使用激光切割椴木板制作装置模型盒。
设计要求:
容纳行空板K10、C4002传感器、电源等全部硬件组件
预留传感器检测窗口(确保探测范围不受遮挡)
预留散热开孔和线缆出口
外形美观,适合展陈环境
制作流程:
设计CAD图纸(包括底板、侧板、顶板等结构件)
使用激光切割机切割椴木板
组装拼接,必要时使用木工胶加固
安装硬件组件,整理内部走线


5. 实际应用
使用行空板K10自带的WiFi功能连接物联网平台,实现数据实时可视化。
数据传输:
行空板K10通过WiFi连接局域网
使用MQTT协议将观展时长数据上报至SIoT物联网平台
可视化呈现:
使用Mind+内置可视化大屏功能
采用散点图形式展示数据
横轴为时间段,纵轴为观展时长(秒)
直观反映展品在各个时间段内的观众停留情况
数据应用:
通过散点图点的分布密度和高度判断展品吸引力
识别观众观展高峰时段
为展陈优化提供数据支撑

6. 报告撰写
梳理项目实施全过程,总结经验和得失,形成书面技术报告。
四、总结
本项目成功构建了一套完整的展品吸引力量化评估系统,实现了从毫米波雷达人体感知、行空板K10数据采集到SIoT物联网可视化的全链路闭环。
项目核心成果:
1.✅ 验证了C4002毫米波传感器在静态人体检测场景下的可靠性
2.✅ 实现了3秒判定机制,有效排除过路行人干扰
3.✅ 建立了MQTT数据上报通道,实现数据实时可视化
4.✅ 形成散点图等可视化形式,清晰反映展品吸引力
技术亮点:
1.采用OUT模式2(仅静态存在触发),使用自带WiFi功能的行空板K10简化硬件配置,精准识别观看行为
2.环境校准与参数配置分离,确保传感器稳定工作
3.3秒延时逻辑,平衡响应速度与准确性
后续优化方向:
1.增加更多传感器,实现多展品同时监测
2.引入人脸识别,分析观众人口统计学特征
3.建立数据模型,预测展品受欢迎程度
4.开发移动端应用,方便策展人实时查看数据
附件

返回首页
回到顶部
评论