XIAO ESP32C6を使用した60GHz mmWave呼吸・心拍検出センサーキット(MR60BHA2)の使用開始

XIAO向けの先進的なmmWaveセンサーモジュールをご紹介します。転倒検出と心拍モニタリングの両方に対応した最先端のモニタリングソリューションを提供するよう設計されています。内蔵Wi-FiとBluetooth接続機能を備えた堅牢なXIAO ESP32マイクロコントローラーを搭載し、これらのモジュールは精密で信頼性の高い検出機能を提供します。リアルタイムでの転倒監視や敏感な精度での心拍追跡が必要な場合でも、当社のモジュールは、カスタマイズ可能なRGB LEDや環境光センシングを含む最先端技術を搭載しています。Grove GPIOポートによる簡単な拡張オプションにより、これらの多用途モジュールは、スマートホーム統合からヘルスケアモニタリングまで、幅広いアプリケーションに最適です。
特徴
- Wi-Fi & Bluetooth対応: 両モジュールは、事前にESPHomeファームウェアがフラッシュされたXIAO ESP32を搭載し、迅速なセットアップとカスタマイズを保証します。
- 心拍検出モジュール:
- 敏感な心拍モニタリング: 最大1.5メートルから心拍を検出します。
- 静的存在検出: 最大6メートル離れた静止している個人を監視します。
- 環境センシング:
- BH1750光センサー: 1から65,535ルクスの環境光を測定します。
- WS2812 RGB LED: 視覚的フィードバックとDIYプロジェクト用のカスタマイズ可能なLED。
- 拡張可能な接続性: 追加のセンサーやモジュールを追加するためのGrove GPIOポートを含みます。
仕様
一般パラメータ | |
---|---|
mmWaveファームウェア | 呼吸・心拍検出 |
検出範囲 | 人体静的存在検出:最大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 mmWaveライブラリをダウンロード:
- GitHubからSeeed mmWaveライブラリをダウンロードしてください。
- Arduino IDEにライブラリをインストール:
- Arduino IDEを開きます。
- **スケッチ > ライブラリをインクルード > .ZIP形式のライブラリをインストール...**に移動します。
- ダウンロードした
.zip
ファイルを選択してライブラリをインストールします。
- XIAOボードを接続:
- XIAOボードをUSB経由でコンピューターに接続します。
- Arduino IDEで、ツール > ボードに移動し、XIAOボードモデルを選択します。
- ツール > ポートで正しいポートを選択します。
- サンプルスケッチを読み込み:
- ファイル > スケッチ例 > Seeed Arduino mmWaveに移動します。
- 心拍検知に関連するサンプルを選択します。
- コードを確認し、必要に応じて調整を行います。
- スケッチをアップロード:
- アップロードをクリックしてコードをXIAOボードに書き込みます。
- Arduino IDEでシリアルモニターを開いて、リアルタイムセンサーデータを表示します。
使用方法
このセクションでは、呼吸モニタリング、RGB LED制御、光センシングなど、様々な機能でSeeed Arduino mmWaveライブラリを素早く使い始めるためのサンプルコードスニペットを提供します。
呼吸モジュール
この例では、呼吸と心拍のモニタリングに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.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 シリアルモニターでの出力は以下のようになります:

呼吸と心拍数は1.5メートル以内で検出でき、存在は1.5から6メートルの範囲で検出できます。
1.5M範囲内に人がいる場合、モジュールは心拍と呼吸検出モードに入ります。
このモードでは、人体検出機能の感度が低下する可能性があります。
Blink RGB LED
This example demonstrates how to control an RGB LED using the NeoPixel library.
- Step 1. Download the
Adafruit_NeoPixel
library
Navigate to Sketch > Include Liarbry > Manage Libraries..., and search Adafruit_NeoPixel, install the lastest version.
- Step 2. Copy following code to a new sketch:
#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. 正しいボードとポート番号を選択してプログラムをアップロードします。
プログラムが正常にアップロードされると、mmWave センサーモジュールの右側にある RGB LED が点滅しているのが確認できます。

