用Arduino Nano和AD8232模块DIY一个心率监测手环(附完整代码与电路图)

张开发
2026/4/20 23:52:57 15 分钟阅读

分享文章

用Arduino Nano和AD8232模块DIY一个心率监测手环(附完整代码与电路图)
用Arduino Nano和AD8232模块DIY一个心率监测手环附完整代码与电路图在智能穿戴设备日益普及的今天心率监测已成为健康管理的基础功能。但对于电子爱好者而言商业产品的封闭性往往限制了探索的可能性。本文将带你用不到200元的成本打造一个完全开源的心率监测手环原型。不同于市面上简单的光电式心率检测方案我们采用医疗级的AD8232心电模块通过电极直接捕捉心脏电信号实现更精准的测量。这个项目特别适合想深入了解生物电信号采集的Arduino玩家需要可定制心率监测方案的创客对医疗电子设备原理感兴趣的学生群体你将获得完整的硬件连接方案含电极选型技巧经过实际验证的滤波算法代码3D打印外壳设计文件信号干扰处理实战经验1. 硬件准备与电路设计1.1 核心元件选型AD8232模块是这个项目的心脏它能将微伏级的心电信号放大到Arduino可读取的范围。市面上常见两种版本基础版约60元仅包含必要滤波电路增强版约90元额外集成右腿驱动电路抗干扰能力更强建议选择增强版特别是在移动场景下。以下是主要元件清单元件规格数量备注Arduino NanoATmega328P1也可用Pro MiniAD8232模块带RLD电路1推荐HiLetgo品牌电极片一次性医用3直径3cm以上为佳锂电池3.7V 500mAh1带充放电保护OLED屏0.96寸 I2C1显示实时心率1.2 关键电路连接电极片的正确贴放至关重要RA右臂右侧锁骨下方LA左臂左侧肋骨下方RL右腿任意下肢位置降低共模干扰接线示意图AD8232 Arduino Nano OUT → A0 LOD → D2 LOD- → D3 3.3V → 3.3V GND → GND注意电极导线建议使用屏蔽线长度不超过50cm并避免与电源线平行走线2. 软件实现与信号处理2.1 基础数据采集先安装必要的库#include Wire.h #include Adafruit_GFX.h #include Adafruit_SSD1306.h初始化代码框架void setup() { Serial.begin(115200); pinMode(2, INPUT); // LOD pinMode(3, INPUT); // LOD- if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(OLED init failed); while(1); } }2.2 自适应滤波算法原始心电信号通常包含三类主要噪声基线漂移0.5Hz工频干扰50/60Hz肌电噪声20-500Hz实现移动平均滤波#define FILTER_WINDOW 20 int filterBuffer[FILTER_WINDOW]; int filterIndex 0; int movingAverage(int raw) { filterBuffer[filterIndex] raw; filterIndex (filterIndex 1) % FILTER_WINDOW; long sum 0; for(int i0; iFILTER_WINDOW; i) { sum filterBuffer[i]; } return sum / FILTER_WINDOW; }2.3 心率计算逻辑采用峰值检测算法bool detectPeak(int value, int threshold) { static int lastValue 0; bool isPeak (value threshold) (lastValue threshold); lastValue value; return isPeak; } void loop() { int raw analogRead(A0); int filtered movingAverage(raw); if(detectPeak(filtered, 500)) { unsigned long currentMillis millis(); static unsigned long lastPeak 0; if(lastPeak 0) { int bpm 60000 / (currentMillis - lastPeak); display.clearDisplay(); display.setCursor(0,0); display.print(HR: ); display.print(bpm); display.display(); } lastPeak currentMillis; } }3. 佩戴优化与干扰处理3.1 常见问题排查表现象可能原因解决方案数据跳动剧烈电极接触不良用酒精清洁皮肤基线持续漂移呼吸运动影响改用胸带式固定周期性干扰电源工频噪声开启RLD功能信号完全消失导线断裂检查焊点连接3.2 运动场景优化在移动测试中我们发现三个关键改进点电极固定方式改用导电硅胶腕带比一次性电极更耐用电源隔离在AD8232的VCC与GND间加装100μF钽电容软件去噪增加滑动窗标准差检测自动剔除异常值运动模式下的改进算法float calculateStdDev(int *buffer, int size) { float mean 0, sum 0; for(int i0; isize; i) mean buffer[i]; mean / size; for(int i0; isize; i) sum pow(buffer[i] - mean, 2); return sqrt(sum/size); }4. 产品化改进方案4.1 3D打印外壳设计使用Fusion 360设计的壳体应包含主板固定卡槽2mm间隙电极接口防水结构腕带连接孔22mm标准尺寸关键尺寸参数总厚度12mm 内部腔体40×25×8mm 按钮开孔Φ6mm4.2 低功耗优化技巧通过以下调整可使续航延长至72小时修改Arduino的熔丝位将时钟降至8MHz采用中断唤醒模式采集数据OLED屏设置1秒刷新间隔电源管理代码片段#include avr/sleep.h void enterSleep() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_mode(); }4.3 数据持久化方案添加MicroSD模块存储原始波形#include SPI.h #include SD.h void saveECGData(int value) { File dataFile SD.open(ecg.csv, FILE_WRITE); if(dataFile) { dataFile.print(millis()); dataFile.print(,); dataFile.println(value); dataFile.close(); } }在实际测试中这个DIY设备的静息心率测量误差可以控制在±2bpm以内足以满足日常健康监测需求。最让我惊喜的是通过优化电极贴放位置甚至能捕捉到明显的心律不齐特征。当然这不能作为医疗诊断依据但对于了解心脏活动规律是非常直观的教学工具。

更多文章