【C4002 毫米波雷达】介绍、环境搭建、工程测试
本文介绍了 DFRobot C4002 毫米波雷达模块的相关信息,包括外观、参数特点等,结合串口通信、树莓派 Pico 和 MicroPython 编程,实现校准、参数配置、打印测量结果等。
介绍
C4002是一款基于24GHz FMCW技术的毫米波雷达模块,专为智能家居场景中需要精准静态人体存在感知的应用而设计。模块突破了传统PIR传感器只能检测大幅运动的局限,可在10x10m的有效检测范围内,同步侦测运动人体与静止(微动)人体,并支持运动速度检测、运动方向识别(靠近/远离)及环境光检测功能。模块具备探测范围可调功能,通过底噪采集智能过滤环境干扰,输出模式灵活可配置,是智能家居产品方案实现真无人感控系统的理想核心部件。
外观
Top view

Bottom view

特点
宽范围多状态检测,支持IO可控输出 凭借10x10m的有效检测范围,C4002可全面覆盖整个房间。无论是行走中的大幅运动,还是静止不动的微动,模块均能检测输出,还可通过OUT接口的可配置输出模式(如存在、运动、静止(微动)状态),直接控制外部设备,确保仅在“真正有人”时运行,提升便利性与节能效率。
智能抗干扰,稳定可靠免调试 模块内置环境底噪采集功能,在新环境中可自动学习并建立背景噪声模型,有效过滤窗帘摆动、空调运行、绿植摇晃等常见干扰,大幅降低误报率,保证系统长期稳定运行。
探测范围灵活可调,适应各种探测场景需求 您可以根据实际应用需要,灵活调节检测范围。无论是大客厅的整体监测,还是小卫生间的定点感知,均可通过调节探测边界智能契合,灵活适应各种空间布局。
开发生态与兼容性 C4002完美兼容 Arduino、ESP32 、树莓派主流开源硬件平台,并可轻松集成至 Home Assistant 智能家居系统。凭借丰富的资源,能够快速实现功能验证与系统集成,极大缩短研发周期。
参数
工作电压:3.6~5.5V
检测能力:运动、微动/静止人体
最大检测距离:运动11m、微动/静止10m
探测角度:120°x120°
输出接口:OUT(可配置IO),UART
工作频率:24GHz~24.25GHz
光线检测:0~50lux
工作温度:-20~85℃
产品尺寸:22mm x 26mm
详见:wiki.dfrobot.com.cn/SKU_SEN0691_C4002 mmWave Motion and Static Presence Module .
硬件连接
C4002 雷达模块与树莓派 Pico 的接线方式如下
| C4002 | Pico | Note |
|---|---|---|
| RX | GP0 (TX0) | Receive |
| TX | GP1 (RX0) | Transmit |
| Out | GP6 | Outpin |
| GND | GND | Ground |
| VIN | 3V3_Out | Power |
实物图

环境搭建
根据官方提供的 Arduino 库文件,设计相应的 MicroPython 代码,dfrobot_c4002.py ,见附件。
安装 Thonny IDE 软件;
树莓派 Pico 烧录官方最新 MicroPython 固件;
整体结构

通信协议

数据读取

详见:Gitee - DFRobot/DFRobot_C4002 .
工程测试
根据官方 Gitee 仓库给出的示例程序,转换为对应的 MicroPython 代码,实现校准、配置打印、获取测量结果等。
自动校准
运行 Thonny IDE 新建 auto_env_calibration.py 文件,添加如下代码
代码见附件。
保存代码。
运行代码,终端打印初始化等信息;

输出校准结果

出厂设置
运行 Thonny IDE 新建 factory_reset.py 文件,添加如下代码;
代码见附件。
运行代码,终端打印恢复出厂设置等信息;

配置信息
运行 Thonny IDE 新建 get_all_configs.py 文件,添加如下代码;
代码见附件。
运行代码,终端打印设备配置信息;

测量结果
运行 Thonny IDE 新建 get_all_results.py 文件,添加如下代码;
代码见附件。
运行代码,终端打印测量结果;
包括光照强度、目标状态、存在距离、存在能量、运动能量、运动速度、运动方向等;

