60GHz 毫米波传感器 - 跌倒检测模块专业版 (MR60FDA1)

介绍
60GHz 毫米波雷达传感器 - 跌倒检测模块专业版采用 FMCW 检测理论,实现高精度的人体活动同步检测,包括移动、跌倒和静止状态,提供完全私密和安全的环境,不受其他噪声干扰的影响。它是私人财产监控、跌倒预警、老年人健康护理的标准生物雷达系统,在家庭、酒店以及医院中表现出色。在本 wiki 中,我们将向您介绍如何使用它。
应用
- 智能家居
- 健康护理
- 跌倒检测
- 智能酒店
- 医疗助手
特性
- 启用理论:基于 60GHz FM 连续波信号实现雷达检测
- 增强检测算法:在自适应环境中感知并同时输出人体活动,包括移动、跌倒和静止状态
- 完美隐私保护:应用 FMCW 监控技术提供无需身份识别的监控能力
- 健康友好的工作状态:输出功率低至对人体无害
- 高稳定性:不受温度、湿度、噪声、气流、灰尘、光线和其他环境因素影响
- 高测量精度:跌倒检测精度高达 90%,存在感知功能精度高达 90%
- 高灵活性硬件设计雷达:支持二次开发,适应各种场景应用
规格
检测角度和距离 | 最小值 | 典型值 | 最大值 | 单位 |
---|---|---|---|---|
内容 最小值 典型值 最大值 单位 | ||||
人员移动检测半径 [1] | 6 | 米 | ||
跌倒监控半径 [2] | 3 | 米 | ||
雷达检测角度(水平) | 60 | 度 | ||
雷达检测角度(俯仰) | 60 | 度 | ||
注:[1][2] 雷达悬挂高度 2.8 米,雷达投影半径。 | ||||
电气特性 | ||||
工作电压 (VCC) | 4.5 | 5 | 6 | V |
工作电流 (ICC) | 90 | 93 | 100 | mA |
工作温度 (TOP) | -20 | 60 | ℃ | |
存储温度 (TST) | -40 | 80 | ℃ | |
RF 性能 | ||||
工作频率 (fTX) | 58 | 63.5 | GHz | |
发射功率 (Pout) | 6 | dBm |
硬件概述
在开始之前,了解产品的一些基本参数是非常重要的。下表提供了60GHz毫米波传感器 - 跌倒检测专业版模块特性的信息。

- 接口1:
- 5V引脚是传感器的电源接口。
- RX和TX是传感器的数据传输接口。RX表示串行接收,TX表示串行发送。
- 人体存在状态输出接口。您可以使用这两个引脚的电平来判断环境中当前的人体运动状态。
- GP2输出:高电平 - 有人,低电平 - 无人。
- GP1输出:高电平 - 活动,低电平 - 静止。
- 接口2:
- 烧录固件引脚:GND/3.3V/SWD/SWC。
- 预留输入/输出引脚:GP3~GP6。
入门指南
固件版本更新
毫米波传感器经过了长期的技术沉淀和用户提供的宝贵建议,我们一直在对原有产品进行迭代,以提供更准确可靠的监测结果和更好的用户体验。
新出货的传感器默认搭载最新固件,以确保最新的产品体验。但是,为了老用户的体验,我们在此提供最新固件和更新方法,确保您能够使用我们的最新技术。
通用方法 - 使用J-link烧录固件
如果您遇到固件错误或雷达异常、固件故障等问题,使用此方法重新烧录固件是最有效的方式。
最新固件下载
固件版本 | 下载地址 |
---|---|
Jlink_MR60FDA1-V0821.bin | 下载 |
Jlink_MR60FDA1-V0728.bin | 下载 |
Jlink_MR60FDA1-V114.bin | 下载 |
-
请仔细检查您产品的功能,请不要与其他毫米波传感器混用来烧录此固件,否则可能导致产品功能异常,后果需要您自行承担!
-
还请注意,不同的固件更新方式使用不同的固件内容,您下载的是通过J-link烧录的固件。
将您的雷达更新到最新版本
步骤1. 您需要准备一个Jlink和MR60FDA1 60GHz毫米波传感器。
通过杜邦线将雷达和Jlink连接在一起,如下图所示。

