techrmc’s blog

ICT大好きな中小企業診断士のブログです

Arduinoを用いた自作のパルスオキシメータ 〜技術でコロナを打倒しよう〜


コロナ禍真っ只中の時、パルスオキシメータがなかなか手に入らず、それなら自分で作ってしまおう、ということで製作したパルスオキシメータを紹介します。
マイコンArduino Uno R3を使用し、Arudinoシールド用ユニバーサル基板に血中酸素飽和度センサとLCDを搭載しました。

パルスオキシメータシールド回路図

パルスオキシメータシールドの回路図は下図の通りです。

パルスオキシメータシールド回路図

心拍・血中酸素飽和度のセンサは、心拍・酸素飽和度モニタモジュール MAXREFDES117#を利用しました。このモジュールのエンジンはMAX30102で、Arduino UnoからI2Cで制御します。また、このセンサは5Vで動作可能なため、Arduino Unoから供給される5V電源をそのまま直結しています。

LCDは、一般に広く用いられているSD1602HULBを利用しました。RV1はLCDコントラストを調整するための半固定抵抗、R2はLCDのバックライトを調整するための半固定抵抗です。

D1は動作状態を表示するためのLEDです。また、シールドをArduino Unoに載せるとArduino Unoのリセットボタンが押しづらくなってしまうため、シールド上にリセットボタンSW1を備えました。

Arudinoシールド用ユニバーサル基板に組み上げたパルスオキシメータシールドを下図に示します。

パルスオキシメータシールド

写真の中央部の水色枠に囲んだ部分がMAXREFDES117#で、ここに指を乗せて、心拍と血中酸素飽和度を測定します。

ソフトウェア

Arduino上のソフトウェアは、MAX30102のサンプルコードと、LCDへの文字表示プログラムを用いました。

測定の様子

Arduino Unoに搭載したパルスオキシメータシールドでの測定の様子を下図に示します。

測定の様子

HRが心拍数、SPO2が血中酸素飽和度です。

課題

心拍数はAppleWatchなど他の測定機器での測定結果とおおよそ同じ値を示しているかどうかで動作確認できました。しかし、血中酸素飽和度は他に測定機器がないため、キャリブレーションができず、表示されている値の正確さはわかりません。長い間息を止めると、若干、数値が下がるので、一応、動作はしているようですが、数値の精度は当てにならないというのが現在の課題です。機会があれば、医療機器として販売されているパルスオキシメータを入手して、キャリブレーションを試みたいと思います。