カテゴリー
IchigoJam

IchigoJamと照度センサ・LEDを使った心拍数計の製作と実験

IchigoJamを使って脈拍を測る実験をしてみました。指先にLEDを使って光を当て、指先へ血液が流れる際に生じる僅かな反射を読み取ります。IchigoJamのモニターには、その波形を表示してみました。
※測定原理の実験を目的とした情報です。得られたデータを測定結果として用いたり、医療目的などに使用することはできません。

CQ出版社のIchigoJam用マイコンボードを使った場合の接続例。もちろん、純正のIchigoJamで使用することも出来る。オペアンプの出力をIN2へ入力した。またVCCとGNDの接続も行った。

ブレッドボード上には、LEDと照度センサを近接させて実装しました。測定時には、LEDと照度センサの両方を指先で触れます。指を触れてから、10秒ほどじっとしていると、表示を自動調整し、脈拍の波形が表示されるようになります。
測定中は指だけでなく身体や足を動かしたりしても、その影響で波形や測定値が乱れます。波形が安定しない場合は、LEDやセンサの位置を少し変えてみます。

心拍数の測定時の様子。LEDと照度センサの両方に指先をあてた状態で、10秒ほど待つと、IchigoJamの画面に心拍数が表示される。指だけでなく身体を動かすと、その影響を受けるので測定中はじっとしておく。

照度センサNJL7502LをIchigoJamへ接続する

照度センサにはNJL7502Lを使用しました。このNJL7502Lはフォトトランジスタなので、出力インピーダンスがあまり高くありません。したがって、インピーダンス変換を行わずにAD変換器に接続しても照度値を得ることが出来ます。
ところが、脈拍を測定するような場合は、照度値の変化が非常に小さいので、信号電圧を増幅する必要がありました。
ここでは2個入りのオペアンプLM358を使用し、100倍の電圧増幅を2段、行いました。写真の右側の赤色のジャンパー線がオペアンプの出力です。IchigoJamのIN2入力端子へ接続します。

ブレッドボード上に製作した脈拍測定用の回路。左側で点灯しているのがLED。その右の緑色のデバイスが照度センサNJL7502L。ブレッドボードの奥の方の8ピンのICはオペアンプLM358。入力抵抗1kΩ、フィードバック100kΩの負帰還増幅を行った。

実際の測定時の動画(YouTube利用)を以下に示します。Webカメラでの撮影につき、あまり綺麗ではありません。マイコンボードの左下の赤色のLEDが脈拍に同期して点滅しているのが分かると思います。

試作した回路図(ブレッドボード)

試作した回路。ブレッドボードジャンパーは一般的なU字状のものを使用した。赤=スルーホール2個分、橙=3個分、黄=4個分など。画像をクリックすると拡大表示できる。

脈拍測定・プログラム

IchigoJamの画面に波形を表示しつつ、脈を打つたびに、心拍数を計算し、画面下部へ表示します。
少しプログラムが長くなっているのは、脈拍測定を行うために必要な3つの機能を付与したからです。
一つ目は画面に合わせて振幅を自動調整する機能です。これがないと、脈拍の変化が小さすぎてみることが出来ません。二つ目は、DC成分をオフセットする機能です。一般的には平均値などを使用すると思いますが、ここでは、現在の値だけでオフセット調整ができるように工夫しました。
また、例えばセンサへ指を接触させたり、指を動かしたときに大きな波形が生じても、しばらくすると徐々に見やすい波形になるように調整するように動作します。このあたりは試行錯誤しながら調整しました。
そして、最後の機能が心拍数測定機能です。様々な方法が考えられますが、すでに波形を調整表示しているので、その表示用の数値を利用するようにしました。
?:new:cls
1 cls:?"シンパク ケイ"
2 ?"VCC:LED":?"IN2:PD
3 ?"CC BY W.Kunino
4 T=0:clt
rem https://bokunimo.net/ichigojam/
100 'SETUP
110 A=ana(2)
120 ifA>20letL,A-21elseL=0
130 ifA<1000letH,A+21elseH=1023
140 Z=21*A/511:C=asc("+")
200 'MAIN
210 A=ana(2)
240 ifA<LletL,A:C=140
250 ifA>HletH,A:C=131
260 ifH-L>511goto100
300 'DISP
310 Y=43-42*(A-L)/(H-L):lc31,Y/2
320 ?chr$(131+Y%2*9);
330 ifZ=YletS,S+1
340 ifY<11gsb500
350 ifY>21T=1
360 lc31,0:?"-";:lc31,22:?"-";
370 scroll3
380 lc30,23:?chr$(C);
390 C=0:Z=Y
400 'ADJ DC
410 ifS<64orH-L<42goto200
420 ifH-A>A-L+21letH,2*A-L
430 ifH-A<A-L-21letL,2*A-H
440 ifH-L<42letH,H/2+L/2+22:L=H/2+L/2-21
450 S=0:T=0:C=asc("#")
460 goto200
500 'CALC
510 if!Trtn
530 B=tick():ifBletB,3600/B
540 ifB>200rtn
550 led1:lc28,23:?B;:T=0:clt:beep:led0
560 if!inkey()and!btn()rtn
570 lc0,23:?"PAUSE";:wait180
580 ifbtn()goto580
590 rtn

