概要
M5Stack社のユニット紹介シリーズです。今回は心拍センサです。心拍と血中酸素濃度(SpO2)が測定できます。
商品
- M5Stack用心拍センサユニット(スイッチサイエンス)
- Mini Heart Rate Unit (MAX30100)(本家サイト)
上記の商品です。基本的にAmazonよりスイッチサイエンスさんから購入したほうが国内だと安いはずです。

赤いコネクタなのでI2Cですね。

使っているセンサーはMAX30100です。
データシートは上記だと思います。ただDigi-Keyだと生産中止品になっていますね。

裏側が赤く光りますので、そこに指をくっつけることで測定ができます。
スケッチ例
#include <Wire.h>
#include "MAX30100_PulseOximeter.h" // http://librarymanager/All#MAX30100lib https://github.com/oxullo/Arduino-MAX30100
#define REPORTING_PERIOD_MS 1000
PulseOximeter pox;
uint32_t tsLastReport = 0;
// コールバック
void onBeatDetected()
{
Serial.println("Beat!");
}
void setup()
{
Serial.begin(115200);
delay(100);
Serial.print("Initializing pulse oximeter..");
Wire.begin(32, 33); // M5StickC
if (!pox.begin()) {
Serial.println("FAILED");
for (;;);
} else {
Serial.println("SUCCESS");
}
// コールバック登録
//pox.setOnBeatDetectedCallback(onBeatDetected);
}
void loop()
{
pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
Serial.print(pox.getHeartRate());
Serial.print(",");
Serial.print(pox.getSpO2());
Serial.println();
tsLastReport = millis();
}
}
公式スケッチ例にあるMAX30100libを使わせていただきました。結構かんたんに利用できます。ただしI2CはWireクラス限定なので、Wire1で動かすことができません。
ちなみにSpO2は、失神するぐらい息を止めると下がりますが健康体の人だとまったく増減しないと思います。。。
まとめ
実際のところ、使い所が難しいです。
たとえば、上記のように耳につけるタイプはなぜか持っているのですが、常に測定するのには便利だと思います。指をくっつけるタイプは継続して測定するのはちょっと面倒です。



コメント