2026-6-25 11:16:50 [显示全部楼层]
10浏览
查看: 10|回复: 0

[讨论] DFRobot C4002 毫米波人体存在模块试用测评

[复制链接]
DFRobotC4002 毫米波人体存在模块试用测评
作者:罗大信
一、模块概要介绍
DFRobot C4002(产品型号: SEN0691)是一款基于 24GHz FMCW(调频连续波)技术的毫米波人体存在检测传感器模块,专为智能家居场景中需要静态人体感知的应用的一种传感器。
与传统的 PIR(被动红外)传感器只能检测大幅运动人体不同,C4002 突破了这一局限——它能够在 10×10 米的有效检测范围内,同步侦测运动人体与静止(微动)人体,甚至可以捕捉到人体呼吸、心跳等引起的大于 0.1 毫米的微动位移。这意味着即使用户安静地坐在沙发上看书、伏案工作或进入睡眠状态,模块依然能稳定感知到人体的存在。
模块体积小巧,仅为 22mm × 26mm,正面印有 DFRobot 品牌标识和一收一发两个雷达天线阵列,背面则印有 "C4002:mmWave Motion & Static Presence" 字样,整体采用黑色 PCB 设计,做工精致。
二、主要技术特征
2.1 核心参数
  
参数项
  
  
规格
  
  
核心技术
  
24GHz FMCW 毫米波雷达
  
工作电压
  
DC 3.6V ~ 5.5V
  
检测能力
  
运动人体、静止/微动人体
  
最大检测距离
  
运动:11米;静止/微动:10米
  
探测角度
  
120° × 120°
  
工作频率
  
24GHz ~ 24.25GHz
  
环境光检测
  
0 ~ 50 lux
  
工作温度
  
-20℃ ~ 85℃
  
产品尺寸
  
22mm × 26mm
  
通信接口
  
UART 串口 + OUT 电平输出
  
默认波特率
  
115200 bps
2.2 功能特点
1. 全状态人体检测
支持三种目标状态输出:无目标(eNoTarget)、静态存在(ePresence)、运动目标(eMotion)
静态检测可捕捉呼吸、心跳等微幅振动,真正实现"人在就检测得到"
2. 多维度数据输出
通过 UART 串口可获取丰富的检测数据,包括:
目标距离(米)
信号能量值
运动速度(m/s)
运动方向(靠近/远离/无方向)
环境光强度(lux)
3. 智能抗干扰
内置环境底噪采集与自适应滤波算法
可自动学习并过滤窗帘摆动、空调气流、绿植摇晃等常见环境干扰
大幅降低误报率,保证系统长期稳定运行
4. 灵活可配置
探测范围可调(0~1100cm),支持分区检测
两种距离分辨率模式:80cm(最多15个距离门,最远11.6米)和 20cm(最多25个距离门,最远4.9米)
目标消失延迟时间可配置(0~65535秒)
数据上报周期可配置(单位0.1秒)
OUT 引脚输出模式可配置(存在/运动/静止状态)
5. 开发生态完善
完美兼容 Arduino、ESP32、ESP8266、树莓派等主流开源硬件平台
提供官方 DFRobot_C4002 库,API 简洁易用
支持 Home Assistant 智能家居系统集成
三、ESP32-S3 开发板连接开发
3.1 硬件准备
DFRobotC4002 毫米波人体存在模块 × 1
ESP32-S3开发板 × 1
杜邦线若干
USB 数据线(用于供电和烧录程序)
3.2 接线方式
C4002 模块与ESP32-S3 开发板通过 UART 串口进行通信,接线如下:
  
C4002 引脚
  
  
ESP32-S3 引脚
  
  
说明
  
  
VIN
  
5V / 3.3V
电源输入,支持 3.6~5.5V
  
GND
  
GND
共地,必须连接
  
RX
  
GPIO 6 (D6)
传感器串口接收 → ESP32 串口发送
  
TX
  
GPIO 5 (D5)
传感器串口发送 → ESP32 串口接收
  
OUT
  
可选 GPIO
电平输出引脚,可直接用于简单触发
注意串口通信是交叉连接的——传感器的 TX 接开发板的 RX,传感器的 RX接开发板的 TX。
3.3 软件环境搭建
1. 安装 Arduino IDE:从官网下载并安装最新版 Arduino IDE
2. 安装 ESP32 开发板支持包:
   - 打开 Arduino IDE → 文件 → 首选项
   - 在"附加开发板管理器网址"中添加 ESP32 包地址
   - 打开工具 → 开发板 → 开发板管理器,搜索"ESP32" 并安装
3. 安装 DFRobot_C4002 库:
   - 打开工具 → 管理库
   - 搜索 "DFRobot_C4002"
   - 点击安装(当前版本 1.0.0)
四、引脚定义与初始化
4.1 模块引脚详解
  
引脚序号
  
  
名称
  
  
功能描述
  
  
1
  
VIN
电源正极输入,电压范围 DC 3.6V ~  5.5V
  
2
  
GND
电源地,需与主控板共地
  
3
  