步骤2. 下载必要的软件和固件。
文件 | 下载地址 |
---|---|
JlinkV644e.rar | 下载 |
Pack_Segger_AT32F4xx_v1.3.3.zip | 下载 |
步骤3. 解压JlinkV644e.rar并打开其中的JLink_Windows_V644e.exe文件。
按照默认选项安装即可。安装完成后,启动J-Flash V6.44e软件。
步骤4. 安装芯片包。
解压Pack_Segger_AT32F4xx_v1.3.3.zip并打开其中的Segger_AT32F4xx_AddOn.exe。

步骤5. 创建新项目。


找到并选择AT32F403ARGT7。


步骤6. 将雷达固件(.bin文件)拖放到此软件中,会弹出一个窗口,我们使用其默认起始地址0x8000000即可。

步骤7. 点击Target -> Connect

连接成功时会显示Connected successfully。

擦除固件:Target -> manual Programming -> Erase Chip

升级固件:Target -> manual Programming -> Program & Verify

至此,固件更新完成。
通过UART更新固件
考虑到J-link价格昂贵,对于绝大多数只需要更新雷达固件的用户来说,购买J-link过于奢侈,因此我们提供通过UART的更新方法。
最新固件下载
固件版本 | 下载地址 |
---|---|
UART_MR60FDA1-230821.bin | 下载 |
UART_MR60FDA1-230728.bin | 下载 |
UART_MR60FDA1-230227.bin | 下载 |
UART_MR60FDA1-230915.bin | 下载 |
-
请仔细检查您产品的功能,请不要与其他毫米波传感器混用来烧录此固件,否则可能导致产品功能异常,后果需要您自行承担!
-
请注意,不同的固件更新方式使用不同的固件内容,您下载的是通过 UART 烧录的固件。
-
在使用 UART 升级固件之前,请确保您的雷达固件版本至少为 G60FD1SYv010102 版本,否则可能会导致雷达失效,此时您必须使用 J-link 烧录固件才能使用!
您可以通过向雷达发送命令 0x53 0x59 0x02 0xA4 0x00 0x01 0x0F 0x62 0x54 0x43
来查询固件版本号信息。然后雷达上报的数据以字符串形式显示,您将看到类似下图所示的效果。
G60FD1SYv010104
是雷达上报的型号,其中 010104
是版本号。这意味着该传感器支持 UART 升级。

将您的雷达更新到最新版本
步骤 1. 您需要准备一个 UART 转 USB 和 MR60FDA1 60GHz 毫米波传感器。
通过杜邦线将雷达和 UART 转 USB 连接在一起,如下图所示。

步骤 2. 下载必要的软件和固件。
文件 | 下载地址 |
---|---|
PackageMake-v1.1.1.zip | 下载 |
步骤 3. 解压 PackageMake-v1.1.1.zip 包并打开其中的 PackageMake-v1.1.1.exe 文件。
将连接传感器的 UART 转 USB 连接到计算机,点击软件左上角的齿轮图案,选择端口号,将波特率设置为 115200,然后点击右下角确认。(如果找不到端口号,请检查连接,然后点击左下角的刷新按钮重试)

步骤 4. 连接传感器
按照上述方式完成串口设置后,点击右上角第二个图标,如果端口选择正确,您将看到雷达的原始数据被打印出来。

步骤 5. 更新固件
左键点击右上角最后一个图标,这将弹出一个选择固件的窗口。请选择您已下载的固件版本。

选择完成后,所选文件路径将出现在软件下方,请仔细检查所选固件版本和型号是否与您使用的传感器一致。

要升级固件,请左键双击软件左上角的最后一个图标,然后固件将开始下载到传感器。


