Skip to main content

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米
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毫米波库

  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.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 串口监视器中的输出如下:

note

呼吸和心率可在 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_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.5 有以下更新:

  1. 修复了人体静止时有时无法检测到呼吸和心率的问题。
点击此处预览旧版本
note

固件 1.6.4 有以下更新:

  1. 优化了呼吸和心率检测功能,修复了身体小幅运动导致数据丢失的错误。
  2. 增强了 3D 存在检测功能:可在 1.5 米内检测呼吸和心率,在 1.5 到 6 米范围内检测存在。
  3. 添加了人员检测功能,能够在 6 米范围内检测多达三个人。
  1. 检查并连接到串口(将波特率设置为 115200)
  1. 点击"REQUEST UPDATE"进入升级模式:
  1. 如果打印出"C"或"43",表示模块已进入升级模式。
  1. 选择要升级的固件。选择后,将自动进入升级状态。

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

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

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

开放定制化

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

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

资源

技术支持与产品讨论

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

Loading Comments...