RX
串口接收端,接主控板的 TX 引脚
  
4
  
TX
串口发送端,接主控板的 RX 引脚
  
5
  
OUT
可配置电平输出引脚,用于简单触发应用
模块正面还有两个状态指示灯:
RUN 灯:运行指示灯,模块正常工作时常亮
OUT 灯:输出指示灯,检测到目标时点亮
4.2 初始化代码解析
在 Arduino 中使用 C4002 模块,首先需要引入库并创建传感器对象:
#include"DFRobot_C4002.h"
// ESP32 平台使用硬件串口 Serial1
// 参数说明:&Serial1 - 使用硬件串口1
//          115200 - 波特率
//          D6 - 传感器 RX 引脚(ESP32 的 TX)
//          D5 - 传感器 TX 引脚(ESP32 的 RX)
DFRobot_C4002c4002(&Serial1, 115200, D6, D5);
在 setup() 函数中进行初始化:
void setup() {
  Serial.begin(115200);  // 调试串口
  
  // 初始化传感器,直到成功
  while (c4002.begin() != true) {
    Serial.println("C4002 beginfailed!");
    delay(1000);
  }
  Serial.println("C4002 beginsuccess!");
  delay(50);
}
4.3 常用配置参数
初始化成功后,通常需要配置以下参数:
  // 1. 关闭运行指示灯(可选,减少光污染)
  c4002.setRunLedState(eLedOff);
  
  // 2. 关闭输出指示灯(可选)
  c4002.setOutLedState(eLedOff);
  
  // 3. 设置距离分辨率模式
  // eResolution80Cm: 80cm分辨率,最多15个距离门,最远11.6米
  // eResolution20Cm: 20cm分辨率,最多25个距离门,最远4.9米
  c4002.setResolutionMode(eResolution80Cm);
  
  // 4. 设置检测范围(单位:cm)
  uint16_t closeRange = 0;    // 近距离边界
  uint16_t farRange = 1100;   // 远距离边界
  c4002.setDetectRange(closeRange, farRange);
  
  // 5. 设置光照阈值(0~50 lux),设为0表示不触发光照逻辑
  c4002.setLightThresh(0);
  
  // 6. 配置距离门(启用所有距离门)
  uint8_t gateState[15] = {
    C4002_ENABLE, C4002_ENABLE, C4002_ENABLE,C4002_ENABLE, C4002_ENABLE,
    C4002_ENABLE, C4002_ENABLE, C4002_ENABLE,C4002_ENABLE, C4002_ENABLE,
    C4002_ENABLE, C4002_ENABLE, C4002_ENABLE,C4002_ENABLE, C4002_ENABLE
  };
  c4002.configureGate(eMotionDistGate,gateState);    // 运动距离门
  c4002.configureGate(ePresenceDistGate, gateState);   // 存在距离门
  
  // 7. 设置目标消失延迟时间(单位:秒)
  // 防止短暂信号丢失导致设备频繁开关
  c4002.setTargetDisappearDelay(1);
  
  // 8. 设置数据上报周期(单位:0.1秒)
  // 10 = 1秒上报一次数据
  c4002.setReportPeriod(10);