等待进度条完成,固件更新即完成。
上位机的使用
通过 UART 转 USB 设备将传感器直接连接到计算机的 USB 端口。接线如下表所示。
![]() | |||
UART 转 USB | MR60FDA1 传感器 | ||
5V | --> | 5V | |
GND | --> | GND | |
RX | --> | TX | |
TX | --> | RX |
除了上述提到的串口软件外,您还可以直接使用专为雷达设计的上位机软件。
以下两个部分解释了软件各部分的作用。

-
工作区域
上位机的所有功能仅在工作区域中显示。显示的主要内容集中在工作区的顶部。
Station: 显示是否有人存在、移动或静止。
Fall state: 跌倒状态将以人物动画的形式呈现。图中的状态是无跌倒,如果有人跌倒,将显示人物跌倒的动画图片。
Settings: 用于设置传感器连接到 PC 的端口号。通常,当传感器通过 UART 转 USB 连接到计算机时,您需要点击 Refresh 按钮刷新端口,然后选择新出现的端口号,接着点击 Open 按钮,最后点击 Start 按钮启用监控功能。
安装高度/厘米: 指安装高度。为确保跌倒检测的准确性,请按以下要求准确安装传感器。请安装在顶部!雷达应垂直安装,水平偏差角度≤5°,以确保雷达主波束覆盖检测区域;雷达安装高度建议为2m≤H≤3m。雷达前方无明显障碍物和遮挡物。受雷达安装高度和雷达波束范围影响,此安装模式下运动人体检测的最大半径为R3 ≈ 3米;静止人体检测的最大半径为R2 ≈ 2.25米;跌倒检测半径为R1 ≤ 2米。
例如,如果我的安装高度是2.6米,那么我应该填入260并点击发送按钮。
-
无效区域
此区域目前不起作用,仅作为预留接口。
此雷达目前不支持距离、速度或点云!
使用Arduino进行传感器开发
Arduino库概述
如果这是您第一次使用Arduino,我们强烈建议您参考Arduino入门指南。
本示例中使用的库代码可通过点击下方图标下载。
功能
在开始开发代码之前,让我们先了解一下库的可用功能。
-
void recvRadarBytes()
—— 此函数根据传感器数据协议中的帧头和帧尾,通过UART收集传感器报告的数据帧。与showData()
函数配合使用,可以通过串口打印出收集到的数据信息。-
输入参数: 无
-
返回值: 无
-
-
void showData()
—— 此函数用于通过串口一次性打印出传感器报告的完整数据帧,需要与recvRadarBytes()
函数配合使用。-
输入参数: 无
-
返回值: 无
-
-
void HumanExis_Func()
—— 此函数负责解析传感器的数据帧,并输出人体存在状态的相关数据。-
输入参数: 无
-
返回值:
-
unsigned int sensor_report
—— 返回值表示解析的数据帧属于哪个状态类别。具体类别可在默认变量部分找到。人体运动信息仅在发生变化时报告。 -
int bodysign_val
—— 返回值表示人体运动参数的值。此值每秒报告一次。
-
-
-
void Fall_Detection()
—— 此函数用于解析并返回跌倒检测结果。检测结果存储在变量sensor_report中。-
输入参数: 无
-
返回值: -
unsigned int sensor_report
—— 返回值表示解析的数据帧属于哪个状态类别。具体类别可在默认变量部分找到。跌倒信息仅在发生变化时报告。
-
-
void send_func(const unsigned char* buff, int len, bool cyclic /*=false*/)
—— 此函数用于发送查询帧和命令帧。-
输入参数:
-
buff
—— 您要发送给传感器的数据帧。 -
len
—— 您要发送给传感器的数据帧长度。 -
cyclic
—— 循环发送开关。默认为false,如果您希望循环发送此数据帧,可以设置为true。
-
-
返回值: 无
-
-
void reset_func()
—— 此函数用于重置传感器。-
输入参数: 无
-
返回值: 无
-
默认变量
#define MESSAGE_HEAD1 0x53 //数据帧头1
#define MESSAGE_HEAD2 0x59 //数据帧头2
#define MESSAGE_END1 0x54 //数据帧结尾1
#define MESSAGE_END2 0x43 //数据帧结尾2
#define HUMAN_PSE_RADAR 0x80 //人体存在数据
#define PRESENCE_INF 0x01 //存在信息
#define SOMEONE_HERE 0x01 //有人在此
#define NOONE_HERE 0x00 //无人在此
#define MOVE_INF 0x02 //运动信息
#define PSE_NONE 0x00 //无
#define STATIONARY 0x01 //人处于静止状态
#define MOVEMENT 0x02 //人处于运动状态
#define BODY_SIG 0x03 //身体运动信息
#define MOVE_DIS 0x0E //确定发生运动的距离
#define FALL_DETECTION 0x83 //跌倒数据标记
#define FALL_STATE 0x01 //跌倒状态标记
#define NO_FALL 0x00 //未检测到跌倒
#define FALLING 0x01 //检测到跌倒
#define RESIDENT_STATE 0x05 //驻留状态
#define NO_RESIDENT 0x00 //无静止驻留
#define RESIDENT 0x01 //有静止驻留
#define reset_frame_len 10 //重置数据帧长度
//重置数据帧
const unsigned char fall_reset_frame[10] = {0x53, 0x59, 0x01, 0x02, 0x00, 0x01, 0x0F, 0xBF, 0x54, 0x43};
//返回状态,在arduino中使用
#define NOONE 0x01
#define SOMEONE 0x02
#define NONEPSE 0x03
#define STATION 0x04
#define MOVE 0x05
#define BODYVAL 0x06
#define MOVEDIS 0x07
#define NOFALL 0x08
#define FALL 0x09
#define NORESIDENT 0x10
#define RESIDENCY 0x11
unsigned int sensor_report = 0, bodysign_val = 0, total_detect = 0, height_0005 = 0, height_0510 = 0, height_1015 = 0, height_1520 = 0;
安装
步骤 1. 您需要安装 Arduino 软件。
步骤 2. 启动 Arduino 应用程序。

