【Beetle RP2350】雷达模块 CEM5861G-M11 开发使用指南
一、硬件介绍
1、产品特点
Beetle RP2350【RP2350A_QFN60】是一款基于RP2350微控制器的高性能迷你开发板,双核双架构设计(支持 Arm Cortex-M33或Hazard3 RISC-V内核)为开发者提供灵活的性能配置。
双核双架构,性能自由切换
- 采用Raspberry Pi RP2350高性能微控制器,支持Arm Cortex-M33或Hazard3 RISC-V内核选择。
- 主频高达150MHz,配备520KB RAM和2MB Flash,可高效处理大量数据,满足高性能计算需求。
高度集成,硬币大小
- 尺寸仅为25mm x 20.5mm,相当于一枚硬币大小,适合空间受限的应用场景。
- 提供 11个IO接口、BAT接口和3.3V电源接口,满足多样化连接需求。
锂电池管理与监测
集成 锂电池充电管理 和 电池电压监测 功能,支持实时电量监控,确保设备在低电量时及时采取措施,确保持续运行。
易于编程与集成
- 支持 C/C++ 和 MicroPython 编程
2、功能引脚示意图 / 原理图
板载LED灯
IO25引脚控制
充电指示灯
指示充电状态的绿色LED灯
通过三种方式指示充电状态:
1、充满电或未接入电源时熄灭;
2、充电时常亮;
3、USB供电,未连接锂电池时高频闪烁;
用户按键
使用QSPI_SS引脚控制该按钮
引脚号 | 数字口 | 模拟口 | UART | I2C | SPI | 其它 |
---|---|---|---|---|---|---|
0 | D0 | TX1 | ||||
1 | D1 | RX1 | ||||
4 | D4 | SDA | ||||
5 | D5 | SCL | ||||
8 | D8 | TX2 | ||||
9 | D9 | RX2 | ||||
16 | D16 | SPI0/MISO | ||||
18 | D18 | SPI0/SCK | ||||
19 | D19 | SPI0/MOSI | ||||
26 | D26 | A0 | ||||
27 | D27 | A1 | ||||
BAT | 锂电池输入接口,IO29为电池电压检测引脚 | |||||
GND | 接地引脚 | |||||
VCC | 该引脚接在USB电源引脚,作为输出时电压为USB电压,通常为5V | |||||
3V3 | 3.3V稳压电源输出 |
主要原理图:
3、外部硬件
1、雷达模块【CEM5861G-M11】
CEM5816G-M11 是一款高灵敏度 24GHz 毫米波 FMCW 人体存在检测雷达模块;
本模块主要特点是在传统人体感应雷达的功能基础上,同时具备检测人体呼吸等微小幅度的运动,来判断人体存在的功能;
模块采用 FMCW 调制,可以同时输出目标的距离。
模块可选带光敏,用户可根据环境光大小,对光敏门限进行设置;
在光照充足时关闭雷达,光照黑暗时开启雷达,实现照明感应的应用;
系统框架
特性:
参数 | 典型值 |
---|---|
频率 | 24G-24.25GHz |
调制方式 | FMCW |
范围 | 挂高安装:挂高 3m,静止人体检测半径 3m (可调), 移动检测半径 6m max(可调) 水平安装:直线 7 米运动检测,4 米存在检测 |
供电 | 3.6 - 5.5V |
电流 | 22mA(平均值),80mA(峰值) |
输出串口电平 | TTL(3.3V) |
检测周期 | 实时 |
数据格式 | UART |
引脚定义
序号 | 功能 | 备注 |
---|---|---|
1 | OUT | 有人输出高电平 3.3V,无人输出低电平 0V |
2 | UART_TX | 串口发送 |
3 | UART_RX | 串口接收 |
4 | GND | 地 |
5 | VCC | 供电 3.6 ~ 5.5V |
数据格式说明
所有多字节参数,均采用大端格式传输
数据格式 | 说明 |
---|---|
帧头(2 字节) | 上位机发送,雷达接收: 0x55 0x5A 雷达发送,上位机接收: 0x55 0xA5 |
数据长度(2 字节,高字节在前,低字节在后) | 长度 = 功能码 + 命令码 + 数据 + 校验和 |
功能码(1 字节) | 读:0x0 写:0x1 被动上报:0x2 主动上报:0x3 读 / 写命令为上位机向雷达发送指令 上报命令为雷达向上位机发送信息 |
命令码(2 字节) | 命令码1:为功能分类 命令码2:表示具体功能 |
数据 | N字节 |
校验和(1 字节) | 为校验和之前所有数据按 uint8_t 格式相加之和的 低8位。 |
1、上位机接收到雷达发送的数据
例:55 A5 00 0E 03 81 00 00 01 00 5E 00 00 00 00 01 78 64
55 A5 00 0E 03 CMD[1] CMD[2] Data[0] ~ Data[9] SUM
帧头(55 A5):上位机接收到雷达发送的数据;
数据长度(0x0E / 14):功能码(1) + 命令码(2) + 数据(10) + 校验和(1);
功能码(0x03):主动上报;
命令码(81 00)
数据:检测到运动目标,目标距离为 0.94 米,信号强度为 376
目标 ID:0x00
运动状态:0x01(检测到运动目标)
目标距离:0x00 0x5E(转换成十进制为:94cm)
速度 / 方位角度 / 俯仰角度:0
目标信号强度:0x01 0x78(转换成十进制为:376)
校验和:0x64(转换成十进制为:100)
2、Data 数据说明
Data[0] | 说明 |
---|---|
Data[0] | 目标ID号:8位无符号整型 |
Data[1] | 目标状态:8位无符号整型; 0:无目标;1:表示移动;2:表示存在 |
Data[2]、Data[3] | 距离:16位无符号整型(cm) |
Data[4]、Data[5] | 速度:16位有符号整型(cm/s) |
Data[6] | 方位角度:8位有符号整型(°度) |
Data[7] | 俯仰角度:8位有符号整型(°度) |
Data[8]、Data[9] | 信号强度:16位无符号整型 |
雷达功能参数配置
16 进制收发,支持在线修改和保存参数:
波特率:115200、字宽: 8、停止位: 1、奇偶校验: none
使用串口工具(USB-TTL)连接至模块,并打开串口调试工具,可进行以下功能的配置;
参数功能 | 读取指令 |
---|---|
OTA 在线升级 | 发送:55 5A 00 04 01 20 01 D5 接收:55 A5 00 04 02 20 01 21 |
恢复到默认参数 | 发送:55 5A 00 04 01 20 02 D6 接收:55 A5 00 04 02 20 02 22 |
将所有参数保存到 flash 中 | 发送:55 5A 00 04 01 20 04 D8 接收:55 A5 00 04 02 20 04 24 |
获取软件版本号 | 发送:55 5A 00 04 00 00 01 B4 接收:55 A5 00 11 02 00 01 DATA1~DATA13 SUM |
1米内运动检测阈值(默认值:200) | 读取:55 5A 00 04 00 80 03 36 设置:55 5A 00 06 01 80 03 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 03 DATA1 DATA2 SUM |
1米外运动检测阈值(默认值:120) | 读取:55 5A 00 04 00 80 04 37 设置:55 5A 00 06 01 80 04 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 04 DATA1 DATA2 SUM |
1米内存在检测阈值(默认值:300) | 读取:55 5A 00 04 00 80 09 3C 设置:55 5A 00 06 01 80 09 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 09 DATA1 DATA2 SUM |
1米外存在检测阈值(默认值:300) | 读取:55 5A 00 04 00 80 0A 3D 设置:55 5A 00 06 01 80 0A DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0A DATA1 DATA2 SUM |
最小检测距离(默认值 10cm) | 读取:55 5A 00 04 00 80 0C 3F 设置:55 5A 00 06 01 80 0C DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0C DATA1 DATA2 SUM |
运动最大检测距离(默认值 :600cm) | 读取:55 5A 00 04 00 80 0D 40 设置:55 5A 00 06 01 80 0D DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0D DATA1 DATA2 SUM |
存在最大检测距离(默认值: 450cm) | 读取:55 5A 00 04 00 80 0E 41 设置:55 5A 00 06 01 80 0E DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0E DATA1 DATA2 SUM |
VO输出电平维持时间(默认值: 20000ms) | 读取:55 5A 00 04 00 80 14 47 设置:55 5A 00 06 01 80 14 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 14 DATA1 DATA2 SUM |
VO指示模式(0x00:高电平指示有人;0x01:低电平指示无人) | 读取:55 5A 00 04 00 80 15 48 设置:55 5A 00 05 01 80 15 DATA1 SUM 接收:55 A5 00 05 02 80 15 DATA1 SUM |
停止串口发送数据 | 设置:55 5A 00 05 01 80 11 00 46 接收:55 A5 00 05 02 80 11 00 01 |
开启串口发送数据 | 设置:55 5A 00 05 01 80 11 01 47 接收:55 A5 00 05 02 80 11 01 01 |
串口数据间隔时间(10ms / 以10倍率设置) | 读取:55 5A 00 04 00 20 06 D9 设置:55 5A 00 06 01 20 06 DATA1 DATA2 SUM 接收:55 A5 00 06 02 20 06 DATA1 DATA2 00 |
设置雷达参数
例: 雷达的移动感应距离设置为 5 米,存在距离 4 米,感应后输出高电平延时时间 5 秒
设置完成后,发送指令 55 5A 00 04 01 20 04 D8 进行保存,否则掉电会失效。
1、运动最大检测距离
串口发送:55 5A 00 06 01 80 0D 01 F4 38
串口返回信息:55 A5 00 06 02 80 0D 01 F4 84,表示移动检测距离已设置为 5 米
2、存在最大检测距离
串口发送:55 5A 00 06 01 80 0E 01 90 D5。
串口返回信息:55 A5 00 06 02 80 0E 01 90 21,表示存在检测距离已设置为 4 米
3、VO输出电平维持时间
串口发送:55 5A 00 06 01 80 14 13 88 E5。
串口返回信息:55 A5 00 06 02 80 14 13 88 31,表示感应输出高电平维持时间设置为 5 秒
上位机使用
上位机软件下载
1、连接好模块后,点击串口检测—串口选择—打开串口,此时显示界面会显示距离值及状态。
2、点击设置界面窗口,进入参数设置界面。可对模块的灵敏度,检测距离,串口延时,IO 延时等做配 置,在指令框中直接输入数值并点击写,即可修改模块参数。
灵敏度设置栏中,近距离运动/存在灵 敏度对应 1 米内设置,中距离运动 / 存在灵敏度对应 1 米外设置,修改完参数后点击保存按钮进行保存。
3、点击距离统计窗口,会实时显示距离及信号强度曲线。距离统计窗口上方曲线是实时距离曲线,红
色曲线代表静止目标的距离,绿色曲线代表运动目标的距离。
下方窗口显示的是实时信号强度曲线,红色曲线代表静止目标的能量值,绿色曲线代表运动目标的能量值
2、喇叭模块【GSPK2307P-8R1W】
项目 | 规格 | 条件 |
---|---|---|
额定阻抗 | 8 Ohm±15% | 1kHz 1.0 V |
额定输入功率 | 0.5W | 2.0 V |
最大输入功率 | 1.0W | 2.0V |
最低共振频率 | 1700±20% Hz | 1.0 V Input |
灵敏度 | 88±3dB | 0.1m 0.1W |
有效频率范围 | F0~20KHz | - |
谐波失真 | ≤5% at 1kHz | - |
二、硬件连接
模块与开发板引脚之间的连接方式如下:
RP2350开发板 | VCC | GND | TX2 | RX2 | A1 | A0 |
---|---|---|---|---|---|---|
雷达模块 | VCC | GND | RX | TX | - | - |
喇叭模块 | - | GND | - | - | VCC | - |
LED模块 | - | GND | - | - | - | VCC |
实物效果搭建如下:
三、项目功能实现思想
【人体运动感应警报系统】
实现效果:
实时检测判断人体运动 / 静止状态等相关信息;
处于运动时,输出此时的距离相关信息,并在不同距离范围内时,触发不同的警报效果;
处于静止时,绿色LED亮起,直到重新处于运动状态时才熄灭;
上位机串口输出相关数据信息;
四、功能实现主要步骤
主要相关代码
1、LED控制部分
#define LED_Pin A0
bool ledState = false; void Led_Control(){ledState = true;Count = 0;
}...if(ledState) digitalWrite(LED_Pin, HIGH);
elsedigitalWrite(LED_Pin, LOW);
2、警报声音控制部分
#define Sound_Pin A1
bool soundState = false;
static unsigned long Stop = 0;// 在不同范围内 触发不同警报声音 1s
void Sound_Control(){if(soundState){if(dis <=200){ // 2米内tone(Sound_Pin, 1500); // 1.5 kHz}else if(dis > 200 && dis <=400){ // 2~4mtone(Sound_Pin, 1000); }else if(dis >400){ //4米外noTone(Sound_Pin);}}else{noTone(Sound_Pin);}if(millis() - Stop > 1000){Stop = millis();soundState = !soundState;}
}
3、雷达控制部分
#define COUNT 10 static byte buffer[18]; //存储数据
static byte Count = 0;
static uint16_t dis; //距离//雷达数据处理函数
void Radar_Control(){//数据处理if(Serial2.available()){int header = Serial2.read();// 数据 18byteif(header == 0x55){int len = Serial2.readBytes(buffer,17);// 逐个字节 打印十六进制格式数据//A5 00 0E 03 81 00 00 02 00 67 00 00 00 00 25 B0 32 (17byte)for (int i = 0; i < len; i++) {if (buffer[i] < 0x10) Serial.print("0");Serial.print(buffer[i], HEX);Serial.print(" ");}Serial.println();//打印运动状态if(buffer[7] == 0x01){Serial.print("处于运动状态 ");if(Count>0){Count = 0;ledState = false;}}else{Serial.print("处于静止状态 ");Count++;//超过统计次数时 点亮LEDif(Count >= COUNT) Led_Control(); }//打印当前距离 cmdis = (buffer[8] << 8) | (buffer[9] & 0XFF);Serial.printf("当前距离为: %dcm\r\n",dis);Serial.println();Sound_Control();}}
}
完整代码
#define LED_Pin A0
#define Sound_Pin A1
#define COUNT 10 bool ledState = false;
bool soundState = false;static unsigned long Stop = 0;
static byte buffer[18]; //存储数据
static byte Count = 0;
static uint16_t dis; //距离void Led_Control(){ledState = true;Count = 0;
}// 在不同范围内 触发不同警报声音 1s
void Sound_Control(){if(soundState){if(dis <=200){ // 2米内tone(Sound_Pin, 1500); // 1.5 kHz}else if(dis > 200 && dis <=400){ // 2~4mtone(Sound_Pin, 1000); }else if(dis >400){ //4米外noTone(Sound_Pin);}}else{noTone(Sound_Pin);}if(millis() - Stop > 1000){Stop = millis();soundState = !soundState;}
}//雷达数据处理函数
void Radar_Control(){//数据处理if(Serial2.available()){int header = Serial2.read();// 数据 18byteif(header == 0x55){int len = Serial2.readBytes(buffer,17);// 逐个字节 打印十六进制格式数据//A5 00 0E 03 81 00 00 02 00 67 00 00 00 00 25 B0 32 (17byte)for (int i = 0; i < len; i++) {if (buffer[i] < 0x10) Serial.print("0");Serial.print(buffer[i], HEX);Serial.print(" ");}Serial.println();//打印运动状态if(buffer[7] == 0x01){Serial.print("处于运动状态 ");if(Count>0){Count = 0;ledState = false;}}else{Serial.print("处于静止状态 ");Count++;//超过统计次数时 点亮LEDif(Count >= COUNT) Led_Control(); }//打印当前距离 cmdis = (buffer[8] << 8) | (buffer[9] & 0XFF);Serial.printf("当前距离为: %dcm\r\n",dis);Serial.println();Sound_Control();}}
}void setup() {//串口初始化Serial.begin(115200);Serial2.begin(115200);while (!Serial);pinMode(Sound_Pin, OUTPUT);pinMode(LED_Pin, OUTPUT);analogWrite(Sound_Pin,0);analogWrite(LED_Pin,0);}void loop() {Radar_Control();if(ledState) digitalWrite(LED_Pin, HIGH);elsedigitalWrite(LED_Pin, LOW);
}
五、实现现象
上位机串口打印距离、运动状态等相关信息,并处于不同距离范围内时,触发不同的警报声音效果;
处于静止时,LED点亮,重新处于运动时,LED熄灭;