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秒くらい待つとそれらしい数値が得られます。
作成したスケッチは以下のところに置きました。どうぞご利用ください。