步骤 3. 选择您的开发板型号并将其添加到 Arduino IDE 中。
-
如果您想在后续教程中使用 Seeeduino V4.2,请参考此教程完成添加。
-
如果您想在后续教程中使用 Seeeduino XIAO,请参考此教程完成添加。
-
如果您想在后续教程中使用 XIAO RP2040,请参考此教程完成添加。
-
如果您想在后续教程中使用 XIAO BLE,请参考此教程完成添加。
-
如果您想在后续教程中使用 XIAO ESP32C3,请参考此教程完成添加。
对于 XIAO nRF52840,请选择 Seeed nRF52 mbed-enabled Boards,否则运行程序时可能会报错。

步骤 4. 安装 Arduino 代码库。
首先从 GitHub 获取代码库并下载到您的本地计算机。
由于您已经下载了 zip 库文件,请打开您的 Arduino IDE,点击 Sketch > Include Library > Add .ZIP Library。选择您刚刚下载的 zip 文件,如果库安装正确,您将在通知窗口中看到 Library added to your libraries。这意味着库已成功安装。

Arduino 示例
现在我们已经安装了库并了解了基本功能,让我们为 XIAO BLE 运行一些示例,看看它的表现如何。
所需材料
在完成以下示例之前,您需要准备以下材料。
![]() | ![]() | ![]() |
60GHz 毫米波雷达传感器 | Seeed XIAO BLE nRF52840 Sense | 2mm 到 2.54mm 间距排线 |
步骤 1. 通过主板将设备连接到计算机。接线图如下表所示。
![]() | |||
Seeed Studio XIAO nRF52840 | MR60FDA1 传感器 | ||
5V | --> | 5V | |
GND | --> | GND | |
RX | --> | D6 | |
TX | --> | D7 |
步骤 2. 在 Arduino IDE 左上角的菜单栏中,选择 tool,选择您正在使用的开发板类型,并选择相应的串口。
如果您使用的是 MacOS,设备的串口名称通常以 /dev/cu.usbmodem xxx 开头,以设备名称结尾。如果您使用的是 Windows,设备的串口名称通常以 COM 开头,同样以设备名称结尾。

