文章目录1. 测试目的2. 硬件准备3. 硬件连接4. Python 环境准备5. 测试程序说明6. 运行方法7. 串口输出示例8. 实时绘图结果8.1 距离-时间曲线8.2 速度-时间曲线8.3 距离门热力图9. 测试结果分析10. 关于轨迹跟踪的说明11. 小结1. 测试目的DFRobot C4002 是一款 24GHz 毫米波人体存在传感器支持运动人体、静止/微动人体检测并可以通过 UART 输出目标状态、距离、速度、方向、能量、环境光和距离门信息。前面已经完成了 C4002 的接口协议整理和嵌入式端接线说明。本文重点记录一种更直接的测试方式不接开发板直接使用 USB-TTL 串口模块把 C4002 接到 PC通过 Python 程序读取串口数据并实时绘制距离-时间曲线速度-时间曲线距离门热力图目标状态、环境光、运动方向等调试信息。这种方法适合在正式接入单片机或开发板之前先验证传感器工作状态、观察检测范围和分析安装位置是否合适。2. 硬件准备本次测试使用的硬件如下硬件说明DFRobot C4002毫米波人体存在传感器USB-TTL 串口模块连接 PC 和 C4002杜邦线用于连接 VIN、GND、TX、RXWindows PC运行 Python 测试程序C4002 默认 UART 波特率为115200。3. 硬件连接USB-TTL 串口模块与 C4002 的连接如下C4002 引脚USB-TTL 串口模块说明VIN5VC4002 工作电压为 3.6V~5.5VGNDGND必须共地TXRXC4002 发送数据到 PCRXTXPC 向 C4002 发送配置命令串口连接需要交叉C4002_TX - USB-TTL_RX C4002_RX - USB-TTL_TX C4002_GND - USB-TTL_GND C4002_VIN - USB-TTL_5V注意这里使用的是 TTL 串口不是 RS232 电平串口。如果 USB-TTL 模块支持 3.3V/5V 电平切换应根据模块实际 IO 电平选择安全配置。4. Python 环境准备测试程序依赖 3 个 Python 库python-m pip install pyserial matplotlib numpy其中pyserial用于打开 COM 串口matplotlib用于实时绘图numpy用于处理距离门热力图矩阵。本次测试中C4002 被识别为COM3。5. 测试程序说明测试脚本文件名为c4002_pc_monitor.py程序主要完成以下工作打开COM3串口按 C4002 的 UART 帧格式查找帧头FA F5 AA A5校验帧长度和校验和解析检测结果通知帧输出当前目标状态、光照、距离、速度、方向和距离门 bitmask使用 matplotlib 实时绘制距离、速度和距离门热力图。程序解析的核心数据包括字段含义target_status目标状态例如无人、存在、运动light_lux环境光强单位 luxpresence_gate_mask存在目标距离门 bitmaskpresence_distance_m静止/存在目标距离单位 mpresence_energy静止/存在目标能量motion_distance_m运动目标距离单位 mmotion_speed_mps运动目标速度单位 m/smotion_energy运动目标能量motion_direction运动方向例如靠近、远离或无方向6. 运行方法实时绘图运行python c4002_pc_monitor.py--port COM3如果只想在命令行中快速验证串口数据可以使用无绘图模式python c4002_pc_monitor.py--port COM3--no-plot--duration 8程序启动后会先设置 C4002 的上报周期Set report period: 5 x 0.1s也就是每 0.5 秒上报一次结果。7. 串口输出示例本次测试中命令行输出示例如下Opened COM3, baud115200 Set report period: 5 x 0.1s Response: cmd0x83, success, len4 [ 0.51s] statePresence light52.5lux presence: distance1.43m energy99 motion: distance0.95m speed0.01m/s energy69 directionNo direction gate_mask0x0000001E [ 1.01s] statePresence light52.5lux presence: distance1.42m energy99 motion: distance0.95m speed0.00m/s energy99 directionNo direction gate_mask0x0000001E [ 1.51s] statePresence light52.5lux presence: distance1.49m energy99 motion: distance1.00m speed0.03m/s energy42 directionNo direction gate_mask0x0000001E从输出可以看到串口打开成功设置上报周期命令返回成功当前状态为Presence说明检测到了静止或微动人体环境光约为52.5 lux存在目标距离约为1.4m~1.5m运动速度接近0m/s符合静止/微动场景距离门 bitmask 为0x0000001E。0x0000001E转为二进制后对应低位的多个距离门被置位说明传感器在多个相邻距离门上检测到了存在响应。8. 实时绘图结果本次测试截图如下图中包含三部分8.1 距离-时间曲线第一幅图是距离随时间变化的曲线蓝色曲线Presence distance表示静止/存在目标距离红色曲线Motion distance表示运动目标距离。从截图可以看到目标距离主要集中在约1m~2m区间说明人体目标位于传感器前方较近位置。蓝色和红色曲线有一定波动这是毫米波雷达在人体微动、姿态变化、反射能量变化时的正常现象。8.2 速度-时间曲线第二幅图是运动速度随时间变化的曲线。截图中速度基本围绕0m/s附近波动说明测试期间人体整体处于静止或微动状态。如果人明显靠近或远离传感器该曲线会出现更明显的正负变化。这里需要注意C4002 输出的是径向速度也就是沿着传感器朝向方向的速度。人从左向右横向移动时速度曲线可能不会像靠近/远离那样明显。8.3 距离门热力图第三幅图是存在目标距离门热力图。横轴是距离门编号颜色越深表示该距离门被检测为存在目标。从截图可以看到低编号距离门中有一段连续区域颜色较深说明传感器在对应距离范围内检测到了人体存在。距离门并不等价于人数。一个距离门中可能有一个人也可能有多个人多个距离门被置位也可能只是同一个人体在多个相邻距离门中产生反射。因此C4002 更适合做人体存在检测而不是多人计数或多人轨迹跟踪。9. 测试结果分析根据本次测试结果可以得到以下结论测试项结果COM3 串口通信正常上报周期配置成功目标状态输出正常环境光输出正常静止/存在距离输出正常运动距离输出正常运动速度输出正常距离门 bitmask 输出正常PC 实时绘图正常本次测试时传感器能够稳定检测到前方人体存在距离数据集中在1m~2m范围速度接近0m/s与实际静止/微动场景相符。10. 关于轨迹跟踪的说明使用 PC 串口测试可以实现“一维轨迹”观察也就是时间 - 距离 时间 - 速度 时间 - 距离门变化这种方式可以观察人靠近、远离传感器的过程但不能实现真正的二维平面轨迹跟踪。原因是 C4002 当前公开输出的数据中没有水平角度、俯仰角、目标 ID 或点云数据。因此单人靠近/远离趋势可以观察单人距离随时间变化可以绘制多个距离门响应可以显示多人区分不可靠多人轨迹跟踪不适合。如果项目目标是多人定位或二维轨迹跟踪应选择支持点云、角度、目标 ID 和 track list 输出的毫米波雷达模块。11. 小结通过 USB-TTL 串口把 C4002 直接连接到 PC可以快速完成传感器功能验证。本文的 Python 程序能够实时读取 C4002 的 UART 数据并绘制距离、速度和距离门热力图对调试安装位置、检测范围、目标状态和环境干扰非常有帮助。从测试结果看C4002 适合用于智能灯、人体存在检测、房间有人/无人判断等场景。它可以提供比普通 PIR 更丰富的距离、速度和静止人体检测信息但不适合直接承担多人识别或二维轨迹跟踪任务。参考资料DFRobot C4002 Wikihttps://wiki.dfrobot.com.cn/SKU_SEN0691_C4002%20mmWave%20Motion%20and%20Static%20Presence%20ModuleDFRobot_C4002 Arduino 库https://github.com/DFRobot/DFRobot_C4002