ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
必要なパーツと用品
| Arduino UNO | ×1 |
| ProtoCentral MAX30100 パルスオキシメーター&心拍センサー | ×1 |
| USB-A - Micro-USBケーブル | ×1 |
| ジャンパーワイヤー | ×1 |
使用するアプリとオンラインサービス
- Arduino IDE
- Node.js
- Amazon Web Services (AWS) EC2
プロジェクト概要
ArduinoとMAX30100センサーを使って心拍数(BPM:拍/分)を検出し、Node.jsとWebSocketを通じてブラウザ上でリアルタイム表示するIoTシステムを構築します。ローカルPCやRaspberry Pi、さらにはAWS EC2を経由してインターネット越しに監視することも可能です。
1. Arduinoの準備
付属のスケッチ(IR_Pulsr.ino)をArduinoに書き込み、シリアルモニタでデータが出力されることを確認します。

2. Node.jsのインストール
- Windows: nodejs.org からインストーラーをダウンロードして実行
- macOS: ターミナルで
brew install nodejs - Linux / Raspberry Pi: ターミナルで
sudo apt-get install nodejs
3. 必要なNode.jsパッケージのインストール
npm install -g socket.io
npm install -g serialport
npm install -g johnny-five
npm install -g express
4. スクリプトの実行
- ArduinoをPC/Raspberry Piに接続し、シリアルモニタでデータ取得を確認
- ターミナルで
node run.jsを実行 - 「Communication is on!」と表示されたら、ブラウザで
page.htmlを開く - これでローカルホスト上で心拍数が表示されます
インターネット経由でアクセスするには、AWS EC2の設定が必要です(次節参照)。
5. Amazon Web Services (AWS) EC2 の設定
- AWSアカウントを作成/ログインし、EC2コンソールへ移動
- 「インスタンスの起動」をクリック
- 任意のOSを選択(Amazon Linux 2など)
- 「確認と起動」→「起動」、キーペアを新規作成してダウンロード(.pemファイル)
- インスタンス起動後、セキュリティグループでHTTP(80)、カスタムTCP(3005, 4000)等を許可
- 「接続」からSSHコマンドを取得し、キーファイルがあるフォルダで実行してログイン
- EC2インスタンス内で上記の手順2〜4(Node.jsインストール、パッケージ導入、スクリプト実行)を繰り返す
- ブラウザでEC2のパブリックURLにアクセスし、インターネット越しに心拍数を確認








ソースコード
IR_Pulsr.ino(Arduino)
int UpperThreshold = 518;
int LowerThreshold = 490;
int reading = 0;
float BPM = 0.0;
bool IgnoreReading = false;
bool FirstPulseDetected = false;
unsigned long FirstPulseTime = 0;
unsigned long SecondPulseTime = 0;
unsigned long PulseInterval = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
reading = analogRead(0);
if (reading > UpperThreshold && IgnoreReading == false) {
if (FirstPulseDetected == false) {
FirstPulseTime = millis();
FirstPulseDetected = true;
} else {
SecondPulseTime = millis();
PulseInterval = SecondPulseTime - FirstPulseTime;
FirstPulseTime = SecondPulseTime;
}
IgnoreReading = true;
}
if (reading < LowerThreshold) {
IgnoreReading = false;
}
BPM = (1.0 / PulseInterval) * 60.0 * 1000;
Serial.print(BPM);
Serial.println(" BPM");
Serial.flush();
}
run.js(Node.js サーバー)
var SerialPort = require('serialport');
var Readline = SerialPort.parsers.Readline;
var express = require('express');
var socket = require('socket.io');
var app = express();
var server = app.listen(3005);
app.use(express.static('public'));
var io = socket(server);
io.on('connection', function(socket) {
console.log(socket.id);
});
var serialPort = new SerialPort('/dev/tty.usbmodem1421', { baudRate: 9600 });
var parser = new Readline();
serialPort.pipe(parser);
parser.on('data', function(data) {
io.sockets.emit('map', data);
});
serialPort.on('open', function() {
console.log('Communication is on!');
});
注意: シリアルポート名(/dev/tty.usbmodem1421)は環境に合わせて変更してください(Windowsなら COM3 等)。
page.html(Web表示画面)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src='nerve.js'></script>
<script src='speech.js'></script>
<meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.0/socket.io.dev.js"></script>
<title>Heart Rate Monitor</title>
<style>
body { margin: 0; background-image: url('https://www.skipprichard.com/wp-content/uploads/2015/07/bigstock-Red-Heart-On-Wooden-Background-56485448.jpg'); }
h1 { padding-top: 100px; font-family: monospace; text-align: center; font-size: 100px; }
</style>
</head>
<body>
<h1 id="hello"></h1>
<script>
var socket = io.connect("https://localhost:3005");
var socket_1 = io.connect("https://ec2-xxx-xxx-xxx-xxx.compute.amazonaws.com:4000"); // AWSのURLに書き換え
socket.on('map', function(data) {
socket_1.emit('map', data);
document.getElementById('hello').innerHTML = data;
});
</script>
</body>
</html>
回路図

製造プロセス
- Windows 10 IoT Core on Raspberry Piで心拍パルスを読み取る - ステップバイステップガイド
- リモート心拍数監視システム:AWS IoTアラート付き
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
- Arduinoで作る赤外線心拍センサー:低コスト・リアルタイム波形表示のステップバイステップガイド
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- Arduino IoT CloudとAlexaでテレビを音声操作:ステップバイステップガイド
- Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
- スマート衣類に統合された心拍センサーで信頼性の高いウェアラブル監視を実現
- IoTセンサーが養蜂業に革命をもたらす:蜂の健康監視と作物受粉の促進