亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

实时心跳 LED 可视化:基于 uECG 与 Arduino Nano 的心率光环

项目缘起

一直想做一个能跟随真实心跳闪烁的 LED 装置——不仅限于静止状态,运动中也能准确捕捉。尝试多年未果,直到发现 uECG:一款开源可穿戴 ECG 设备,提供 Arduino 兼容的数字心跳输出引脚(每次心跳输出高/低电平翻转),极大简化了信号处理。

硬件架构

组件数量说明
uECG 设备1胸部贴片式 ECG,DRV 引脚输出心跳数字信号
Arduino Nano R31主控,读取心跳信号驱动 LED 环
NeoPixel LED 环 (WS2812, 16 颗)1DI 接 D11,彩色指示心率区间
1000mAh LiPo 电池1直连 5V/GND 供电(不走稳压器)

电路连接

关键点:LiPo 直供 5V 引脚(绕过稳压器),避免压降导致 Arduino 复位。LiPo 满电 4.2V,放电至 3.4V 仍有 15% 电量,足够稳定工作。

实时心跳 LED 可视化:基于 uECG 与 Arduino Nano 的心率光环

算法核心:滑动窗口 BPM 计算

视觉映射策略

心率区间颜色点亮 LED 数
< 90 BPM蓝BPM/10 个(如 60→6 个)
90-110蓝→绿渐变同上
110-130绿→黄渐变同上
130-150黄→粉渐变同上
> 150红同上

完整代码

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 11
#define NUMPIXELS 16
int in_pin = 3;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define BEAT_HIST 20
long beats[BEAT_HIST];

void push_beat(long ms) {
  for (int x = 0; x < BEAT_HIST-1; x++) beats[x] = beats[x+1];
  beats[BEAT_HIST-1] = ms;
}

int get_bpm() {
  long dt = beats[BEAT_HIST-1] - beats[0];
  return BEAT_HIST * 60000 / dt;
}

long last_pix_upd = 0;
int prev_in_state = 0;

void setup() {
  pixels.begin();
  pinMode(in_pin, INPUT);
  digitalWrite(in_pin, 1);  // 关键:启用内部上拉,uECG 无内部上拉
}

void loop() {
  long ms = millis();
  int in_state = digitalRead(in_pin);  // 1=无心跳, 0=心跳发生
  if (in_state == 1 && prev_in_state == 0) push_beat(ms);
  prev_in_state = in_state;

  if (ms - last_pix_upd > 10) {
    last_pix_upd = ms;
    int bpm = get_bpm();
    int max_bright = 120;
    float dd = 20;
    float t1 = 90, t2 = t1+dd, t3 = t2+dd, t4 = t3+dd;
    int r, g, b;

    if (bpm < t1) { r=0; g=0; b=max_bright; }
    else if (bpm < t2) { r=0; g=max_bright*(bpm-t1)/dd; b=max_bright-g; }
    else if (bpm < t3) { r=max_bright*(bpm-t2)/dd; g=max_bright-r; b=r/4; }
    else if (bpm < t4) { r=max_bright; g=0; b=max_bright/2 - max_bright*(bpm-t3)/(2*dd); }
    else { r=max_bright; g=0; b=0; }

    if (in_state) { r*=0.25; g*=0.25; b*=0.25; }  // 非心跳期暗化

    int on_pixels = (bpm + 5) / 10;
    for (int i=0; i

可穿戴组装建议

  • Arduino Nano 尺寸刚好嵌入 LED 环内圈,电池贴附旁边
  • uECG 贴胸部,通过带连接器的导线与主体连接(先贴传感器,再穿衣服,最后插拔连接器)
  • 建议所有连接焊接固定,运动场景下杜邦线极易脱落

实时心跳 LED 可视化:基于 uECG 与 Arduino Nano 的心率光环

实测与改进方向

  • 步行/静止:心率检测准确
  • 跑步:电池跳动干扰 ECG 传感器,导线拉扯导致读数失真
  • 胸前 LED 视觉反馈不便查看,计划改为手腕手环形式
  • 第二版已规划:无线传输(nRF24/蓝牙)分离传感器与显示端

资源链接

  • uECG 项目主页:Hackaday.io(含 PCB、固件、技术讨论)
  • 本项目代码:文中完整列出

制造工艺

  1. 体外除颤器:历史、设计与制造
  2. 擀面杖:从伊特鲁里亚起源到现代工艺的演变
  3. 人工心脏:技术、历史与未来前景
  4. 人工心脏瓣膜:类型、历史与未来创新
  5. 现代保龄球瓶的演变与工艺
  6. 现代心电图机全景:技术、制造与未来创新
  7. 树莓派 PIR 运动传感器控制 LED 实战指南
  8. 树莓派家庭温度监测仪表盘:实时图表展示
  9. 远程心率监测系统:AWS IoT 告警 + 树莓派 Windows IoT 可视化
  10. 销轴关节(叉型销连接)详解:设计、应用与核心特性
  11. 智能音箱无接触心跳监测:革命性系统
  12. 石墨烯电子纹身:超薄柔性实现长程连续精准心脏监测