基于 Arduino 与 MAX30100 的实时物联网心率监测系统
组件与材料
| 组件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| ProtoCentral MAX30100 脉搏血氧/心率传感器 | 1 |
| Micro-USB 数据线 | 1 |
| 杜邦线 | 若干 |
软件与云服务
- Arduino IDE
- Node.js
- Amazon Web Services (AWS) EC2
项目简介
本项目构建一套心率检测与监测系统:Arduino 采集 MAX30100 红外脉搏信号,计算 BPM(每分钟搏动数)并经串口输出;Node.js 读取串口数据,通过 Socket.io 实时推送至网页;配合 AWS EC2 可实现互联网远程查看。
1. Arduino 准备
上传 IR_Pulsr.ino,打开串口监视器确认输出 BPM 数据。代码采用双阈值法检测脉搏波峰,计算峰间间隔进而得出心率。
2. 安装 Node.js
- Windows:从 官网 下载安装包
- macOS:
brew install nodejs - Linux/Raspberry Pi:
sudo apt-get install nodejs
3. 安装依赖包
npm install -g socket.io serialport johnny-five express
4. 运行脚本
- 连接 Arduino,确认串口有数据输出
- 运行
node run.js,终端显示 “Communication is on!” - 浏览器打开
page.html查看本地实时心率
5. 配置 AWS EC2 实现互联网访问
- 登录 AWS 控制台,进入 EC2 启动实例
- 选择操作系统,创建/下载密钥对 (.pem)
- 通过 SSH 连接实例,重复步骤 2-4 安装环境并运行脚本
- 在 EC2 安全组开放 3005、4000 端口
- 修改
page.html中的 Socket.io 连接地址为 EC2 公网 IP - 浏览器访问 EC2 公网 IP:3005 即可远程监测
核心代码
IR_Pulsr.ino(Arduino 采集)
int UpperThreshold = 518, LowerThreshold = 490;
int reading = 0; float BPM = 0.0;
bool IgnoreReading = false, FirstPulseDetected = false;
unsigned long FirstPulseTime = 0, SecondPulseTime = 0, PulseInterval = 0;
void setup() { Serial.begin(9600); }
void loop() {
reading = analogRead(0);
if (reading > UpperThreshold && !IgnoreReading) {
if (!FirstPulseDetected) { 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(s) { console.log(s.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!'); });
page.html(前端页面)
通过 Socket.io 接收心率数据并显示在大号标题中;同时转发至 AWS EC2 实现远程同步。
制造工艺
- 树莓派运行 Windows 10 IoT Core 读取心率脉冲传感器:分步指南
- 远程心率监测系统:AWS IoT 告警 + 树莓派 Windows IoT 可视化
- 用 Arduino 打造绚丽显示器 Ambilight 系统
- 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
- 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
- Arduino 红外心率传感器 DIY:低成本高精度,串口绘图器实时波形
- 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
- 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- 基于 Arduino Nano 和 MAX30102 的心率监测仪(16x2 LCD 显示)
- 智能服装集成心率传感器实现可靠可穿戴监测
- 革新养蜂业:物联网传感器监测蜂群健康、助力作物授粉