【Arduino】MAX30100で心拍数と血中酸素濃度の測定【パルスオキシメーター】

はじめに
こんなこと、やります。 - Arduinoで心拍センサモジュール「MAX30100」の使い方 - MAX30100の基板改造 - シリアルモニタに心拍数と血中酸素濃度を表示
MAX30100基板の改造
私が購入したMAX30100モジュールの場合、残念ながらそのままではI2C通信できませんでした。下記のように「Initializing
pulse oximeter..」で「FAILED」となってしまいました。
原因を探っていたところ、こちらの動画で詳しく解説されていました。
MAX30100モジュールに内蔵されているプルアップ抵抗が、1.8Vにつながっていました。これではArduinoの入力しきい値をこえないため、I2C通信ができるはずありません。
そこで、動画内で紹介されていた改造方法をやってみました。1.8Vへつながる配線をカットし、プルアップ抵抗を3.3Vへ繋ぐように改造しました。細かい作業ではんだ付けしにくいですが、下の写真のようになんとか改造できました。
これで、後ほど紹介するプログラムでも動作するようになります。
配線
配線は次のとおりです。ArduinoのA4をSDA、A5をSCLとして使ってもらっても構いません。
Arduino | MAX30100モジュール |
---|---|
3V3 | VIN |
SCL | SCL |
SDA | SDA |
GND | GND |
ライブラリのインストール
Library Managerを開き「max30100」で検索して「MAX30100lib」をインストールしてください。

心拍数と血中酸素濃度測定プログラム
心拍数と血中酸素濃度測定プログラムです。ライブラリページのサンプルプログラムを使用しました。 https://github.com/oxullo/Arduino-MAX30100
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#define REPORTING_PERIOD_MS 1000
;
PulseOximeter pox
uint32_t tsLastReport = 0;
void onBeatDetected()
{
.println("Beat!");
Serial}
void setup()
{
.begin(115200);
Serial
.print("Initializing pulse oximeter..");
Serial
// 失敗する場合は基板のプルアップ抵抗が1.8Vにつながっている可能性あり!
if (!pox.begin()) {
.println("FAILED");
Serialfor(;;);
} else {
.println("SUCCESS");
Serial}
.setOnBeatDetectedCallback(onBeatDetected);
pox}
void loop()
{
.update();
pox
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
.print("Heart rate: ");
Serial.print(pox.getHeartRate());
Serial.print("bpm / SpO2: ");
Serial.print(pox.getSpO2());
Serial.println("%");
Serial
= millis();
tsLastReport }
}
指をセンサにかざせば、次のようにシリアルモニターで心拍数と血中酸素濃度が測定されるはずです。
ただし、あまり精度が良いとは言えません。本格的に使う場合は、プログラムを改良する必要がありそうです。
関連記事
- ArduinoでLCDに文字表示
- Arduino Unoのシールド基板で、アナログセンサのデバッガーを作ってみた
- DS18B20の使い方|Arduino・ESP32・Raspberry Pi
- ESP32でjson11を使ってJSONを簡単に扱う方法|JSON文字列のパース|配列をJSONに変換
- KiCad 6 でガーバーデータを書き出す方法【macOS編】