生体センシングしてみる~脈波編(Tips)~
少し忙しかったので,放置していた脈波センサの開発ですが,
秋月にてパルスオキシメータという脈波計測用のセンサモジュールを見つけたので再開.回路は設計したけど,センサの取説に使えそうな回路が載っていたので楽をします.
計測の様子
計測の結果
何度やってもすぐに同じような波形になったから再現性は高い.ただ,ノイズが入っているのか,急に大きくなるところがあるので,表示側のミスなのか原因を調べる必要がありそう.脈拍を知りたいなら,”ある一定時間平均より大きい”,みたいな処理で分かると思う.
サンプリング周波数は100 Hzにしては心拍が速いな.どっかプログラム上のミスがあるっぽい.
使用した部品
NJL5501R搭載 パルスオキシメータ用・反射型センサ DIP化モジュールキット: 組立キット 秋月電子通商 電子部品 ネット通販
回路系
回路図
upveterでやってみた.割と使いやすいんだけど,PCB編集でオート配線とかがないから結局DesignSparkに戻りそう.
やっていることはセンサ出力にバンドパスフィルタを2回かけているだけ.
今までの計算と違うじゃないか,って話なんだけど,,,楽がしたかったんだ,,,
ハイパスフィルタで直流カットして,反転増幅器にコンデンサをくっつけたローパスフィルタで余計な信号をカットして,必要な信号を増幅しています.
でも,まぁ仕方ない計算していきます.
回路設計
キルヒホッフの第二法則よりバンドパスフィルタの入力側について
$$E_{i}=V_{ref}+V_{in}+V_{1}=V_{ref}+V_{1}$$
オペアンプは入力端子間電圧差はイマジナリーショートで0になります.
オームの法則より
$$V_{1}=(\frac{1}{sC_{1}}+R_{1})i_{1}$$
$$V_{2}=\frac{1}{sC_{2}}i_{2C}=R_{2}i_{2R}$$
キルヒホッフの第一法則とオペアンプの入力はインピーダンスが高く,電流が流れないので
$$i_{1}=i_{2}=i_{2R}+i_{2C}$$
整理すると
$$i_{1}=\frac{sC_{1}}{1+sC_{1}R_{1}}V_{1}$$
$$V_{2}=\frac{R_{2}}{1+sC_{2}R_{2}}i_{1}$$
キルヒホッフの第二法則よりバンドパスフィルタの出力側について
$$E_{o}=V_{ref}+V_{in}-V_{2}$$
$$=V_{ref}-V_{2}$$
$$=V_{ref}-\frac{R_{2}}{1+sC_{2}R_{2}}i_{1}$$
$$=V_{ref}-\frac{R_{2}}{1+sC_{2}R_{2}}\frac{sC_{1}}{1+sC_{1}R_{1}}V_{1}$$
$$=V_{ref}-\frac{sC_{1}}{1+sC_{1}R_{1}}\frac{R_{2}}{1+sC_{2}R_{2}}(E_{i}-V_{ref})$$
次元があってるので多分大丈夫.第二項の前の分数がハイパスフィルタで後ろの分数がローパスフィルタの項になっていて,カットオフ周波数が順に
$$f_{c.High}=\frac{1}{2\pi C_{1}R_{1}}\,f_{c.Low}=\frac{1}{2\pi C_{2}R_{2}}$$
となる.おっしゃ,ゲインを計算します.
$$s=j\omega$$
$$G(s)=\frac{sC_{1}}{1+sC_{1}R_{1}}\frac{R_{2}}{1+sC_{2}R_{2}}$$
とすると
$$|G(\omega)|=\frac{\omega C_{1}}{\sqrt{1+(\omega C_{1}R_{1})^2}}\frac{R_{2}}{\sqrt{1+(\omega C_{2}R_{2})^2}}$$
スルーパスする周波数では
$$f_{c.High}<<\frac{\omega}{2\pi}<<f_{c.Low}$$
$$\omega C_{2}R_{2}<<1<<\omega C_{1}R_{1}$$
であるから
$$|G(\omega)|=\frac{R_{2}}{R_{1}}$$
になる.スルーパスする周波数を0.5 Hz ~15 Hzくらい,
ゲインは50倍にすると,
$$C_{1}=100\,[uF]\,R_{1}=2.4\,[k\Omega]\,C_{2}=0.1\,[uF]\,R_{2}=100\,[k\Omega]$$
二段目のゲインを一段目の10分の1にすると
$$C_{3}=100\,[uF]\,R_{3}=2.4\,[k\Omega]\,C_{4}=1\,[uF]\,R_{4}=10\,[k\Omega]$$
になる.このとき
$$f_{c.High}=0.66\,[Hz]\,f_{c.Low}=16\,[Hz]$$
なので想定通り(手持ちにあったもので済ましたなんて言えない,,,).
パルスオキシメータ用反射型センサに使用した抵抗はすべて1kのもの.可変抵抗は10k.
計測結果のグラフを見て分かるけど,ゲインはもっと大きくて良さそう.最適解があるわけじゃないから用途とかに合わせて変更.
プログラム
計測に使用したマイコンはArduino,表示に使用したプログラムはProcessing
問題として複数のローカルフォルダを一つのレポジトリにあげるやり方が分かんない
ので,ProcessingのプログラムはArduinoの下の方にコメントアウトして書いてます.
脈波はこれで一旦終了.PCB基板にするのは気が向いてから,かな.