Skip to main content

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メートル
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 Relayステータスでの動作

アプリケーション

  • セキュリティシステム
  • ヘルスケア監視
  • スマートホームオートメーション
  • 高齢者ケア

ハードウェア概要


使用開始

設置方法とセンシング範囲

**方法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ボードの接続
    • XIAOボードをUSB経由でコンピューターに接続します。
    • Arduino IDEで、ツール > ボードに移動し、XIAOボードモデルを選択します。
    • ツール > ポートで正しいポートを選択します。
  3. サンプルスケッチの読み込み
    • ファイル > スケッチ例 > Seeed Arduino mmWaveに移動します。
    • 心拍検出に関連するサンプルを選択します。
    • コードを確認し、必要に応じて調整を行います。
  4. スケッチのアップロード
    • アップロードをクリックしてコードを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 センサーを使用した人体検出の方法を示します。

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.5M範囲内に人がいる場合、モジュールは心拍と呼吸検出モードに入ります。 このモードでは、人体検出機能の感度が低下する可能性があります。

RGB LED の点滅

この例では、NeoPixel ライブラリを使用して RGB LED を制御する方法を示します。

  • ステップ 1. Adafruit_NeoPixel ライブラリをダウンロードします

スケッチ > ライブラリをインクルード > ライブラリを管理... に移動し、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. 正しいボードとポート番号を選択してプログラムをアップロードします。

プログラムが正常にアップロードされると、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_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

レーダーファームウェアの変更は危険な操作ですので、各ステップを慎重に実行する前に、このセクションを注意深く読んでください。ステップが正しく実行されない場合、レーダーがブリック状態になったり使用不能になったりする可能性があることをご理解ください。

特別な注意:Fall Radar MR60FDA2を購入された場合は、以下の方法でファームウェアを不正にフラッシュしないでください。確実にデバイスがブリック状態になります!!!!

tip

テキストを読みたくない場合は、**動画**を参照してファームウェアを更新することもできます。以下でXIAOのESPHomeファームウェアが上書きされるため、レーダーのファームウェア更新後にこのウェブページでXIAOのESPHomeファームウェアを再フラッシュする必要がある場合があります。

まず、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メートルの範囲内で最大3人まで検知できます。
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ポイントクラウドデータ生成と干渉ゾーン設定の詳細については、Seedは概念から生産まで迅速な開発のためのワンストップR&Dカスタマイゼーションと製造サービスを提供しています。詳細については[email protected]までお問い合わせください。

カスタマイズサービスの説明

レーダーのファームウェアとアルゴリズムはオープンソースではなく、3Dポイントクラウド、検知距離、範囲などのレーダーの複雑なパラメータにはカスタマイズサービスが必要で、追加のカスタマイゼーション費用とMOQが発生する場合があります。

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただき、ありがとうございます!お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルをご用意しています。

Loading Comments...