光センサー (BH1750)
この例では、BH1750 センサーを使用して光強度値を読み取る方法を示します。
- ステップ 1.
hp_BH1750
ライブラリをダウンロードします
スケッチ > ライブラリをインクルード > ライブラリを管理... に移動し、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()
:- 人間が検出されているかどうかを返します。
モジュールファームウェアアップグレード
レーダーファームウェアの変更は危険な操作ですので、各ステップを慎重に実行する前に、このセクションを注意深く読んでください。ステップが正しく実行されない場合、レーダーがブリック状態になったり使用不能になったりする可能性があることをご承知おきください。
特別な注意事項:Fall Radar 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メートルの範囲内で最大3人まで検出できます。
- シリアルポートを確認して接続します(ボーレートを115200に設定)

- 「REQUEST UPDATE」をクリックしてアップグレードモードに入ります:



- 「C」または「43」が印刷されると、モジュールがアップグレードモードに入ったことを意味します。

- アップグレードするファームウェアを選択します。選択後、自動的にアップグレード状態に入ります。
アップグレードが完了すると、自動的に通常モードにジャンプします。ジャンプしない場合は、電源を切って再起動し、OTAツールを使用してシリアルポートデータを表示してください。


- アップグレードが完了した後、OTAツールを使用してバージョンと生データを読み取ることができます。

- アップグレード完了後、XIAO ESP32C6のファームウェアを再フラッシュする必要があります。
上記の手順で誤った操作により異常が発生し、ファームウェアの書き込みを再試行できず、レーダーが正常に動作しない場合、ファームウェアの破損によりレーダーがブリック状態になった可能性があります。デバイスを復旧する唯一の方法は、**こちら**のファイルとドキュメントを参照することです。ただし、誤った操作によりブリック状態になったデバイスについては、技術サポートと支援を提供しないことをご理解ください。
カスタマイズ対応
キットをあなた独自のアプリケーションに合わせてカスタマイズしたいですか?
mmWaveモジュールをカスタマイズする際の3Dポイントクラウドデータ生成と干渉ゾーン設定について詳しく知りたい場合は、Seeedがコンセプトから製造まで迅速な開発のためのワンストップR&Dカスタマイズおよび製造サービスを提供しています。詳細については [email protected] までお問い合わせください。
レーダーのファームウェアとアルゴリズムはオープンソースではなく、3Dポイントクラウド、検出距離、範囲などのレーダーの複雑なパラメータにはカスタマイズサービスが必要で、追加のカスタマイズ費用とMOQが発生する場合があります。
リソース
- STL: mmWave 3D Case
- GitHub Repository: 完全なコードベースとドキュメントは Seeed mmWave Library GitHub page でアクセスできます。
- ESPHome Documentation: さらなるカスタマイズと統合については、ESPHome documentation を参照してください。
- MR60BHA2 Firmware upgrade tool: MR60BHA2_OTA.zip
- MR60BHA2 Firmware v1.6.5: MR60BHA2_eeprom_1.6.5.bin
- MR60BHA2 GUI Software: Seeed_Studio_mmWave_Sensor_MR60BHA2_GUI.zip
- mmWave Sensor SCH V1.0: mmWave_Sensor_SCH_V1.0.pdf
- MR60BHA2 Module Technical Specification: MR60BHA2_Breathing_and_Heartbeat_Module.pdf
- MR60BHA2 Tiny Frame Interface Manual: Seeed_Studio_Tiny_Frame_Interface_Breathing_and_Heartbeat.pdf
- Radar Firmware Recovery Method via Jlink: Radar_Firmware_Recovery_Method-Jlink.zip
技術サポート & 製品ディスカッション
私たちの製品をお選びいただき、ありがとうございます!私たちは、お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。