Arduinoで作る赤外線心拍センサー:低コスト・リアルタイム波形表示のステップバイステップガイド
背景
新型コロナウイルスの流行で医療機器の需要が高まる中、低コストで心拍を検出・リアルタイムプロットできるDIYセンサーを開発しました。材料費15ドル未満で、指をセンサーに置くだけで心拍波形を取得できます。
原理
指の不透明度が血液量によって変化することを利用します。心拍で血液が指先に送り込まれると血管内の血液量が増えて指が不透明になり、引くと透明度が増します。IRエミッターから指に光を照射し、透過光を反対側のIRレシーバーで検出します。透過光量は血液量に応じて変化するため、検出値をプロットするとリアルタイムの心拍波形が得られます。Arduino IDEのシリアルプロッターで波形を表示可能です。
ノイズ除去による精度向上
周囲の物体(人体含む)から放出される環境IRノイズを除去するため、起動時に5回の環境光読み取り平均を取得し、以降の測定値からこの平均値を差し引くことで精密な信号を抽出します。
// 環境ノイズの平均値を取得
for(int i=0; i<5; i++) {
reading = reading + analogRead(A0);
}
reading_final = reading / 5;
delay(100);
Heart_rate = analogRead(A0) - reading_final; // ノイズ除去後の精密値
Serial.println(Heart_rate); // プロッター出力
ハードウェアセットアップ
IRエミッターとレシーバーを指を挟むように配置し、Arduinoに接続します。回路図と実装写真を参照してください。エミッターは指の片側、レシーバーは反対側に配置し、指を通過した光を検出します。
出力例
動作デモ動画: Google Drive でリアルタイム心拍波形を確認できます。
代替ハック(部品がない場合)
IRリモコンのボタンを押しっぱなしにしてエミッター代わりに、CdSセル(フォトレジスタ)をレシーバー代わりに使用可能です。データシートでIR感度を確認して閾値調整してください。
完全コード
// Heart_Rate_Sensor code by YaSh
int reading = 0;
int reading_final;
int Heart_rate;
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
}
void loop() {
for(int i=0; i<5; i++) {
reading = reading + analogRead(A0);
}
reading_final = reading / 5;
delay(100);
Heart_rate = analogRead(A0) - reading_final;
Serial.println(Heart_rate);
}
回路図
IRエミッター・レシーバーとArduinoの接続図を提供しています。
製造プロセス
- 人工心臓:技術、歴史、将来展望
- Raspberry Pi用DIY赤外線モーションセンサー構築 - ステップバイステップガイド
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Firebase経由で2台のArduino間を温湿度データで連携するIoTチュートリアル
- Arduino Nano RP2040で作るDIY Photoshopコントロールコンソール
- Arduino Unoベースの人間検知レスキューロボット:センサー統合ステップバイステップ
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- ESP32で作るIoT環境モニター:温湿度・気圧・CO2をWebダッシュボードで可視化
- リアルタイム心拍LEDビジュアライザー – ECGパワード