工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター

必要なパーツと用品

Arduino UNO ×1
ProtoCentral MAX30100 パルスオキシメーター&心拍センサー ×1
USB-A - Micro-USBケーブル ×1
ジャンパーワイヤー ×1

使用するアプリとオンラインサービス

プロジェクト概要

ArduinoとMAX30100センサーを使って心拍数(BPM:拍/分)を検出し、Node.jsとWebSocketを通じてブラウザ上でリアルタイム表示するIoTシステムを構築します。ローカルPCやRaspberry Pi、さらにはAWS EC2を経由してインターネット越しに監視することも可能です。

1. Arduinoの準備

付属のスケッチ(IR_Pulsr.ino)をArduinoに書き込み、シリアルモニタでデータが出力されることを確認します。

ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター

2. Node.jsのインストール

3. 必要なNode.jsパッケージのインストール

npm install -g socket.io
npm install -g serialport
npm install -g johnny-five
npm install -g express

4. スクリプトの実行

  1. ArduinoをPC/Raspberry Piに接続し、シリアルモニタでデータ取得を確認
  2. ターミナルで node run.js を実行
  3. 「Communication is on!」と表示されたら、ブラウザで page.html を開く
  4. これでローカルホスト上で心拍数が表示されます

インターネット経由でアクセスするには、AWS EC2の設定が必要です(次節参照)。

5. Amazon Web Services (AWS) EC2 の設定

  1. AWSアカウントを作成/ログインし、EC2コンソールへ移動
  2. 「インスタンスの起動」をクリック
  3. 任意のOSを選択(Amazon Linux 2など)
  4. 「確認と起動」→「起動」、キーペアを新規作成してダウンロード(.pemファイル)
  5. インスタンス起動後、セキュリティグループでHTTP(80)、カスタムTCP(3005, 4000)等を許可
  6. 「接続」からSSHコマンドを取得し、キーファイルがあるフォルダで実行してログイン
  7. EC2インスタンス内で上記の手順2〜4(Node.jsインストール、パッケージ導入、スクリプト実行)を繰り返す
  8. ブラウザでEC2のパブリックURLにアクセスし、インターネット越しに心拍数を確認
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター

ソースコード

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>

回路図

ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター

製造プロセス

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