Arduino 入門
Lesson 47
【脈拍・心拍センサ その1】
こにんちは、管理人のomoroyaです。
センサーの使い方の基本を学習する入門編。
※フォトダイオードとフォトトランジスタの違い
フォトトランジスタは、フォトダイオードとトランジスタが一体化した構造。
フォトダイオードの出力電流(光電流)をトランジスタで増幅してから出力する素子。
世の中には、まだまだ色々なセンサーがあります。
これからも、色々なセンサーで遊んでいきます。
本記事はLesson 47 【脈拍・心拍センサ その1】です。
名前だけ見るとすごそうな感じですが、赤外線LEDとフォトトランジスタを組み合わせただけのセンサです。
精度は?ですが、遊びで使う分には面白いかも。
単品で部品をそろえれば自作も可能です。
本Lessonで使用する脈拍・心拍センサは以下が同等品となります。
※プライム対応品は見つからない・・・。
赤外線LED、フォトトランジスタ、抵抗を単品で揃えブレッドボード上に作ってしまってもOKです。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
本Lessonで使用する「脈拍・心拍センサ」の動作は難しくありません。
ただし、検出したデータを処理する工夫が必要です。
原理は「脈拍センサ」で調べればででくるので興味のある方は調べてみてください。
簡単に説明すると・・・
- 血液中のヘモグロビンが赤外線を吸収する性質がある
- ヘモグロビンは波長700~1200nmの赤外線を吸収しやすい
- 心拍によって血流がかわる = ヘモグロビンの量が変わる
- ヘモグロビンの量が変わることで透過する赤外線の量が変わる
上記を検出することで脈拍を測定。
ということで、本Lessonで使用するセンサは「透過型脈拍センサ」に分類されると考えます。
上記の原理から簡易的なものでよければ下記3つで作れます。
- 赤外線LED(IR LED)
- フォトトランジスタ
- 調整用の抵抗
上記は本Lessonで使用するモジュールに実装されているものとなります。
実際には、微妙な調整が色々必要となります。
自作するなら出力をオペアンプ等を使って増幅するとか回路を追加した方が良いです。
ということで、このLessonで紹介するセンサは・・・
あくまでも、「脈拍、測れてそう・・・」って感じで遊んでください。
Lesson 47 目標
本Lessonの目標は以下です。
2.脈拍・心拍を検知するスケッチを描く
3.脈拍・心拍センサで遊ぶ
いつものように、遊ぶことが重要です。
今回のセンサも動作は単純。
ただし動作の理屈を理解するためには電子回路の知識が少し必要・・・。
回路がわからなくても遊べる、使える、作れるのがArduino の良いところ。
準備
ではLessonの準備に取り掛かりましょう。
部品は「脈拍・心拍センサ」のモジュールのみ。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - Sndy 3個のKy-039指検出ハートビートセンサーモジュール指検出測定Geekcreit for Arduino-公式のArduinoボードで動作する製品
- M-M Jumper wire(UNOと部品をつなぐための配線)
- M-F Jumper wire(UNOと部品をつなぐための配線)
※ブレッドボードはセンサとUNOを直接つなぐ場合不要です。
※ジャンパワイヤーは「M-M」「M-F」を必要に応じて使い分けてください。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
「脈拍・心拍センサ」のモジュールについて説明していきます。
脈拍・心拍センサ 実物写真
下の写真が脈拍・心拍センサの実物写真です。
本Lessonで使用するものは、回路が基板実装されたもの。
赤外線LED、フォトダイオード、抵抗で構成されています。
管理人の持っている脈拍・心拍センサははずれを引いてしまいました。
赤外線LEDの足が短すぎて、うまく光をフォトダイオードに向けられない・・・。
脈拍・心拍センサ 回路図
脈拍・心拍センサセンサの回路について解説します。
実装されている部品は以下。
個別に電子部品を購入してブレッドボード上に作成したい場合は下記を揃えてください。
- 赤外線LED(IR LED) 1個
- フォトトランジスタ(型番:PT908-7C-F) 1個
- 抵抗:10kΩ 1個
- 抵抗:330Ω 1個
個別に揃えればブレッドボード上に作れます。
別の機会に作ってみたいと思います。
回路図も記載しておきますが興味のない方はすっ飛ばしてください。
※間違えていたらご連絡ください。
- VCC Arduinoの5Vに接続
- GND ArduinoのGNDに接続
- S Arduinoのアナログ入力ピンへ接続
簡単に回路動作を説明すると以下。
- 赤外線LEDとフォトトランジスタの間に指を入れる
- 心拍に合わせて変化する赤外線をフォトトランジスタで受け取る
- 心拍に合わせて出力ピン(S)に出力される電圧が変化する
- Sに出力される電圧レベルをArduinoのアナログ入力ピンでAD変換する。
自作するなら10kΩは半固定ボリュームなどを使って調整できるようにしておくとよいと思います。
脈拍・心拍センサ 仕様
センサモジュール自体に仕様という仕様は特にないです。
気にするとしたら赤外線LEDとフォトトランジスタの仕様でしょうか。
自作する場合は抵抗を忘れずに・・・。
本Lessonは遊び、学習を想定しています。
Arduinoの仕様範囲内で使用していれば問題になることもありません。
遊び、学習以外での使用用途をお考えの場合はデータシートを必ず確認しましょう。
実践 回路作成とコード作成
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にコードを書いて、脈拍・心拍センサを動かしていきましょう。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図
脈拍・心拍センサが実装されたモジュール端子を接続していきます。
Arduinoはアナログ入力としてA0を使用。
あとは、5VとGNDのみ。
回路図がこちら。
こちらがブレッドボード図。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
下図に示すように、用意した部品を使用して接続しましょう。
部品は「脈拍・心拍センサ」のみとなります。
※センサが実装されたモジュール
部品は1個、接続は簡単です。
脈拍・心拍センサと接続するジャンパーワイヤーはF-Mを使用してます。
そのため、ブレッドボードもいりません。
使用するポートは、アナログ入力A0、5V、GND。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。
コマンド説明
本Lessonでは、特に新しいコマンドはありません。
サンプルコード
赤外線センサ、フォトダイオードのみという単純な回路だけにスケッチには工夫が必要です。
本LessonはフォーラムのProgramming Questionsでのやり取りを参考にさせていただきました。
もう少しスケッチを追加しようかと思っています。
下記でデータ自体は取得可能。
//Lesson 47 脈拍・心拍センサ(Detect the heartbeat module) //指での脈拍・心拍の検出 //https://omoroya.com/ // Pulse Monitor Test Script int sensorPin = 0; // センサの出力ピン double alpha = 0.75; // 以前の値の平均の75%と現在の値の25%を使用して、値を平均化する int period = 10; // 読み取り時間設定 void setup () { Serial.begin (115200); } void loop () { static double oldValue = 0; // 平均化に使用 int rawValue = analogRead (sensorPin); // センサの出力ピンをアナログピンで読み取り double value = alpha * oldValue + (1 - alpha) * rawValue; // 前値75%と新値25%を使用して平均を計算 Serial.print (rawValue); // アナログピンで読み取った値の表示 Serial.print (","); // 区切り文字 Serial.println (value); // 計算値の表示 oldValue = value; // 計算値を前値として格納 delay (period); // 測定周期 }
動作確認 脈拍・心拍の確認
では、さっそく動作を確認していきます。
赤外線LEDとフォトトランジスタの間に指を入れてください。
管理人の持っているセンサは外れを引いたらしく、赤外線LEDが短すぎてうまく調節ができません・・・。
- 間に指なし → シリアルプロッタで脈拍・心拍が確認されない
- 間に指あり → シリアルプロッタで脈拍・心拍を確認
■間に指なしの状態
■間に指ありの状態
まとめ
本Lessonは、以下を目標としました。
2.脈拍・心拍を検知するスケッチを描く
3.脈拍・心拍センサで遊ぶ
本Lesson、いまいち測定できているのかどうか?っぽい感じがしますが・・・
指を挟んだ時と挟んでいない時で差が出ていれば測定できているということです。
測定するこつは・・・
他の光は遮断して脈拍・心拍を測定すること!
Lesson 47 【脈拍・心拍センサ その1】 はここまで。
自作もできます。
どうすれば精度向上ができるかを考えて遊ぶのも面白いかも。
疑問点、質問などありましたら気軽にコメントください。
次回、Lesson 48は 【脈拍・心拍センサ その2】。
Lesson 47は透過型でした。
Lesson 48は反射型で遊んでみます。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント