回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

基于C4002毫米波传感器与行空板K10的展品吸引力可视化系统 简单

头像 寸进 2026.06.06 55 0

一、项目背景与意义

在博物馆、科技馆、艺术展览等场景中,如何客观评估不同展品对观众的吸引力,一直是策展人和场馆运营者面临的难题。传统的评估方法主要依赖人工观察、问卷调查等方式,存在主观性强、样本量小、无法实时反馈等局限。

随着物联网与传感技术的发展,利用传感器量化观众行为已成为展览设计优化的新趋势。本项目的核心思路是:用数据说话——通过检测观众在每个展品前的停留时间,量化评估展品的吸引力,为展陈优化提供数据支撑。

本项目选用DFRobot C4002 24GHz毫米波人体存在传感器作为核心检测设备。相比传统PIR红外传感器,C4002具备以下关键优势:

对比维度C4002毫米波雷达传统PIR传感器
静态人体检测✅ 可检测静坐、躺卧❌ 只能检测运动
抗环境干扰✅ 过滤窗帘/空调干扰❌ 易误报
检测距离运动11m/静止10m通常5-7m
响应时间<0.5秒约1-2秒

特别值得注意的是,C4002能够检测静态存在(通过识别呼吸引起的胸腔微动),这意味着即使观众安静地站在展品前欣赏,传感器也能准确识别,完美匹配展品观看场景的需求。

微信图片_2026-06-07_194949_072.jpg

二、系统架构设计

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

image.png

设计要点说明

1.采用模式2(仅静态存在触发):观众走动时不触发,只有静止观看展品时才记录,避免过路行人干扰

2.检测范围设定为1-3米:覆盖展品前有效观赏区域

3.3秒判定机制:观众需在展品前停留3秒以上才开始计时,排除短暂经过的误判

三、实施过程

C4002传感器引脚焊接:

引脚焊接.jpg

1. 环境校准

在Arduino IDE中使用Arduino UNO R3开发板进行传感器环境校准。

操作步骤

按照接线图连接C4002与Arduino UNO R3(VCC→5V,GND→GND,TX→D4,RX→D5)

上传环境校准程序

校准期间所有人员离开检测区域

关闭风扇、空调等可能产生干扰的设备

等待约40秒校准完成,串口监视器显示“校准完成”提示

环境校准.jpg

代码
/*
  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);
}

校准串口监视器图1.png

校准串口监视器图2.png

2. 参数设置

校准完成后,使用Arduino UNO R3开发板进行传感器参数配置。

配置内容

检测范围:设置为1~3米

OUT引脚模式:设置为模式2(仅静态存在触发)

LED指示灯:全部关闭(避免灯光影响观众观展体验)

消失延时:设置为0秒(人离开立即恢复低电平)

操作步骤

保持接线不变(VCC、GND、TX、RX)

上传参数配置程序

观察串口监视器确认各项配置成功

配置完成后拆除TX、RX接线,仅保留VCC、GND、OUT三根线

模式配置.jpg

代码
/*
  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);
}

模式配置.png

模式测试:

模式测试.png

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)时结束计时,记录本次观展时长

程序流程图:

image.png

功能测试.jpg

SIoT主题配置.png

可视化面板.png

主程序.png

4. 模型制作

使用激光切割椴木板制作装置模型盒。

设计要求

容纳行空板K10、C4002传感器、电源等全部硬件组件

预留传感器检测窗口(确保探测范围不受遮挡)

预留散热开孔和线缆出口

外形美观,适合展陈环境

制作流程

设计CAD图纸(包括底板、侧板、顶板等结构件)

使用激光切割机切割椴木板

组装拼接,必要时使用木工胶加固

安装硬件组件,整理内部走线

激光建模.bmp
激光切割.jpg
成品模型.jpg

5. 实际应用

使用行空板K10自带的WiFi功能连接物联网平台,实现数据实时可视化。

数据传输

行空板K10通过WiFi连接局域网

使用MQTT协议将观展时长数据上报至SIoT物联网平台

可视化呈现

使用Mind+内置可视化大屏功能

采用散点图形式展示数据

横轴为时间段,纵轴为观展时长(秒)

直观反映展品在各个时间段内的观众停留情况

数据应用

通过散点图点的分布密度和高度判断展品吸引力

识别观众观展高峰时段

为展陈优化提供数据支撑

微信图片_2026-06-07_194830_717.jpg

6. 报告撰写

梳理项目实施全过程,总结经验和得失,形成书面技术报告。

四、总结

本项目成功构建了一套完整的展品吸引力量化评估系统,实现了从毫米波雷达人体感知、行空板K10数据采集到SIoT物联网可视化的全链路闭环。

项目核心成果

1.✅ 验证了C4002毫米波传感器在静态人体检测场景下的可靠性

2.✅ 实现了3秒判定机制,有效排除过路行人干扰

3.✅ 建立了MQTT数据上报通道,实现数据实时可视化

4.✅ 形成散点图等可视化形式,清晰反映展品吸引力

技术亮点

1.采用OUT模式2(仅静态存在触发),使用自带WiFi功能的行空板K10简化硬件配置,精准识别观看行为

2.环境校准与参数配置分离,确保传感器稳定工作

3.3秒延时逻辑,平衡响应速度与准确性

后续优化方向

1.增加更多传感器,实现多展品同时监测

2.引入人脸识别,分析观众人口统计学特征

3.建立数据模型,预测展品受欢迎程度

4.开发移动端应用,方便策展人实时查看数据

评论

user-avatar