在此示例中,我们将演示雷达如何与我们的热门产品 XIAO BLE 配合工作。
演示1 原始数据导出
此示例将指导您完成通过串口打印传感器报告的原始数据的过程。
以下示例程序位于库的 examples 文件夹中,名为 MR60FDA1_print_rawdata。
#include "Arduino.h"
#include <60ghzfalldetection.h>
//#include <SoftwareSerial.h>
// 选择任意两个可以与SoftwareSerial一起用于RX和TX的引脚
//#define RX_Pin A2
//#define TX_Pin A3
//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
// 我们将使用软件串口
//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial);
// 也可以尝试硬件串口
FallDetection_60GHz radar = FallDetection_60GHz(&Serial1);
void setup() {
// 将你的设置代码放在这里,运行一次:
Serial.begin(115200);
Serial1.begin(115200);
// mySerial.begin(115200);
while(!Serial); //当串口打开时,程序开始执行。
Serial.println("Readly");
}
void loop()
{
// 将你的主要代码放在这里,重复运行:
radar.recvRadarBytes(); //接收雷达数据并开始处理
radar.showData(); //串口打印一组接收到的数据帧
delay(200); //添加时间延迟以避免程序卡死
}
如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从
Serial1.begin(115200);
改为 Serial1.begin(115200, SERIAL_8N1, D7, D6);
。
在这个程序中,我们使用 XIAO nRF52840 的硬件 Serial1 端口连接到传感器,并使用硬件 Serial 端口 Serial 输出数据,因此我们需要在初始化函数 Setup()
中单独初始化这个串口。
在主 loop()
函数中,我们使用函数 recvRadarBytes()
从传感器接收数据帧,然后使用 showData()
函数通过串口打印出接收到的数据帧。
在这个程序中,需要注意的是,每两个数据帧的接收和输出之间都有一个间隔,以避免主板出现阻塞。这个时间应该不少于 150ms。
这意味着主板无法接收传感器报告的所有数据帧,但由于传感器报告的帧数非常大且频繁,这不会影响使用传感器判断环境的准确性。
上传程序。将串口监视器的波特率设置为 115200 应该会显示结果。输出应该类似于下图。

Demo2: 人体存在检测功能的使用
在这个示例中,我们将解释如何使用人体存在检测功能,并通过串口监视器打印出该功能中所有值的信息。
以下示例程序位于库的 examples 文件夹中,名为 MR60FDA1_human_existence_inf_output。
#include "Arduino.h"
#include <60ghzfalldetection.h>
//#include <SoftwareSerial.h>
// 选择任意两个可以与SoftwareSerial一起用于RX和TX的引脚
//#define RX_Pin A2
//#define TX_Pin A3
//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
// 我们将使用软件串口
//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial);
// 也可以尝试硬件串口
FallDetection_60GHz radar = FallDetection_60GHz(&Serial1);
void setup() {
// 将您的设置代码放在这里,运行一次:
Serial.begin(115200);
Serial1.begin(115200);
// mySerial.begin(115200);
while(!Serial); //当串口打开时,程序开始执行。
Serial.println("Readly");
}
void loop()
{
// 将您的主代码放在这里,重复运行:
radar.HumanExis_Func(); //人体存在信息输出
if(radar.sensor_report != 0x00){
switch(radar.sensor_report){
case NOONE:
Serial.println("Nobody here.");
Serial.println("----------------------------");
break;
case SOMEONE:
Serial.println("Someone is here.");
Serial.println("----------------------------");
break;
case NONEPSE:
Serial.println("No human activity messages.");
Serial.println("----------------------------");
break;
case STATION:
Serial.println("Someone stop");
Serial.println("----------------------------");
break;
case MOVE:
Serial.println("Someone moving");
Serial.println("----------------------------");
break;
case BODYVAL:
Serial.print("The parameters of human body signs are: ");
Serial.println(radar.bodysign_val, DEC);
Serial.println("----------------------------");
break;
}
}
delay(200); //添加时间延迟以避免程序卡死
}
如果您使用的是XIAO ESP32系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从Serial1.begin(115200);
更改为Serial1.begin(115200, SERIAL_8N1, D7, D6);
。
在这个示例中,检测人体存在的功能由HumanExis_Func()
函数实现。程序实现的基本逻辑是HumanExis_Func()
函数将传感器报告的状态信息分配给sensor_report
变量。基于sensor_report
的值,我们然后通过串口打印出该状态下的所有值。
请注意,sensor_report
对应于缩进下串口的数据输出。例如,表示体征参数的bodysign_val
变量仅在sensor_report
为BODYVAL
时有效,在传感器报告的其他sensor_reports
中不存在。
上传程序。将串口监视器的波特率设置为115200应该会显示结果。输出应该类似于下图。

