心拍数モニター回路の設計と製作:LM358・Arduino対応 完全ガイド
スマートウォッチやフィットネスバンドに搭載され、今や身近になった心拍数モニター。その仕組みを理解し、自分でセンサーモジュールを作ったり、Arduinoで波形を可視化したりする方法を、基礎原理から実装ステップまで詳しく解説します。
心拍センサーの基本原理:光電容積脈波法(PPG)

スマートウォッチの心拍計測
最も一般的なウェアラブル心拍センサーは、**光電容積脈波法** を用います。指先や手首に緑色/赤外線LEDを照射し、反射/透過光量の変化をフォトダイオードで検知します。心拍に同期して動脈血流量が変化するため、吸収光量が脈動し、それを電気信号として取り出します。
心拍センサーモジュールの基本構成
- 発光部: 赤外線LED (IR LED) または緑色LED
- 受光部: フォトダイオード / フォトトランジスタ
- 信号処理部: オペアンプ(増幅・フィルタリング)、コンパレータ(パルス整形)
- 出力: デジタルパルス(心拍同期)またはアナログ波形 → マイコンのADC/割り込みピンへ

指先透過型/反射型 脈波センサー回路
上図は代表的なアナログフロントエンド回路です。フォトダイオードの微小電流をコンデンサでDCカットし、第1オペアンプ(LM358等)で非反転増幅(ゲイン約1000倍、カットオフ周波数設定でベースライン除去)。第2オペアンプでコンパレータ動作させ、パルス波形に整形。トランジスタ(BC547)でレベルシフトし、マイコンへ出力。LEDが心拍同期で点滅します。
製作プロジェクト1:LM358 単体で作るアナログ心拍センサー
マイコン不要、オペアンプIC1個で心拍パルスをLED点滅で可視化するスタンドアローン回路です。

LM358心拍センサー回路図

LM358ピン配置
必要な部品
- LM358 デュアルオペアンプIC × 1
- 電解コンデンサ 4.7µF × 1、セラミックコンデンサ 100nF × 1
- 9V電池(006P) + スナップ × 1
- 赤外線LED (発光側) × 1、フォトダイオード/フォトトランジスタ (受光側) × 1 ペア
- 5mm 表示用LED (赤色等) × 1
- 抵抗:220kΩ×2、10kΩ、680kΩ、6.8kΩ、47kΩ 各1本
- 基板(ユニバーサル/ブレッドボード)、ハンダ付けツール
組み立て手順
- LM358 を基板に実装(ソケット推奨)。
- 発光用IR LED と 受光用フォトダイオード を指先が挟めるよう配置・固定(向かい合わせ/反射型)。
- 全抵抗・コンデンサを回路図通り実装。
- 電池スナップ接続、極性確認後電池装着。
- 指をセンサー部に静かに置き、表示LEDが心拍に同期して点滅すれば成功。
※ 全接点は確実にはんだ付けしてください。ブレッドボードでは接触抵抗でノイズが乗りやすいです。
動作原理
2個のフォトダイオードを使用し、片方を発光(IR LED駆動)、もう片方を受光として機能させます。指を挟むと、動脈の拍動に合わせて血液量/酸素飽和度が変化 → 透過/反射光量が変調 → 受光側フォトダイオードの電流が脈動 → オペアンプで増幅・整形 → パルス出力。
製作プロジェクト2:Arduino 接続型心拍センサーでBPM表示
市販の指クリップ型心拍センサーモジュール(例:KY-039, Pulse Sensor等、VCC/GND/Signal 3ピン)を Arduino に接続し、16x2 LCD に心拍数をリアルタイム表示します。

Arduino用指クリップ型心拍センサー
必要な部品
- Arduino Uno / Nano × 1
- 心拍センサーモジュール (指クリップ型、アナログ出力) × 1
- 16x2 キャラクタLCD (HD44780互換) × 1
- 10kΩ ポテンショメータ × 1 (LCDコントラスト調整用)
- 330Ω 抵抗 × 1 (LCDバックライト用)
- タクトスイッチ × 1 (測定開始トリガー用)
- ミニブレッドボード、ジャンパーワイヤ
配線(インターフェース)
- LCD データピン D4〜D7 → Arduino デジタルピン 2〜5 (または任意)
- LCD RS → Arduino ピン 6、E → ピン 7 (例)
- LCD V0 (コントラスト) → ポテンショメータ中央端子、両端を VCC/GND
- 心拍センサー Signal 出力 → Arduino アナログピン A0
- タクトスイッチ → デジタルピン 8 (プルアップ/プルダウン設定)
スケッチ(プログラム)
Arduino 標準の LiquidCrystal ライブラリを使用。センサーからのアナログ値を読み取り、ピーク検出アルゴリズム(閾値判定、最小間隔チェック等)で R-R 間隔を計測、BPM (拍/分) に換算して LCD 表示。スイッチ押下で新規測定開始。
※ コード全文は GitHub 等のリポジトリ、または本記事関連リンクからダウンロード可能です。
測定のコツ
- 親指以外の指(人差し指/中指推奨)をクリップに深く装着。
- 測定中は体を動かさず、ケーブルを揺らさない(アーティファクト防止)。
- 周囲光の影響を受けにくいよう、センサー部を遮光する(指で覆う/黒テープ等)。
応用分野
- 健康管理・フィットネス: 患者・アスリートの心拍モニタリング、トレーニング強度管理。
- 低コスト医療/介護機器: 高価な医療機器の代替・補完として、在宅見守りシステム等に組み込み。
- IoT ヘルスケア: BLE/Wi-Fi モジュール連携でスマホアプリ/クラウドへデータ送信、遠隔診療支援。

人体心拍測定の様子

スマホアプリ連携イメージ

患者健康見守りシステム構成例
核心原理の再確認:光電容積脈波法 (PPG)

指クリップ型脈波センサー
出典:Wikimedia Commons
「臓器を通過する光強度の変化から、その臓器の血液量変化を測定できる」という原理です。IR LED は生体組織への透過性が高く、ヘモグロビン吸収特性に合致するため最適な光源です。受光側には、光子電流変換効率の良いフォトダイオードや、光電流増効果を持つフォトトランジスタを用います。
おわりに
心拍センサーは、アナログ回路設計(オペアンプ、フィルタ、コンパレータ)とデジタル信号処理(ピーク検出、BPM算出)の両方を学べる優れた教材です。LM358版でアナログの基礎を固め、Arduino版でシステム統合とIoT展開へ進むのがおすすめの学習パスです。
更なる高精度化(動作アーティファクト除去、SpO2測定等)や、独自プロジェクトへの組み込みでお困りの際は、ぜひご相談ください。
産業技術
- Windows 10 IoT Core on Raspberry Piで心拍パルスを読み取る - ステップバイステップガイド
- リモート心拍数監視システム:AWS IoTアラート付き
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- Arduino NanoとMAX30102で心拍数モニターを自作:16x2 LCD表示対応
- KY-039心拍センサーで心拍数を測定する
- ワイヤレスECG心拍モニター:Arduino NanoとnRF24で作るウェアラブル設計
- PCBのパッド剥離問題:理解と修正
- CD4013 デュアルDフリップフロップ:ピン配置、応用例、回路例
- PCBパターン設計の決定版:トレース幅・電流・間隔計算からカット手法まで完全マスター
- BME680 4-in-1環境センサ徹底活用:温湿度・気圧・ガス(VOC)をArduinoで同時測定
- スマート衣類に統合された心拍センサーで信頼性の高いウェアラブル監視を実現