60GHz 毫米波呼吸心跳检测传感器套件与 XIAO ESP32C6 (MR60BHA2) 入门指南

介绍我们先进的 XIAO 毫米波传感器模块,专为提供尖端的监测解决方案而设计,支持跌倒检测和心跳监测。该模块由强大的 XIAO ESP32 微控制器驱动,内置 Wi-Fi 和蓝牙连接功能,提供精确可靠的检测能力。无论您需要实时监测跌倒还是以敏感精度跟踪心跳,我们的模块都配备了最先进的技术,包括可定制的 RGB LED 和环境光感应。通过 Grove GPIO 端口的便捷扩展选项,这些多功能模块非常适合广泛的应用场景,从智能家居集成到医疗保健监测。
特性
- Wi-Fi 和蓝牙功能:两个模块都由 XIAO ESP32 驱动,预装 ESPHome 固件,确保快速设置和定制。
- 心跳检测模块:
- 敏感心跳监测:可检测最远 1.5 米的心跳。
- 静态存在检测:监测最远 6 米的静止个体。
- 环境感应:
- BH1750 光传感器:测量 1 到 65,535 勒克斯的环境光。
- WS2812 RGB LED:可定制 LED,用于视觉反馈和 DIY 项目。
- 可扩展连接:包含 Grove GPIO 端口,用于添加额外的传感器和模块。
规格参数
通用参数 | |
---|---|
毫米波固件 | 呼吸和心跳检测 |
检测范围 | 人体静态存在检测:最远6米 呼吸和心跳检测:1.5米 |
MCU | Seeed Studio XIAO ESP32C6 |
LED | WS2812 RGB LED |
按钮 | 复位 |
光传感器 | BH1750 范围:1至65,535勒克斯,可调测量范围高达100,000勒克斯 |
连接性 | 1个GPIO端口(D0、D10) |
排针间距 | 2.54mm |
电源供应 | 5V/1A输入 |
功耗 | 0.5w:待机模式 0.8w:激活模式 1.4w:与Grove继电器状态一起工作 |
应用场景
- 安防系统
- 健康监测
- 智能家居自动化
- 老年人护理
硬件概述

快速入门
安装方法和感应范围
方法1. 侧面安装,建议雷达安装高度与被测人员胸部高度一致,模块位置与胸部位置≤1.5m


方法2. 倾斜安装。对于睡眠呼吸和心率检测需求,可以采用倾斜安装方式。要求雷达安装在床头正上方1m高度,向下倾斜45°朝向床的中央,控制雷达与胸腔的距离在1.5m以内。雷达法线方向对准主要检测位置,确保雷达能够检测到呼吸和心跳数据。

请在开放空间中使用此模块,并在检测范围内避免以下场景,以防止对模块造成干扰:
- 多个雷达安装距离过近
- 风吹动窗帘和摇摆植物
- 水流和水膜
- 大面积金属和镜面反射
- 透过玻璃和薄木板检测
- 安装位置容易产生振动
- 使用劣质电源
软件准备(Arduino)
默认情况下,MR60BHA2预装了XIAO ESP32C6,但它兼容各种其他微控制器进行通信和集成。
如果这是您第一次在XIAO系列上使用Arduino,请按照适合您开发板的设置指南进行操作:
- XIAO ESP32S3:参考XIAO ESP32S3快速入门指南。
- XIAO ESP32C3:按照Seeed Studio XIAO ESP32C3快速入门指南进行操作。
- XIAO ESP32C6:按照Seeed Studio XIAO ESP32C6快速入门指南进行操作。
设置好开发板后,请按照以下步骤操作:
-
下载Seeed毫米波库:
- 从GitHub下载Seeed毫米波库。
- 在Arduino IDE中安装库:
- 打开Arduino IDE。
- 导航到项目 > 加载库 > 添加.ZIP库...。
- 选择下载的
.zip
文件来安装库。
- 连接您的XIAO开发板:
- 通过USB将XIAO开发板插入计算机。
- 在Arduino IDE中,转到工具 > 开发板并选择您的XIAO开发板型号。
- 在工具 > 端口下选择正确的端口。
- 加载示例代码:
- 转到文件 > 示例 > Seeed Arduino mmWave。
- 选择心跳检测的相关示例。
- 查看代码并进行必要的调整。
- 上传代码:
- 点击上传将代码烧录到XIAO开发板。
- 在Arduino IDE中打开串口监视器查看实时传感器数据。
使用方法
本节提供示例代码片段,帮助您快速开始使用 Seeed Arduino mmWave 库的各种功能,包括呼吸监测、RGB LED 控制和光感应。
呼吸模块
此示例演示如何使用 MR60BHA2 传感器监测呼吸和心跳。
#include <Arduino.h>
#include "Seeed_Arduino_mmWave.h"
// Set up serial communication depending on the board type
#ifdef ESP32
# include <HardwareSerial.h>
HardwareSerial mmWaveSerial(0);
#else
# define mmWaveSerial Serial1
#endif
SEEED_MR60BHA2 mmWave;
void setup() {
Serial.begin(115200);
mmWave.begin(&mmWaveSerial);
}
void loop() {
if (mmWave.update(100)) {
float total_phase, breath_phase, heart_phase;
if (mmWave.getHeartBreathPhases(total_phase, breath_phase, heart_phase)) {
Serial.printf("total_phase: %.2f\t", total_phase);
Serial.printf("breath_phase: %.2f\t", breath_phase);
Serial.printf("heart_phase: %.2f\n", heart_phase);
}
float breath_rate;
if (mmWave.getBreathRate(breath_rate)) {
Serial.printf("breath_rate: %.2f\n", breath_rate);
}
float heart_rate;
if (mmWave.getHeartRate(heart_rate)) {
Serial.printf("heart_rate: %.2f\n", heart_rate);
}
float distance;
if (mmWave.getDistance(distance)) {
Serial.printf("distance: %.2f\n", distance);
}
}
}
在 Arduino 串口监视器中的输出如下:

如果返回的数据不是 0
,表示在检测范围内存在生物。
人体检测
此示例演示如何使用 MR60BHA2 传感器进行人体检测。
请确保您已将 MR60BHA2 模块的固件升级到最新版本。
最新固件添加了人体存在检测和人体对象相关功能。
#include <Arduino.h>
#include "Seeed_Arduino_mmWave.h"
// If the board is an ESP32, include the HardwareSerial library and create a
// HardwareSerial object for the mmWave serial communication
#ifdef ESP32
# include <HardwareSerial.h>
HardwareSerial mmWaveSerial(0);
#else
// Otherwise, define mmWaveSerial as Serial1
# define mmWaveSerial Serial1
#endif
SEEED_MR60BHA2 mmWave;
void setup() {
Serial.begin(115200);
mmWave.begin(&mmWaveSerial);
}
void loop() {
if (mmWave.update(100)) {
if (mmWave.isHumanDetected()) {
Serial.printf("-----Human Detected-----\n");
}
PeopleCounting target_info;
if (mmWave.getPeopleCountingTartgetInfo(target_info)) {
Serial.printf("-----Got Target Info-----\n");
Serial.printf("Number of targets: %zu\n", target_info.targets.size());
for (size_t i = 0; i < target_info.targets.size(); i++) {
const auto& target = target_info.targets[i];
Serial.printf("Target %zu:\n", i + 1);
Serial.printf(" x_point: %.2f\n", target.x_point);
Serial.printf(" y_point: %.2f\n", target.y_point);
Serial.printf(" dop_index: %d\n", target.dop_index);
Serial.printf(" cluster_index: %d\n", target.cluster_index);
Serial.printf(" move_speed: %.2f cm/s\n", target.dop_index * RANGE_STEP);
}
}
// delay(500);
}
}
在 Arduino 串口监视器中的输出如下:

呼吸和心率可在 1.5 米内检测到,存在检测范围为 1.5 到 6 米。
当 1.5 米范围内有人时,模块将进入心跳和呼吸检测模式。
在此模式下,人体检测功能的灵敏度可能会降低。
闪烁 RGB LED
此示例演示如何使用 NeoPixel 库控制 RGB LED。
- 步骤 1. 下载
Adafruit_NeoPixel
库
导航到 Sketch > Include Liarbry > Manage Libraries...,搜索 Adafruit_NeoPixel,安装最新版本。
- 步骤 2. 将以下代码复制到新的草图中:
#include <Adafruit_NeoPixel.h>
#include <Arduino.h>
const int pixelPin = D1;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, pixelPin, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
pixels.begin();
pixels.clear();
pixels.show();
}
void loop() {
for (int i = 0; i < 10; i++) {
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
pixels.show();
delay(100);
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.show();
delay(100);
}
for (int i = 255; i >= 0; i--) {
pixels.setPixelColor(0, pixels.Color(i, 0, 0));
pixels.show();
delay(10);
}
}
- 步骤 3. 选择正确的开发板和端口号来上传程序。
程序成功上传后,您将看到毫米波传感器模块右侧的RGB LED开始闪烁。