示例3:人体跌倒检测
在这个示例中,我们将使用Fall_Detection()
函数来检测人体跌倒。
跌倒状态输出的原理是只有当传感器检测到跌倒状态发生变化时才有内容输出。
以下示例程序位于库的examples文件夹中,名为MR60FDA1_Fall_detection。
#include "Arduino.h"
#include <60ghzfalldetection.h>
//#include <SoftwareSerial.h>
// 选择任意两个可以与软件串口一起使用的引脚作为 RX 和 TX
//#define RX_Pin A2
//#define TX_Pin A3
//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
// 我们将使用软件串口
//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial);
// 也可以尝试硬件串口
FallDetection_60GHz radar = FallDetection_60GHz(&Serial1);
void setup() {
// 将您的设置代码放在这里,运行一次:
Serial.begin(115200);
Serial1.begin(115200);
// mySerial.begin(115200);
while(!Serial); //当串口打开时,程序开始执行。
Serial.println("Readly");
}
void loop()
{
// 将您的主要代码放在这里,重复运行:
radar.Fall_Detection(); //接收雷达数据并开始处理
if(radar.sensor_report != 0x00){
switch(radar.sensor_report){
case NOFALL:
Serial.println("传感器检测到此动作不是跌倒。");
Serial.println("----------------------------");
break;
case FALL:
Serial.println("传感器检测到跌倒。");
Serial.println("----------------------------");
break;
case NORESIDENT:
Serial.println("传感器未检测到任何人停留在原地。");
Serial.println("----------------------------");
break;
case RESIDENCY:
Serial.println("传感器检测到有人停留在原地。");
Serial.println("----------------------------");
break;
}
}
delay(200); //添加时间延迟以避免程序卡死
}
如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 Serial1.begin(115200);
更改为 Serial1.begin(115200, SERIAL_8N1, D7, D6);
。
在跌倒检测功能中,还有一个驻留检测功能。该功能的主要作用是协助用户或传感器判断人体是否跌倒。当垂直方向加速度发生剧烈变化后(即停留在原地)一段时间内没有人体活动时,传感器很有可能判断有人跌倒并失去意识。
Demo4:向传感器发送数据
根据用户手册中提供的详细信息,用户可以根据实际需要向传感器发送命令帧,以查询或设置传感器的某些状态或模式。
传感器库示例文件夹中名为 MR60FDA1_Send_frame 的 .ino 文件向我们展示了如何发送查询设备 ID 的程序到传感器。
#include "Arduino.h"
#include <60ghzfalldetection.h>
//#include <SoftwareSerial.h>
// 选择任意两个可以与SoftwareSerial一起用于RX和TX的引脚
//#define RX_Pin A2
//#define TX_Pin A3
//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
// 我们将使用软件串口
//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial);
// 也可以尝试硬件串口
FallDetection_60GHz radar = FallDetection_60GHz(&Serial1);
const unsigned char DevID_buff[10] = {0x53, 0x59, 0x02, 0xA1, 0x00, 0x01, 0x0F, 0x5F, 0x54, 0x43};
void setup() {
// 将你的设置代码放在这里,只运行一次:
Serial.begin(115200);
Serial1.begin(115200);
// mySerial.begin(115200);
while(!Serial); //当串口打开时,程序开始执行。
Serial.println("Readly");
}
void loop()
{
// 将你的主要代码放在这里,重复运行:
radar.send_func(DevID_buff, 10, false);
delay(50); //不要将延迟时间设置得太长,因为这可能会影响雷达返回的数据帧的接收。
}
如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 Serial1.begin(115200);
改为 Serial1.begin(115200, SERIAL_8N1, D7, D6);
。
在这个示例的程序中,您可以看到定义了一个数组 DevID_buff[10]
,它存储了您查询设备 ID 的十六进制数字,每个位置一个字节。
发送是通过 send_func()
完成的。传入的参数是要发送的帧数组、数组的长度,以及是否循环发送。
如果您需要发送自己的命令帧,那么您需要根据用户手册中提供的帧格式定义正确的数组。
关于校验位"sum"的计算。
所有数据帧都有一个校验位,以确保数据准确发送或接收。校验位通常在数据帧的倒数第二位。它是通过将校验位之前的所有位相加并取十六进制的低两位来计算的。 让我们以查询设备 ID 的数据帧为例。

