一、硬件介绍
1、开发板
STM32F103C8T6蓝色开发板, 搭载Cortex-M3内核,Flash 64KB, RAM 20KB,最高72MHz主频;
引脚图

2、雷达模块
CEM5881-M11是一款小尺寸24GHz毫米波目标运动检测雷达模块,可以探测到目标的速度和靠近 / 远离方向(此功能为双路运放硬件版本,IQ两路中频时,多普勒可做靠近远离方向的识别),可以通过运动能量值来估算运动范围;

特性
| 参数 | 典型值 |
|---|---|
| 频率 | 24G-24.25GHz |
| 调制方式 | CW |
| 检测距离 | 运动检测直线>8m |
| 供电 | 3.6-5V |
| 电流 | 70mA |
| 输出串口电平 | 3.3V |
| 检测周期 | 实时 |
| 数据格式 | 串口输出 ASCII / 高低电平 |
引脚定义
管脚为2mm间距接口;
(可使用2mm转2.54mm杜邦线)
| 管脚 | 名称 | 备注 |
|---|---|---|
| 1 | VCC | 电源5V供电 |
| 2 | GND | 接地 |
| 3 | UTX | 串口发送 / 感应输出管脚 |
| 4 | URX | 串口接收 |
功能配置指令
波特率 115200,8 位数据位,1 位停止位,校验位和流控为 None;
接收设置选 ASCII,发送设置选 ASCII;
save:保存参数设置。如果不发送 save,则掉电失效;
VER:读取版本号;
get_all:模块输出当前参数设置;
所有指令带回车换行发送有效
1、微动检测灵敏度
ThNormal=,设置微动检测灵敏度(整数设置) 默认配置=80;
值越大,模块越不灵敏,感应距离及范围就越小 (若不需要检测微动,可将参数设置较大的数值)
2、运动检测灵敏度
ThIn=,设置运动检测灵敏度(整数设置) 默认配置=85;
值越大,模块越不灵敏,感应距离及范围就越小
3、微动检测概率
EffNormal=,设置微动检测概率,默认值为 0 (该值不要大于100)
该值越大,触发模块需要的动作持续时间就越长;
对于短暂的抖动,可通过将该值增加来滤除瞬时的抖动震动等动作,代价是牺牲触发灵敏度
4、运动检测概率
EffIn=,设置运动检测概率,默认值为 10 (建议按默认值,无需设置)
5、输出模式切换
usart2led=,串口模式与IO模式输出转换 (默认usart2led=0)
usart2led=1:切换到IO输出;
此模式下,TX口配置为IO口,以高低电平指示目标检测结果;
(在IO输出模式下无法输出字符串信息)
指令 usart2led=0:切换到串口显示 (串口输出ASCII)
6、高电平持续时间(IO 模式)
led_ton=,当TX配置为IO模式输出时,该指令用于配置输出高电平持续时间;
单位 ms,默认 led_ton=2000ms;
当雷达模块感应到有目标移动时,TX口输出高电平,默认高电平维持时间 2 秒

数据格式解析
在串口显示模式下,输出的字符串中:v代表目标速度,负号-代表目标远离雷达,速度不带负号则代表目标靠近雷达;
(判断目标是靠近还是远离)
str代表反射信号强度;

二、硬件连接
模块与开发板之间的引脚连接方式如下:
| 开发板 | VCC | GND | RX(PA10) |
|---|---|---|---|
| 雷达模块 | VCC | GND | TX |
实物效果搭建如下

三、代码编写(Arduino IDE)
功能效果:当雷达模块检测到目标运动时,板载的LED点亮,同时串口输出相关的运动信息等;
当检测不到运动目标时,LED熄灭;
主要相关代码
c
void setup() {
Serial.begin(115200);
while(!Serial);
pinMode(LED_BUILTIN, OUTPUT); // 板载LED
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
if (Serial.available() > 0) {
String receiveData = Serial.readStringUntil('\n');
int startIndex = receiveData.indexOf("v=") + 2; // 找到v=
int endIndex = receiveData.indexOf(" km/h"); // 找到 km/h
String speedStr = receiveData.substring(startIndex, endIndex);
float speed_old = speedStr.toFloat(); // km/h
float speed_new = speed_old / 3.6; // m/s
if(speed_new<0) { // 远离时
float speed = fabs(speed_new);
Serial.printf("目标正在以 %.2f m/s 的速度远离\n", speed);
}
else if(speed_new>0){ // 靠近时
Serial.printf("目标正在以 %.2f m/s 的速度靠近\n", speed_new);
}
digitalWrite(LED_BUILTIN, HIGH);
}else{ // 无目标时 熄灭LED
digitalWrite(LED_BUILTIN, LOW);
}
delay(300);
}
四、效果演示
上位机串口打印目标运动的相关信息,同时板载的LED点亮,当检测不到运动目标时,LED熄灭;
五、雷达模块对比
1、CEM5861G-M11雷达模块
CEM5816G-M11是一款高灵敏度24GHz毫米波FMCW人体存在检测雷达模块,在传统人体感应雷达的功能基础上,同时具备检测人体呼吸等微小幅度的运动,来判断人体存在的功能,可以同时输出目标的距离。
主要可以检测当前运动目标的距离(米)以及可以使用上位机软件进行功能的配置等
2、CEM5881-M11雷达模块
CEM5816G-M11是一款小尺寸24GHz毫米波目标运动检测雷达模块,可以探测到目标靠近 / 远离速度,以及可以通过运动能量值来估算运动范围;
主要可以检测到当前目标靠近 / 远离的速度(km/h)
3、主要区别对比
| 模块 | CEM5861G-M11 | CEM5881-M11 |
|---|---|---|
| 调制方式 | FMCW(调频连续波) | CW(连续波) |
| 核心功能 | 人体存在检测(呼吸级微动)+ 运动检测 | 仅运动检测 |
| 检测距离 | 挂高:静止 3m、移动 6m 水平:运动 7m / 存在 4m | 运动检测直线 >8m |
| 尺寸 | 常规模块,适配标准安装 | 窄条设计,适配 86 盒面板 / 窄边框屏幕 |
| 输出模式 | UART串口输出(含距离、状态、速度等详细数据) | 串口 / IO模式(高低电平输出) |
| 功能 | 可输出目标距离信息 | 可识别目标靠近 / 远离的速度 |
| 功耗 | 平均22mA@5V,峰值 80mA | 平均70mA@5V |