Arduino 红外心率传感器 DIY:低成本高精度,串口绘图器实时波形
项目背景
疫情期间医疗设备短缺,激发低成本医疗仪器自制需求。本项目利用红外发射/接收管与 Arduino UNO,成本不足 15 美元,即可实现指尖心率实时检测与波形绘制。
原理:透射式光电容积脉搏波(PPG)
核心物理现象:心脏泵血 → 指尖血管血液量周期性变化 → 组织对红外光的透射率随血容量变化而变化。红外发射管持续照射手指,接收管检测透射光强度,其波动即对应心跳波形。
环境光干扰消除:环境红外辐射叠加在信号上。软件启动时采样 5 次环境基线求平均,后续读取减去基线,得到纯脉搏信号:
int reading = 0;
for (int i=0; i<5; i++) reading += analogRead(A0);
int reading_final = reading / 5; // 环境基线
void loop() {
delay(100);
int Heart_rate = analogRead(A0) - reading_final; // 净信号
Serial.println(Heart_rate); // 串口绘图器显示波形
}
硬件连接
- Arduino UNO × 1
- 红外发射管(或拆解 IR 近接传感器取发射端)× 1
- 红外接收管(或拆解同款传感器取接收端)× 1
- USB 数据线供电
接线原理图:发射管串联限流电阻接 5V/GND;接收管接地与 A0 引脚(需上拉/分压电路,详见文中原理图)。发射管与接收管对置,手指置于中间。
替代方案(无专用元件时)
- 发射端:电视遥控器按住任意键不放
- 接收端:光敏电阻 + 查阅数据手册调整阈值滤除可见光
效果验证
Arduino IDE 串口绘图器实时显示标准心电波形:可见明显的收缩期峰与舒张期缺口。视频演示:Google Drive 链接
完整代码
// Heart_Rate_Sensor by YaSh
int reading = 0, reading_final, Heart_rate;
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
}
void loop() {
for (int i=0; i<5; i++) reading += analogRead(A0);
reading_final = reading / 5;
delay(100);
Heart_rate = analogRead(A0) - reading_final;
Serial.println(Heart_rate);
}
制造工艺
- 人工心脏:技术、历史与未来前景
- 树莓派 DIY 红外运动传感器:从原理到代码的完整指南
- 树莓派 PIR 运动传感器控制 LED 实战指南
- 两块 Arduino 通过 Firebase 传递温湿度数据
- DIY Photoshop 硬件控制台:Arduino Nano RP2040 实现快捷键外设
- 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
- 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
- Arduino Cloud 传感器塔:温度、动作与气体监测
- 实时心跳 LED 可视化:基于 uECG 与 Arduino Nano 的心率光环
- MAX30100脉搏血氧传感器与Arduino接入指南:获取PPG波形与SpO2