AD8232心率监测:从零搭建完整心电采集系统的快速指南
【免费下载链接】AD8232_Heart_Rate_MonitorAD8232 Heart Rate Monitor项目地址: https://gitcode.com/gh_mirrors/ad/AD8232_Heart_Rate_Monitor
这篇文章带你用 AD8232 芯片、Arduino 和 Processing 搭一套单导心电监测系统:接好线、贴上三个电极,就能在窗口里实时看到心电波形和心率。适合想动手做生物电测量的新手、创客和教师。
🛠️ 快速跑起来:最小配置看到心电波形
这一节给出从克隆项目到看到波形最快的完整路径,共 4 步,不需要改任何代码。原理留到后面再看。
1. 克隆项目并准备硬件
git clone https://gitcode.com/gh_mirrors/ad/AD8232_Heart_Rate_Monitor硬件清单:
- AD8232 心电监测模块(图中红色小板,SparkFun SEN-12650 同款)
- Arduino Pro 3.3V/8MHz 开发板
- FTDI Basic 串口转换模块(负责上传程序和传数据)
- 面包板、跳线若干
- 心电电极片 3 片(RA、LA、RL)
2. 面包板接线方式
对照面包板图,接线关系如下:
- 电源:模块 3.3V → Arduino 3V3,GND → GND,两边地线必须共
- 信号:OUTPUT → 模拟输入 A0
- 导联脱落检测:LO+ → D10,LO- → D11
- FTDI:TX、RX 交叉接到 Arduino 的 RX、TX,VCC → 3V3,GND → GND,DTR → RESET
3. 上传采集程序
用 Arduino IDE 打开 数据采集程序,开发板选 "Arduino Pro 3.3V/8MHz",选对端口后上传。
程序只有几十行:循环读取 A0 的值,以 9600 波特率从串口发出去;一旦检测到导联脱落,就改发一个 "!" 而不是数字。每圈延迟 1ms,采样率大约每秒两三百个样本,对心电显示足够。
4. 打开实时显示窗口
用 Processing 打开 可视化程序,按运行。
- 红色曲线:正常信号
- 蓝色横线:导联脱落,程序切到了告警显示
注意:示例代码默认打开串口列表里的第 3 个端口(Serial.list()[2])。先运行一次,看控制台打印的端口列表,如果你的 COM 口不在第 3 位,把下标改成自己的。
理解这套方案:弱信号怎么变成屏幕上的曲线
看到波形之后,可以开始追问"为什么"。这一节用一条链路把原理讲清楚,不需要电路基础。
心电信号非常弱。体表电位变化一般在 0.5–5 mV 量级,作为参照,5V 电源比它大约一万倍。这样的信号直接进单片机,就像在嘈杂街上听耳语,必须先经过"拾音加放大"的环节。
AD8232 就是那个前端芯片,专门处理这些脏活:
- 约 100 倍差分放大,把 mV 级信号抬到 ADC 能看清的范围
- 内置滤波器抑制基线漂移和 50/60Hz 工频干扰(右腿驱动技术)
- 导联脱落检测电路,电极接触不良时通过 LO+/LO- 引脚报警
所以整个系统像一场接力,三棒分工:
- AD8232 芯片:把微弱信号变成干净的模拟信号
- Arduino:10 位 ADC 把电压量化成 0–1023,从串口发出去
- Processing:把数字流画成曲线,并统计心率
这种拆法的好处是每层只做自己最擅长的事,层与层之间只有一个文本串口和几根线,简单可靠。这也是"传感器 + MCU + 上位机"做生物电测量最常见的形态。
核心模块拆解:硬件文件与软件分工
想改设计或者重新画板时,要能快速找到文件。仓库目录很扁平,这里一次理清。
| 目录 | 内容 |
|---|---|
| Hardware/ | 原理图 .sch 与 PCB .brd(Eagle v6.5.0),用于查看设计和重新打板 |
| Production Files/ | 生产拼版文件,用于批量面板生产 |
| Fritzing/ | 面包板接线图,即本文引用的两张图 |
| Software/ | Arduino 采集程序与 Processing 显示程序 |
两个软件程序的分工很明确:
Arduino 端只做两件事:把 D10/D11 配成输入做脱落检测,以及把 A0 的采样值从串口发出去。它不做任何滤波和数心跳。
Processing 端承担全部"解读"工作:
- 逐点画线,曲线画到屏幕右缘后清屏重画
- 样本值超过阈值 620 时算一次心跳,两次心跳的时间差换算成瞬时心率(60000 / 间隔毫秒数)
- 最近 500 次心率存入循环数组取平均,抹平单次波动
以后想改功能,先看这个分工:数据清洗放 Arduino 端,显示与统计放 Processing 端。
❓ 常见问题排查:心电波形不稳定的原因
波形跑出来不难,难在干净和稳定。这一节汇总最常见的坑,遇到问题可以按顺序对照。
出现一条蓝色横线不是故障,是导联脱落检测在起作用。电极片翘起或皮肤接触断开时,程序会画出蓝色直线提示,重新贴好电极即可。
完全没有曲线按顺序检查:FTDI 的 TX/RX 是否交叉接对、Processing 里串口是否打开成功、两端波特率是否都是 9600、上传时 Arduino 选的板子型号是否正确。
基线漂移大、波形乱单导电路对运动和工频干扰敏感。远离电源排插、电机、手机;电极引线尽量短;测量时别用手碰线。
角落里的"BPM"不像心率这里有个容易误会的点:那个数字其实是当前样本值,不是心率。真正的 BPM 由 500 次平均算出,但示例没有把它画出来。把显示一行里的inByte换成BPM变量,才能看到真实数字。
端口下标对不上不同系统枚举串口的顺序不同。运行一次看控制台输出的端口列表,把代码里的下标改成你的端口,或干脆写死端口名。
几个信号调优点:
- 阈值 620 对应这块板的典型输出电平,如果你的波形整体偏高或偏低,可以微调 threshold
- 想让曲线更平滑,在 Arduino 端加一个移动平均滤波,对连续 5–10 个样本取均值再发送
- 需要更高精度时可以调高串口波特率,9600 只是示例取值,不是上限
扩展方向:心率监测系统的二次开发思路
演示程序只做了"显示",但数据通路已经完整,从它往外长出的功能都很自然。
- 数据记录:把 A0 样本连同时间戳写进 SD 卡,事后离线分析
- 心率变异性(HRV):你已经有了 R-R 间隔,做均值、标准差等统计是健康评估的常用起点
- 远程传输:加蓝牙或 WiFi 模块,把串口数据搬到手机或另一台电脑
- 心律失常初筛:先用简单规则排除明显异常(间隔过长、过短),再考虑模式分类
- 显示升级:把 Processing 换成网页或小屏幕,做成穿戴形态
资源汇总:
- 项目克隆:见上文 git clone 命令
- 接线参考:Fritzing/ 目录下的两张 Fritzing 图
- 原理图与 PCB:Hardware/ 目录下的 .sch 和 .brd 文件
- 面板生产:Production Files/ 目录
- 许可:硬件设计为 CC BY-SA 3.0(Share-alike),代码为 Beerware,可自由使用和修改
- 芯片细节:查阅 AD8232 数据手册
整套系统就是一个传感器小板、一个单片机和一个串口窗口。先把稳定的波形跑在屏幕上,后面的滤波、统计、存储和传输,都交给你自己发挥。
【免费下载链接】AD8232_Heart_Rate_MonitorAD8232 Heart Rate Monitor项目地址: https://gitcode.com/gh_mirrors/ad/AD8232_Heart_Rate_Monitor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考