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

使用したパーツは以下のとおりです。
- M5StickC – スイッチサイエンス
https://www.switch-science.com/catalog/5517/ - M5Stack用心拍センサユニット – スイッチサイエンス
https://www.switch-science.com/catalog/5695/
合計金額3,000円以下です。

ArduinoのスケッチはMAX30100libライブラリに付属するサンプルスケッチMAX30100_Minimal.icoを改変しました。
- MAX30100lib – Arduino Libraries
https://www.arduinolibraries.info/libraries/max30100lib
変更した点は、以下のとおりです。
M5StickCのGroveポートをI2Cとして用いる事を宣言するコマンドを追加しました。これをしないと通信ができませんでした。
Wire.begin(32, 33);
LEDの電流量を50mAから7.6mAに変更しました。これをしないと測定値が飽和してしまい正しいデータが得られません。下記のサイトを参考にしました。
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
- 迷走の果て・Tiny Objects 脈拍センサー MAX30100を試す(3)正常動作??
https://edycube.blog.fc2.com/blog-entry-982.html
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
センサ部分には透明なセロハンテープを貼りました。これには下記のサイトを参考にしました。
- 脈拍センサー&血中酸素センサー (MAX30100)
https://ht-deko.com/arduino/pulse_i2c_max30100.html
センサに親指の腹を置いて10秒くらい待つとそれらしい数値が得られます。
作成したスケッチは以下のところに置きました。どうぞご利用ください。
「M5StickCでパルスオキシメーターを作る」への3件の返信
はじめまして。こちらの記事を参考に、同じ仕様で作成しました。が、M5Stack心拍センサーが、電源ON時に一回赤点灯してすぐに消え反応がありません。
もちろんLEDがつかないため、計測できません。
M5Stickは、掲載されている画像同様に表示されています。
確認項目がありましたらお聞かせください。
また大変失礼ですが、M5Stickを使わずArduino nanoにOLEDとMAX30100を繋いで、同じように測定できるCodeがあればとてもうれしいです。
無理を言いますが、よろしくお願い致します。
pmanさん、こんにちは
M5Stack用心拍センサユニットのLEDがつかず、計測できないとの事、
参考になるか分かりませんが、こちらの環境をお知らせします。
Ubuntu 18.04.4 LTS
Arduino IDE 1.8.10
ボードマネージャ esp32 version 1.0.4
M5StickC ライブラリ 0.2.0
MAX30100lib ライブラリ 1.2.0
お世話になります。
センサーに問題があることがわかりました。
お騒がせしました。
また何かありましたら、コメントさせて頂きます。m(__)m