光传感器 (BH1750)
此示例展示如何使用BH1750传感器读取光强度值。
- 步骤 1. 下载
hp_BH1750
库
导航到 Sketch > Include Library > Manage Libraries...,搜索 hp_BH1750,安装最新版本。
- 步骤 2. 将以下代码复制到新的草图中:
#include <Arduino.h>
#include <hp_BH1750.h>
hp_BH1750 BH1750;
void setup() {
Serial.begin(9600);
bool avail = BH1750.begin(BH1750_TO_GROUND);
if (!avail) {
Serial.println("No BH1750 sensor found!");
while (true) {}
}
Serial.printf("conversion time: %dms\n", BH1750.getMtregTime());
BH1750.start();
}
void loop() {
if (BH1750.hasValue()) {
float lux = BH1750.getLux();
Serial.println(lux);
BH1750.start();
}
}
- 步骤 3. 选择正确的开发板和端口号来上传程序。
在Arduino串口监视器上的输出如下:

呼吸模块 API
此示例使用 SEEED_MR60BHA2
类与MR60BHA2传感器接口进行心率和呼吸监测。以下是每个关键函数的功能:
-
mmWave.begin(&mmWaveSerial)
:- 使用指定的串口接口初始化传感器通信。它建立XIAO开发板与MR60BHA2传感器之间的连接。
-
mmWave.update(100)
:- 更新传感器数据。参数
100
是以毫秒为单位的超时值,指定等待传感器提供新数据的时间。如果在此时间范围内有新数据可用,函数返回true
。
- 更新传感器数据。参数
-
mmWave.getHeartBreathPhases(float &total_phase, float &breath_phase, float &heart_phase)
:- 检索与心率和呼吸活动相关的相位信息。
total_phase
表示整体相位偏移,而breath_phase
和heart_phase
分别特定于呼吸和心跳活动。
-
mmWave.getBreathRate(float &rate)
:- 获取传感器检测到的当前呼吸频率。频率通过引用变量
rate
返回。
- 获取传感器检测到的当前呼吸频率。频率通过引用变量
-
mmWave.getHeartRate(float &rate)
:- 检索传感器检测到的当前心率。心率通过引用变量
rate
返回。
- 检索传感器检测到的当前心率。心率通过引用变量
-
mmWave.getDistance(float &distance)
:- 获取从传感器到检测对象(例如人体)的距离。此函数对于理解检测信号的范围很有用。
-
mmWave.getPeopleCountingPointCloud(PeopleCounting& point_cloud)
:- 检索点云信息。它只是实现了消息类型的接收,没有数据是正常的。
PeopleCounting
结构包含检测到的目标向量。每个目标包括以下属性:x_point
: 目标的X坐标(以米为单位)。y_point
: 目标的Y坐标(以米为单位)。dop_index
: 多普勒指数,表示目标的速度。- 实际移动速度(以cm/s为单位)可以计算为:
dop_index * RANGE_STEP
,其中RANGE_STEP
是速度分辨率。
- 实际移动速度(以cm/s为单位)可以计算为:
cluster_index
: 目标的聚类ID,用于识别场景中的单个目标。
-
mmWave.getPeopleCountingTartgetInfo(PeopleCounting& target_info)
:- 检索检测到的目标信息。
PeopleCounting
结构包含检测到的目标向量。每个目标包括以下属性:x_point
: 目标的X坐标(以米为单位)。y_point
: 目标的Y坐标(以米为单位)。dop_index
: 多普勒指数,表示目标的速度。- 实际移动速度(以cm/s为单位)可以计算为:
dop_index * RANGE_STEP
,其中RANGE_STEP
是速度分辨率。
- 实际移动速度(以cm/s为单位)可以计算为:
cluster_index
: 目标的聚类ID,用于识别场景中的单个目标。
-
mmWave.isHumanDetected()
:- 返回是否检测到人类。
模块固件升级
修改雷达固件是一项有风险的操作,因此请务必仔细阅读本节内容,然后仔细按照每个步骤进行操作。请注意,如果某个步骤执行不正确,雷达可能会变砖或无法使用。
特别注意,如果您购买的是跌倒雷达 MR60FDA2,请不要通过以下方式非法刷写固件,这肯定会使您的设备变砖!!!!
首先,将 XIAO ESP32C6 和 MR60BHA2 模块连接在一起。然后使用以下代码对 XIAO 进行编程。
#include <Arduino.h>
#include "Seeed_Arduino_mmWave.h"
// If the board is an ESP32, include the HardwareSerial library and create a
// HardwareSerial object for the mmWave serial communication
#ifdef ESP32
# include <HardwareSerial.h>
HardwareSerial mmWaveSerial(0);
#else
// Otherwise, define mmWaveSerial as Serial1
# define mmWaveSerial Serial1
#endif
void setup() {
// Initialize the serial communication for debugging
Serial.begin(115200);
while (!Serial) {
; // Wait for Serial to initialize
}
// Initialize the mmWaveSerial communication
mmWaveSerial.begin(115200);
}
void loop() {
// Check if there is data available from mmWaveSerial
while (mmWaveSerial.available() > 0) {
char receivedChar = mmWaveSerial.read();
Serial.write(receivedChar); // Forward data to Serial
}
// Check if there is data available from Serial
while (Serial.available() > 0) {
char receivedChar = Serial.read();
mmWaveSerial.write(receivedChar); // Forward data to mmWaveSerial
}
}
上述代码的功能是将模块的串口透传到 XIAO 的 USB 串口,从而通过 XIAO 升级模块的固件。
请在升级过程中将 XIAO 连接到您的 PC。

