Skip to main content

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



介绍我们为 XIAO 设计的先进 mmWave 传感器模块,旨在为跌倒检测和心跳监测提供前沿的监控解决方案。这些模块由强大的 XIAO ESP32 微控制器驱动,内置 Wi-Fi 和蓝牙连接功能,提供精确可靠的检测能力。无论您需要实时监测跌倒还是以敏感精度跟踪心跳,我们的模块都配备了最先进的技术,包括可定制的 RGB LED 和环境光感应。通过 Grove GPIO 端口的便捷扩展选项,这些多功能模块非常适合广泛的应用,从智能家居集成到医疗保健监测。

特性

  • Wi-Fi 和蓝牙支持:两个模块都由预刷 ESPHome 固件的 XIAO ESP32 驱动,确保快速设置和定制。
  • 心跳检测模块
    • 敏感心跳监测:可检测最远 1.5 米的心跳。
    • 静态存在检测:监测最远 6 米的静止个体。
  • 环境感应
    • BH1750 光传感器:测量 1 到 65,535 勒克斯的环境光。
    • WS2812 RGB LED:可定制 LED,用于视觉反馈和 DIY 项目。
  • 可扩展连接:包含 Grove GPIO 端口,用于添加额外的传感器和模块。

规格参数

通用参数
mmWave 固件呼吸和心跳检测
检测范围人体静态存在检测:最远 6 米
呼吸和心跳检测:1.5 米
MCUSeeed Studio XIAO ESP32C6
LEDWS2812 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 以内。雷达法线方向对准主要检测位置,确保雷达能够检测到呼吸和心跳数据。

note

请在开放空间使用此模块,并在检测范围内避免以下情况,以防止对模块造成干扰:

  • 多个雷达安装距离过近
  • 风吹动窗帘和摇摆植物
  • 水流和水膜
  • 大面积金属和镜面反射
  • 透过玻璃和薄木板检测
  • 安装位置容易产生振动
  • 使用劣质电源

软件准备 (Arduino)

注意

默认情况下,MR60BHA2 预装了 XIAO ESP32C6,但它与各种其他微控制器兼容,用于通信和集成。

如果这是您第一次在 XIAO 系列中使用 Arduino,请按照适合您板子的设置指南:

设置好您的板子后,请按照以下步骤操作:

  1. 下载 Seeed mmWave 库

  1. 在 Arduino IDE 中安装库
    • 打开 Arduino IDE。
    • 导航到 项目 > 加载库 > 添加 .ZIP 库...
    • 选择下载的 .zip 文件来安装库。
  2. 连接您的 XIAO 板
    • 通过 USB 将您的 XIAO 板连接到计算机。
    • 在 Arduino IDE 中,转到 工具 > 开发板 并选择您的 XIAO 板型号。
    • 工具 > 端口 下选择正确的端口。
  3. 加载示例代码
    • 转到 文件 > 示例 > Seeed Arduino mmWave
    • 选择心跳检测的相关示例。
    • 查看代码并进行必要的调整。
  4. 上传代码
    • 点击 上传 将代码刷入您的 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 传感器进行人体检测。

caution

请确保您已将 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.getPeopleCountingTargetInfo(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 串口监视器的输出如下:

note

呼吸和心率可在 1.5 米范围内检测,存在检测范围为 1.5 到 6 米。
当 1.5 米范围内有人时,模块将进入心跳和呼吸检测模式。 在此模式下,人体检测功能的灵敏度可能会降低。

闪烁 RGB LED

此示例演示如何使用 NeoPixel 库控制 RGB LED。

  • 步骤 1. 下载 Adafruit_NeoPixel

导航到 Sketch > Include Library > 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_phaseheart_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 是速度分辨率。
      • 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 是速度分辨率。
      • cluster_index : 目标的簇 ID,用于识别场景中的单个目标。
  • mmWave.isHumanDetected():

    • 返回是否检测到人体。

模块固件升级

caution

修改雷达固件是一项有风险的操作,因此请务必仔细阅读本节内容,然后仔细按照每个步骤进行操作。请注意,如果某个步骤执行不正确,雷达可能会变砖或无法使用。

特别注意,如果您购买的是跌倒雷达 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
}
}
tip

上述代码的功能是将模块的串口透明传输到 XIAO 的 USB 串口,从而通过 XIAO 升级模块的固件。
请在升级过程中将 XIAO 连接到您的 PC。

您将看到模块发送的原始数据。

然后您需要在此处下载并解压 OTA 工具和固件。

note

固件 1.6.12 有以下更新:

  1. 修复了在 1.5 米内静止时目标丢失的问题。

  2. 优化了 0-3 米范围内移动目标的跟踪稳定性,解决了之前目标坐标不准确的问题。但是,报告刷新率有所降低。

  3. 呼吸和心率准确性——本版本无更新。相关机器学习训练的持续优化正在进行中。将在月底左右发布固件更新以提高呼吸和心率准确性。之前的呼吸和心率算法存在根本问题,现已得到解决。

点击此处预览旧版本
note

固件 1.6.4 有以下更新:

  1. 优化了呼吸和心率检测功能,修复了小幅身体运动导致数据丢失的错误。
  2. 增强了 3D 存在检测功能:可在 1.5 米内检测呼吸和心率,可在 1.5 到 6 米范围内检测存在。
  3. 添加了人员检测功能,能够在 6 米范围内检测多达三个人。
note

固件 1.6.5 有以下更新:

  1. 修复了人体静止时有时无法检测到呼吸和心率的问题。
note

固件 1.6.10 有以下更新:

  1. 优化了呼吸机制,解决了屏气持续时间不减少的问题。
  2. 添加了数据收集功能。
  1. 检查并连接到串口(将波特率设置为 115200)
  1. 点击"REQUEST UPDATE"进入升级模式:
  1. 如果打印出"C"或"43",表示模块已进入升级模式。
  1. 选择要升级的固件。选择后,将自动进入升级状态。

升级完成后,将自动跳转到正常模式。如果没有跳转,请断电重启,然后使用 OTA 工具查看串口数据。

  1. 升级完成后,您可以使用 OTA 工具读取版本和原始数据。
  1. 升级完成后,您需要重新刷写 XIAO ESP32C6 的固件。
tip

如果在上述步骤中您操作不当导致异常发生,无法再次尝试烧录固件且雷达无法正常工作,那么雷达可能因固件损坏而变砖。尝试恢复设备的唯一方法是参考**此处**的文件和文档。但是,请理解我们不为因操作不当而变砖的设备提供技术支持和协助。

开放定制

想要定制套件以适应您的独特应用?

有关定制 mmWave 模块时 3D 点云数据生成和干扰区域配置的更多信息。Seeed 提供一站式研发定制和制造服务,用于从概念到生产的快速开发。请联系我们:[email protected] 了解更多信息。

定制服务说明

雷达的固件和算法不开源,雷达的复杂参数如 3D 点云、检测距离、范围等需要定制服务,这可能涉及额外的定制费用和 MOQ。

资源

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...