応用に向けて

この実験は、IchigoJam初心者向けの実験キット+サンプルプログラムのようなものが出来ないかと考えて行ってみました。
今回の実験で、簡単な回路で脈拍を得ることが出来、また心拍数を計測することも出来ることが分かりました。しかし、まだ使い勝手は良くありません。指先が少しでも動くと、その影響を受けてしまいます。まだまだ改良が必要です。また、プログラムが長く、分かりにくいのも課題です。
一方、キット+サンプルが出来れば、様々な応用が考えられます。心拍数の上昇を検出して、ドキドキ度や
そ発見器として使用したり、心拍に合わせてモニターやマトリクスLEDへ表示してみたり、自転車などの後ろのLEDを心拍数に合わせて点滅させても面白いでしょう。
同じ映画を複数人で見ながら、各自の心拍数の変化を調べてみるのも楽しそうです。

市販のセンサを使用してみる(追記情報)

市販されているパルスオキシメーター用センサ(NIHON KOHDEN製SpO2プローブ)を分解してみました。本センサは、約2.5mm角のフォトダイオードと、チップLEDで構成されていました。チップLEDは2色入りです。赤色と赤外線を交互に照射し、その反射率の違いから血中の酸素飽和度を測定することが出来ます(この原理は、同社が発明したもので、現在、世界中の医療に用いられている)。
試作したブレッドボードのセンサとLEDを取り外し、本パルスオキシメーター用センサのフォトダイオードと赤色のLEDを接続して動作を確認してみたところ、同様の脈拍の測定結果が得られることを確認済みです(酸素飽和度の測定は未確認)。

NIHON KOHDEN製のパルスオキシメーター用SpO2プローブを分解してみた。センサ部には約2.5mm角のフォトダイオードが用いられていた。血中酸素飽和度を測定するために、2色のチップLEDが実装されていた。プローブの内部配線色は、緑=赤外線LEDカソード1.3V、黄=赤LEDカソード1.7V、赤=各LEDアノードコモン、黒=フォトダイオードのカソード、白=フォトダイオードのアノード。

安定動作させるためのポイント(追記情報)

安定動作させるために、様々な増幅回路やセンサ、LED、そして上記のような市販のSpO2プローブの解析などを検討してました。実際の人体で測定すると、測定点が異なるので測定した振幅については再現性が少なく、定量的に評価するのは難しく、細かな違いを追い込むことはできていませんが、実験を繰り返す中、得られた印象を以下にまとめました。
簡単に動作を安定させる方法としては、LEDの輝度を上げるのが、最も簡単でしょう。
  • LEDは高輝度のものを使用する
    これは、安定動作のための最大のポイントだと思います。いくつかのLEDを試しましたが、高い輝度で照射する方が安定します。測定の瞬間だけ、より大きな電流を流すことで、より安定した測定が出来るようになるでしょう。
  • LEDの色は、あまり関係ないが、なるべく赤色が良さそう
    私の行った実験では、赤色LEDを使うと振幅が大きく、安定した結果が得られました。また、青色でも、同等の結果が得られました。ただし、この結果は青色LEDの輝度が高ったためだと考えられます。多くの市販のプローブには、赤色が用いられています。これは、波長の長い赤色の方が、皮膚での反射が少ないうえ、赤色の血液を反射しやすいためでしょう。ちなみに、SpO2プローブの赤外線LEDでも試してみました。市販品だけあってこちらも安定した測定が行えました。
  • 照度センサの種類
    使用した照度センサNJL7502Lのパッケージには、赤色の光を通しにくくする色素が含まれており、青色と赤色の感度が同等になるように調整されています。そこで、一般的な砲丸形状のフォトダイオードに変更してみました。しかし、実験の結果、かえって不安定になりました。周囲の赤外線などの影響を受けやすくなったのと、出力インピーダンスが下がり電気ノイズの影響も受けやすくなったためでしょう。フォトダイオードを用いる場合は、市販のプローブのように、面積の大きなものを用てより多くの光電流を収集したほうが良いでしょう。
  • 増幅回路
    使用したオペアンプは一般的な汎用オペアンプです。負帰還で電圧を10,000倍に増幅させています。フォトダイオードを使用した場合は、1段目を電流増幅(インピーダンス変換)するような回路に変更する必要があります。

様々な組み合わせで実験してみたところ、照度センサNJL7502Lと赤色の高輝度LEDの組み合わせが良好だった。

by ボクにもわかるIchigoJam用マイコンボード

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es