コロナの影響でパルスオキシメータが手に入らないのでM5StickCとHeart Unit (MAX30100)で血中酸素飽和度(SpO2)を測定して表示させてみた。値の正しさは不明なので、使う場合は自己責任で。
M5StickC_SpO2
- ソースコード: GitHub 参照
- 動作には、M5StickCとHeart Unit (MAX30100)が必要。
- センサーから出力される値が不安定で、SpO2が130を超えたり30くらいになったりと明らかにおかしな値が返ってきていたため、異常値を除いて30サンプルを取得、さらに異常と思われる値を除いて平均を表示するようにした。平均を求める際に、ばらつきが大きい場合は再測定するようにした。
- 異常値の判定(サンプリングを無視する条件)
- SpO2: 70未満もしくは100を超える場合
- 心拍数(HR): 40未満もしくは250を超える場合
- 再測定条件(30サンプル取得後)
- 再測定:SpO2vの標準偏差が10を超える場合、またはHRの標準偏差が30を超える場合。
- 一部再測定:標準偏差の2.5倍を超えるサンプリングは削除して再測定。
- 1秒に一回サンプリングしているが、異常値は無視しているので、測定が進まない場合がある。センサーの上に指を軽くおいて、20~30秒じっとしているとプログレスバーが進む。センサーで心拍が検出されると、赤色の四角が右下に0.1秒表示される。
- SpO2が95%以下の場合は赤色で文字が表示される。
- ビルド時の注意
- MAX30100lib ライブラリをインクルードして、Arduino IDEでビルドできる。