您将看到模块发送的原始数据。
然后您需要在此处下载并解压 OTA 工具和固件。
固件 1.6.5 有以下更新:
- 修复了人体静止时有时无法检测到呼吸和心率的问题。
- MR60BHA2 固件升级工具: MR60BHA2_OTA.zip
- MR60BHA2 固件 v1.6.10: MR60BHA2_eeprom_1.6.10.bin
点击此处预览旧版本
- MR60BHA2 固件 v1.6.4: MR60BHA2_eeprom_1.6.4.bin
- MR60BHA2 固件 v1.6.5: MR60BHA2_eeprom_1.6.5.bin
固件 1.6.4 有以下更新:
- 优化了呼吸和心率检测功能,修复了身体小幅运动导致数据丢失的错误。
- 增强了 3D 存在检测功能:可在 1.5 米内检测呼吸和心率,在 1.5 到 6 米范围内检测存在。
- 添加了人员检测功能,能够在 6 米范围内检测多达三个人。
- 检查并连接到串口(将波特率设置为 115200)

- 点击"REQUEST UPDATE"进入升级模式:



- 如果打印出"C"或"43",表示模块已进入升级模式。

- 选择要升级的固件。选择后,将自动进入升级状态。
升级完成后,将自动跳转到正常模式。如果没有跳转,请断电重启,然后使用 OTA 工具查看串口数据。


- 升级完成后,您可以使用 OTA 工具读取版本和原始数据。

- 升级完成后,您需要重新刷写 XIAO ESP32C6 的固件。
如果在上述步骤中您操作不当导致异常发生,并且无法再次尝试烧录固件且雷达无法正常工作,那么雷达可能由于固件损坏而变砖。尝试恢复设备的唯一方法是参考**此处**的文件和文档。但是,请理解我们不为因操作不当而变砖的设备提供技术支持和协助。
开放定制化
想要定制套件以适应您的独特应用?
有关定制毫米波模块时的3D点云数据生成和干扰区域配置的更多信息。Seeed提供一站式研发定制和制造服务,助力从概念到生产的快速开发。请联系我们:[email protected] 了解更多信息。
资源
- STL: 毫米波3D外壳
- GitHub仓库: 在Seeed毫米波库GitHub页面访问完整代码库和文档。
- ESPHome文档: 有关进一步定制和集成,请参考ESPHome文档。
- MR60BHA2固件升级工具: MR60BHA2_OTA.zip
- MR60BHA2固件v1.6.5: MR60BHA2_eeprom_1.6.5.bin
- MR60BHA2 GUI软件: Seeed_Studio_mmWave_Sensor_MR60BHA2_GUI.zip
- 毫米波传感器原理图V1.0: mmWave_Sensor_SCH_V1.0.pdf
- MR60BHA2模块技术规格: MR60BHA2_Breathing_and_Heartbeat_Module.pdf
- MR60BHA2 Tiny Frame接口手册: Seeed_Studio_Tiny_Frame_Interface_Breathing_and_Heartbeat.pdf
- 通过Jlink的雷达固件恢复方法: Radar_Firmware_Recovery_Method-Jlink.zip
技术支持与产品讨论
感谢您选择我们的产品!我们在此为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。