Out引脚
运行 Thonny IDE 新建 get_outpin_result.py 文件,添加如下代码;
代码见附件。
运行代码,终端打印 Out 引脚电平状态,目标存在状态等;

总结
本文介绍了 DFRobot C4002 毫米波雷达模块的相关信息,包括外观、参数特点等,结合串口通信、树莓派 Pico 和 MicroPython 编程,实现校准、参数配置、打印测量结果等,为相关产品的快速开发和功能测试提供了参考。
"""
autoEnvCalibration - MicroPython equivalent
Perform environmental calibration on DFRobot C4002 sensor.
"""
from dfrobot_c4002 import (
DFRobot_C4002,
ResolutionMode,
DistanceGateType,
LedMode,
NoteType
)
from machine import Pin
import time
def print_door_threshold(gate_data):
"""
打印门阈值数据
Args:
gate_data: 阈值列表
"""
n = len(gate_data)
# 打印索引行
print("Index:\t", end="")
for i in range(n):
print(i + 1, end="\t")
print()
# 打印数值行
print("Value:\t", end="")
for val in gate_data:
print(val, end="\t")
print()
def main():
print("Initializing DFRobot_C4002 mmWave Radar Sensor...")
# --- 初始化传感器 ---
sensor = DFRobot_C4002(uart_id=0, baud=115200, tx_pin=0, rx_pin=1)
# 循环直到初始化成功
while not sensor.begin():
print("C4002 begin failed!")
time.sleep(1)
print("C4002 begin success!")
# --- 打开 Run LED 和 Out LED ---
if sensor.set_run_led_state(LedMode.ON):
print("Set run led success!")
else:
print("Set run led failed!")
time.sleep_ms(50)
if sensor.set_out_led_state(LedMode.ON):
print("Set out led success!")
else:
print("Set out led failed!")
time.sleep_ms(50)
# 等待 3 秒让传感器稳定
print("Waiting 3 seconds for sensor stabilization...")
time.sleep(3)
# --- 设置上报周期为 1 秒(10 * 0.1s = 1s)---
if sensor.set_report_period(10):
print("Set report period success!")
else:
print("Set report period failed!")
# 注意:校准和获取数据必须有设置好的周期
# --- 启动环境校准 ---
# 延迟时间:10 秒,校准时间:30 秒(范围 15-65535 秒)
print("Starting environmental calibration...")
print("Delay time: 10s, Calibration time: 30s")
sensor.start_env_calibration(10, 30)
print("\n=== Environmental calibration started ===")
print("Notes:")
print("1. The calibration process takes about 30 seconds, plus 10 seconds delay")
print("2. Please find an open area for calibration")
print("3. No one should be in front of the sensor during calibration\n")
# ==================== loop 循环 ====================
calibration_complete = False
while True:
# 获取通知信息
note = sensor.get_note_info()
if note['note_type'] == NoteType.CALIBRATION:
countdown = note['calib_countdown']
print(f"Calibration countdown: {countdown} s")
# 校准完成(倒计时为 0)
if countdown == 0 and not calibration_complete:
calibration_complete = True
# 获取分辨率模式
res_mode = sensor.get_resolution_mode()
gate_count = 15 if res_mode == ResolutionMode.RES_80CM else 25
print("\n************ Environmental Calibration Complete ****************")
# 获取运动门阈值
motion_gate_data = sensor.get_distance_gate_thresh(DistanceGateType.MOTION)
if motion_gate_data is not None:
print("Motion distance gate threshold:")
print_door_threshold(motion_gate_data[:gate_count])
else:
print("Get motion distance failed!")
# 获取存在门阈值
presence_gate_data = sensor.get_distance_gate_thresh(DistanceGateType.PRESENCE)
if presence_gate_data is not None:
print("Presence distance gate threshold:")
print_door_threshold(presence_gate_data[:gate_count])
else:
print("Get presence distance failed!")
print("**************************************************************\n")
time.sleep_ms(50)
# 运行主程序
main()
附件

返回首页
回到顶部


评论