- 公開日:2024年02月28日
- | 更新日:2024年03月18日
ゼロからわかる!心拍センサの原理とマイコンとのI2C通信について_センサ原理編
はじめに
この記事で取り扱う心拍センサは、昨今猛威を振るっていたコロナウイルスの影響で広く世の中に認識されるようになったかと思います。また現在では医療の現場のみならずスマートウォッチなどに機能として付随しており、生活する中でも目にする機会が増えたのではないでしょうか?今回はそんな心拍センサをルネサス製マイコンRA6M3の評価キットを用いて動作確認した結果を記事にまとめました。第1弾として心拍センサの原理について深掘っていきます。
主に使用したデバイスや開発環境については以下の通りです。
評価ボード:EK-RA6M3G
IDE:e2studio 2023_7_version
FSP_version 4.6
心拍センサ:MAX30100
心拍センサの構成
まず初めに心拍数の中身を簡単に説明します。下の図中に付した番号順に何が起きているか解説します。
① ①の枠線内にある記号は発光ダイオードです。同様の記号が二つありますが、一つは赤色の光源でもう一つは赤外線です。両者の違いは発する光の波長で赤色光源は660nm、赤外線は880nmです。心拍数のみであればどちらか片方のみで測定することができますが、血中酸素濃度も測る場合はどちらも必要です。赤外線は目に見えませんが測定時には常に発光しています。
② 光は指先にあたって反射します。反射する際に光は血液中のヘモグロビンと結びついて減衰されます。後ほど説明しますがこの時にどれだけ光が弱くなって返ってきたかのデータを取得することによって心拍数を測定することが可能になります。
③ 減衰され反射した光はフォトダイオードにて検出されます。③の枠内にある記号がフォトダイオードを表しています。フォトダイオードは小さなソーラーパネルだと考えると分かりやすいです。検出する光の強さが大きいほど大きな電圧(小さければ小さい電圧)を取り出すことができます。
④ 取得された電圧値はアナログデジタルコンバータ(ADC)によってアナログ値(フォトダイオードが発電した分の電圧)がデジタル値に変換されます(今回は16Bitに分解されます)。この点は後ほど実際に取得されたデジタル値を見た後に解説したほうが分かりやすいので後術します。
⑤ LEDの光源から始まってようやくデジタル値に落とし込まれたデータはその後メモリに蓄えられます。蓄えられたデータを可視化するには心拍センサにデータを要求する必要があります。これは外部のマイコンが指令をだしてセンサがデジタル値を返すことで取得することができます。この際にマイコンとセンサ間でお互いにどのようなルールの下にデータをやりとりするかを決めなければなりません。今回はI2Cという通信方式でセンサからデータを取得します。
以上①~⑤の工程を経て心拍数を計測することが可能になります。
心拍数の測定原理
先ほどの工程②下線部の記述は心拍数の測定原理になります、ここではより詳しく説明します。
下図をご覧ください。
図中の上に描かれている図は、動脈中を流れる血液とヘモグロビンを表しています。たんこぶのように膨らんでいる理由は心臓がポンプのように拍動する度に一時的に血液とヘモグロビンの密度が高まるからです。
一方、図の下のグラフは心拍に応じて検出される電圧の時間変化を示しています。図中の上でヘモグロビンが密になっている部分に対しては検出する電圧値が小さくなり、ヘモグロビンが粗になっている部分に対しては電圧値が大きくなります。理由としては②で説明しましたが、ヘモグロビンは赤い光をよく吸収するのでヘモグロビンがたくさん流れている部分では赤い光はたくさん吸収されてしまい、フォトダイオードにはあまり光が返ってきません。その結果として発生する電圧値が小さくなるわけです。
そしてそのヘモグロビンの密度が大きくなるタイミングは心臓の拍動、すなわち心拍に依存します。最終的に心拍数を計算するには、この心拍1拍あたりの時間が求まればそこから60秒間の心拍数を算出することが可能になります。
以上が心拍数の測定原理となります。
実際に使用したデバイスの写真と接続図
さて、下の写真は実際に今回使用した心拍センサの画像です。左は未使用時に取った写真で右が使用中の様子です。使用中は赤色のライトが光っていることが分かります。カバーガラスの上に指を置くことで計測ができます。
下の写真は実際に心拍センサの動作確認中の写真です。
写真上部のモニタに映されているのは実際に開発したコードが書いてあるエディタです。今回はルネサスから無料でダウンロードできるe2studioをインストールして使用しています。
写真下部のPC画面に映されているのは先ほど④の工程で説明した16Bitのデジタル値が0.01秒ごとに映し出されています。拡大した図が下になります。
2進数の16Bitは10進数で0~65535なので正しい値が取得できていそうですね。
I2Cによる制御
⑤で説明したI2Cはシリアル通信方式の一つです。今回は評価ボードに搭載されているRA6M3というルネサス製のマイコンをMaster側、心拍センサをSlave側として使用しました。心拍センサに限らず様々なセンサとマイコンの通信方式でI2Cは使用されています。ほかにも代表的な通信方式としてはUARTやSPIなどがあります。通信方式の種類についてもっと気になる方は以下のページをご覧ください。
よく分かる! シリアル通信基礎講座 | 組込み技術ラボ (macnica.co.jp)
下の写真はI2Cを使用する際のコーディングの様子です。
e2studio上で “R_IIC_MASTER_Open”というI2Cを使用するために最初に行う初期化の関数をドラッグ&ドロップで書いています。従来の組込み開発では数千ページあるマニュアルの中から初期化のフローを確認して、その後様々なレジスタの設定を行う必要がありますが、ルネサスのRAマイコンではこのようにドラッグ&ドロップのみで初期化ができるため開発工数を非常に削減できます。
初期化後の実装については次回の技術記事で詳細に解説予定ですので更新をお待ちください。今回の技術記事では結果報告として実際に取得した電圧値の変化をグラフにしました!以下のグラフをご覧ください。
私が描画した図とは大きく異なりますが、縦軸が電圧値で横軸は時間です。電圧のピークが心拍のタイミングだと考えられます。このグラフだとだいたい1秒間隔で電圧値が落ちているので心拍数に直すと60くらいだと確認できます。マイコン側でこのピーク値を検知することでより正確な心拍数を計算することができます。
まとめ
この記事では心拍センサの構成と動作原理の解説、I2Cによる動作確認を行いました。普段身近に使われているセンサが実際にどういう原理で動いているかまでは意外にも知らなかった方も多いのではないでしょうか?世の中には心拍センサ以外にガスセンサ、温度センサ、圧力センサなどさまざまな計測機器があるので興味を持った方は調べてみてください!技術的好奇心をくすぐられること間違いなし!!!
次回の記事では、今回詳細に説明しなかったコーディングの部分を深掘る予定です。更新をお待ちください。