五、Arduino 测试程序开发
5.1 基础测试:获取所有检测结果
以下是一个完整的测试程序,用于读取 C4002 的所有检测数据并通过串口输出:
#include"DFRobot_C4002.h"
// ESP32-S3 配置
DFRobot_C4002c4002(&Serial1, 115200, D6, D5);
void setup() {
  Serial.begin(115200);
  
  // 初始化传感器
  while (c4002.begin() != true) {
    Serial.println("C4002 beginfailed!");
    delay(1000);
  }
  Serial.println("C4002 beginsuccess!");
  delay(50);
  
  // 配置传感器参数
  c4002.setResolutionMode(eResolution80Cm);
  delay(50);
  c4002.setDetectRange(0, 1100);  // 0~11米
  delay(50);
  c4002.setLightThresh(0);
  delay(50);
  
  // 启用所有距离门
  uint8_t gateState[15];
  for (int i = 0; i < 15; i++) gateState= C4002_ENABLE;
  c4002.configureGate(eMotionDistGate,gateState);
  delay(50);
  c4002.configureGate(ePresenceDistGate,gateState);
  delay(50);
  
  c4002.setTargetDisappearDelay(1);  // 消失延迟1秒
  delay(50);
  c4002.setReportPeriod(10);         // 1秒上报一次
  
  Serial.println("Setup complete! Waitingfor detection...");
}
void loop() {
  // 获取传感器检测结果
  sRetResult_t retResult = c4002.getNoteInfo();
  
  // 只有返回类型为 eResult 时表示有有效数据
  if (retResult.noteType == eResult) {
    Serial.println("======= 检测结果 =======");
   
    // 1. 环境光强度
    float light = c4002.getLightIntensity();
    Serial.print("环境光: ");
    Serial.print(light);
    Serial.println(" lux");
   
    // 2. 目标状态
    eTargetState_t targetState =c4002.getTargetState();
    Serial.print("目标状态: ");
    if (targetState == eNoTarget) {
      Serial.println("无目标");
    } else if (targetState == ePresence) {
      Serial.println("静态存在");
    } else if (targetState == eMotion) {
      Serial.println("运动目标");
    }
   
    // 3. 静态存在目标信息
    sPresenceTarget_t presenceTarget =c4002.getPresenceTargetInfo();
    Serial.print("存在距离: ");
    Serial.print(presenceTarget.distance);
    Serial.println(" m");
    Serial.print("存在能量: ");
    Serial.println(presenceTarget.energy);
   
    // 4. 运动目标信息
    sMotionTarget_t motionTarget =c4002.getMotionTargetInfo();
    Serial.print("运动距离: ");
    Serial.print(motionTarget.distance);
    Serial.println(" m");
    Serial.print("运动能量: ");
    Serial.println(motionTarget.energy);
    Serial.print("运动速度: ");
    Serial.print(motionTarget.speed);
    Serial.println(" m/s");
    Serial.print("运动方向: ");
    if (motionTarget.direction == eAway) {
      Serial.println("远离");
    } else if (motionTarget.direction ==eNoDirection) {
      Serial.println("无方向");
    } else if (motionTarget.direction ==eApproaching) {
      Serial.println("靠近");
    }
   
   Serial.println("========================");
  }
  
  delay(50);
}
5.2 实战应用:人体感应灯
以下是一个实用的示例——当检测到有人时点亮 LED 灯,人离开后自动熄灭:
#include"DFRobot_C4002.h"
#define LED_PIN4  // LED 控制引脚
DFRobot_C4002c4002(&Serial1, 115200, D6, D5);
void setup() {
  Serial.begin(115200);
  
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);  // 初始熄灭
  
  // 初始化传感器
  while (c4002.begin() != true) {
    Serial.println("C4002 beginfailed!");
    delay(1000);
  }
  Serial.println("C4002 beginsuccess!");
  
  // 配置参数
  c4002.setResolutionMode(eResolution80Cm);
  c4002.setDetectRange(0, 500);  // 检测范围 0~5米
  c4002.setTargetDisappearDelay(5);  // 人走后5秒关灯
  c4002.setReportPeriod(5);  // 0.5秒上报一次
  
  Serial.println("人体感应灯已启动!");
}
void loop() {
  sRetResult_t retResult = c4002.getNoteInfo();
  
  if (retResult.noteType == eResult) {
    eTargetState_t targetState =c4002.getTargetState();
   
    if (targetState == eNoTarget) {
      digitalWrite(LED_PIN, LOW);  // 无人 → 关灯
    } else {
      digitalWrite(LED_PIN, HIGH);  // 有人 → 开灯
    }
  }
  
  delay(50);
}
5.3 烧录与测试步骤
1. 选择开发板:工具 → 开发板 →ESP32 Arduino → 选择对应的 ESP32-S3 型号
2. 选择端口:工具 → 端口 → 选择开发板对应的 COM 口
3. 上传程序:点击 Arduino IDE 右上角的"上传"按钮(→)
4. 打开串口监视器:工具 → 串口监视器,波特率设置为 115200
5. 观察输出:
   - 正常情况下会看到 "C4002 begin success!"
   - 当有人在检测范围内时,目标状态会变为"运动目标"或"静态存在"
   - 人离开后,经过设定的延迟时间,状态变为"无目标"
5.4 调试技巧
首次使用建议:先运行官方的 getAllResults.ino 示例,确认模块正常工作
检测距离不够:检查是否被金属物体遮挡,调整安装角度
误报频繁:执行环境底噪校准,或适当提高检测灵敏度阈值
漏检静态目标:确保模块安装位置正确,人体在 120° 探测角度范围内
串口无输出:检查 TX/RX 是否接反,确认波特率是否为 115200
六、测试试用总结
DFRobot C4002 毫米波人体存在模块是一款性价比很高的 24GHz 毫米波雷达传感器,它彻底解决了传统 PIR 传感器无法检测静止人体的痛点。
它的主要特点有能真正的"人体存在"检测,静止不动也能检测到,探测范围广(10米×10米,120°视角)。数据维度丰富,支持距离、速度、方向等多参数输出,官方库完善,Arduino 开发上手简单,抗干扰能力强,误报率低,体积小巧,易于集成
它的不足之处,或者说期待有的功能,作为毫米波雷达,只支持静态存在检测实在没有发挥出毫米波雷达的优势。应该增加支持,人员位置角度,运动速度,甚至人体姿态等信息的感应,当然这不是一收一发的毫米波雷达能实现的,但公国增加收发天线和设计,这是能够实现的。
总之,对于这么一款传感器,智能照明(人来灯亮、人走灯灭),安防监控(闯入检测、滞留检测),健康看护(老人久坐、异常静止监测)等场景是很好的解决方案。它在对于想要打造真正"无感智能"家居系统的开发者来说,C4002 是一款值得入手的核心传感器——它不仅价格亲民,而且功能强大、开发友好,能够快速实现从原型到产品的验证。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail