M5StickCでパルスオキシメーターを作る

M5StickCでパルスオキシメーターを作りました。センサにはM5Stack用心拍セEンサユニット(MAX30100)を使用しました。新型コロナウイルス感染症(COVID-19)では自覚症状がないうちに肺炎が悪化するとの報告もありますので、日頃から血中酸素飽和度(SpO2)を測定するのもいいかもしれません。

計測の様子。親指をセンサ部分に軽く押し当てる。

使用したパーツは以下のとおりです。

合計金額3,000円以下です。

M5StickCとM5Stack用心拍センサユニットの組み合わせ。Grove用4ピンケーブルで接続する。ケーブルは心拍センサユニットに付属する。

ArduinoのスケッチはMAX30100libライブラリに付属するサンプルスケッチMAX30100_Minimal.icoを改変しました。

変更した点は、以下のとおりです。

M5StickCのGroveポートをI2Cとして用いる事を宣言するコマンドを追加しました。これをしないと通信ができませんでした。

Wire.begin(32, 33);

LEDの電流量を50mAから7.6mAに変更しました。これをしないと測定値が飽和してしまい正しいデータが得られません。下記のサイトを参考にしました。

pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

M5StickCのLCD表示に関わる部分を追加しました。また、表示の周期を2秒にしました。

M5.Lcd.fillScreen(BLACK);

M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(10, 10);
M5.Lcd.print("SpO2%");
M5.Lcd.setCursor(10, 100);
M5.Lcd.print("PRbpm");
M5.Lcd.setTextSize(5);
M5.Lcd.setCursor(15, 40);
M5.Lcd.printf("%2d", spo2);
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(20, 130);
M5.Lcd.printf("%3.0f", pulse_rate);
#define REPORTING_PERIOD_MS 2000

センサ部分には透明なセロハンテープを貼りました。これには下記のサイトを参考にしました。

センサに親指の腹を置いて10秒くらい待つとそれらしい数値が得られます。

作成したスケッチは以下のところに置きました。どうぞご利用ください。

https://github.com/attosci/M5StickC_PulseOximeter