可以看到校验位在整个数据帧的倒数第二位。然后我们开始将之前的所有十六进制数字相加。
0x53 + 0x59 + 0x02 + 0xA2 + 0x00 + 0x01 + 0x0F = 0x0160
然后我们需要取它的低两位,即 60,所以这个数据帧的校验和是 60。如果我们想查询传感器的 ID,那么您可以定义以下数组。
const unsigned char DevID_buff[10] = {0x53, 0x59, 0x02, 0xA1, 0x00, 0x01, 0x0F, 0x60, 0x54, 0x43};
上传程序。将串行监视器的波特率设置为 115200 应该会显示结果。输出应该类似于下图。

此时请检查返回的数据帧,看它们是否与用户手册中描述的返回数据帧匹配。
通常,我们的命令不需要重复发送给传感器,但由于传感器回复消息的速度非常快,我们无法确保能够接收到传感器返回的确切数据消息。这个问题有两种解决方案。
- 多次重新上传上述程序。
- 将
send_func()
函数的第三个参数(循环发送)设置为true
。但是请注意,重复发送设置类型的数据帧可能会导致传感器卡死,所以请谨慎使用此功能。如果传感器卡死,请断开传感器的 5V 供电引脚,等待片刻后功能即可恢复。
Demo5: 重置传感器
有时您的传感器可能出现检测异常问题,或者当您想清除传感器上的所有设置时,您可以根据此示例重置传感器。
以下示例程序位于库的示例文件夹中,名为 MR60FDA1_Reset_sensor。
#include "Arduino.h"
#include <60ghzfalldetection.h>
//#include <SoftwareSerial.h>
// 选择任意两个可以与SoftwareSerial一起用于RX和TX的引脚
//#define RX_Pin A2
//#define TX_Pin A3
//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
// 我们将使用软件串口
//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial);
// 也可以尝试硬件串口
FallDetection_60GHz radar = FallDetection_60GHz(&Serial1);
void setup() {
// 将您的设置代码放在这里,运行一次:
Serial.begin(115200);
Serial1.begin(115200);
// mySerial.begin(115200);
while(!Serial); //当串口打开时,程序开始执行。
Serial.println("Readly");
radar.reset_func();
}
void loop()
{
// 将您的主要代码放在这里,重复运行:
}
如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 Serial1.begin(115200);
改为 Serial1.begin(115200, SERIAL_8N1, D7, D6);
。
重置传感器非常简单,您只需要调用 reset_func()
。重置只需要执行一次,所以我们在 Setup()
函数中使用它。
示例6:使用 Arduino/Seeeduino
我们的库兼容 Arduino,您也可以选择手头的 Arduino 来开发您的传感器项目。
MR60FDA1 传感器使用 UART 串口通信,您只需要按照下面的接线将传感器连接到您的 Arduino。
MR60FDA1 传感器 | MCU | |
5V | --> | 5V |
GND | --> | GND |
RX | --> | 软串口 TX |
TX | --> | 软串口 RX |
所有功能的应用方式与上面的示例1到示例5相同,所以我们不会在这个例子中重复它们。在这个例子中,我们将为您概述如何使用 Arduino 的软串口从传感器获取数据信息。
有关 Arduino 软串口的注意事项,请参考 Arduino 官方文档。
为了避免使用 Serial 同时进行输出和数据传输造成的数据混乱,在 Arduino 端我们通常使用软串口。
软串口库的导入和 RX、TX 引脚的定义需要在程序的早期完成。以下程序将 A2 和 A3 引脚定义为软串口的 RX 和 TX 引脚。
#include <SoftwareSerial.h>
//选择任意两个可以与SoftwareSerial一起使用的引脚作为RX和TX
#define RX_Pin A2
#define TX_Pin A3
SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
//我们将使用软件串口
FallDetection_60GHz radar = FallDetection_60GHz(&mySerial);
另外,不要忘记在 Setup()
函数中设置软件串口的波特率。
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
mySerial.begin(115200);
while(!Serial); //当串口打开时,程序开始执行。
Serial.println("Readly");
}
以Demo1为例,如果您想使用Arduino打印传感器报告的数据帧,那么完整的程序如下。
#include "Arduino.h"
#include <60ghzfalldetection.h>
#include <SoftwareSerial.h>
// 选择任意两个可以与SoftwareSerial一起用于RX和TX的引脚
#define RX_Pin A2
#define TX_Pin A3
SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
// 我们将使用软件串口
FallDetection_60GHz radar = FallDetection_60GHz(&mySerial);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
mySerial.begin(115200);
while(!Serial); //当串口打开时,程序开始执行。
Serial.println("Readly");
}
void loop()
{
// put your main code here, to run repeatedly:
radar.recvRadarBytes(); //接收雷达数据并开始处理
radar.showData(); //串口打印一组接收到的数据帧
delay(200); //添加时间延迟以避免程序卡死
}
Demo7: 直接连接PC获取数据
如果您想使用为传感器设计的上位机,或者想使用串口软件获取完整的数据帧,可以参考此例程。
通过UART转USB设备将传感器直接连接到计算机的USB端口。接线如下表所示。
![]() | |||
UART转USB | MR60FDA1传感器 | ||
5V | --> | 5V | |
GND | --> | GND | |
RX | --> | TX | |
TX | --> | RX |
使用串口调试助手等软件选择传感器所在的串口。

MR60FDA1传感器需要5V电源供电,否则传感器可能无法正常工作。
连接成功后,您将看到传感器发送稳定的消息流。

同时,您也可以通过软件的发送功能向传感器发送数据帧。

如果您选择ASCII作为发送数据的格式,每组数据都需要加上0x前缀。如果您选择HEX,那么每组数据不需要加上0x前缀。
故障排除
FAQ1: 这个传感器能否在同一环境中同时检测多个人?
答:不可以。此传感器只能用于单个生物体。如果监测范围内有多个人或动物,这将对监测结果产生影响。
FAQ2: 为什么我在XIAO ESP32C3的串口监视器中看不到任何内容?
XIAO ESP32C3串口功能与一般Arduino硬件不太一致,直接使用Serial1可能会导致USB串口无法工作。相关应用案例请参考XIAO ESP32C3的串口章节了解详情。
资源
- [PDF] 通用协议
- [PDF] 用户手册 V1.3
- [PDF] Seeed Studio毫米波传感器外壳设计
- [EXE] 上位机软件
技术支持与产品讨论
感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。