心率监测作为智能穿戴设备的基础功能,已经从专业医疗领域逐步渗透到日常健康管理场景。传统方案通常依赖光学传感器(PPG)或电极片(ECG),而Micro:bit这款教育级开发板内置了加速度计和简易触摸感应,配合Python编程,可以构建一套成本极低但教学价值极高的心率监测原型系统。
这个项目的独特之处在于:
我在实际教学中发现,这套系统能让学生直观理解:
官方Micro:bit v2核心配置:
虽然缺乏专业心率传感器,但通过以下技巧实现替代方案:
实测发现电容方案在静态测量时误差±5bpm,适合演示原理;运动状态下建议改用加速度计+算法补偿
使用Mu Editor作为开发环境(兼容Windows/macOS/Linux):
python复制# 固件烧录步骤
1. 下载MicroPython固件(.hex文件)
2. 长按Micro:bit背面复位键连接USB
3. 拖拽固件到出现的U盘卷标
4. 等待自动重启(黄色LED闪烁)
# 依赖库安装
from microbit import *
import math
import utime
常见问题排查:
核心代码逻辑:
python复制def get_cap_value():
# 读取按钮电容值(0-1023)
return pin0.read_analog()
threshold = 650 # 需根据个体差异调整
sample_rate = 50 # ms
while True:
raw = get_cap_value()
if raw > threshold:
display.show(Image.HEART)
utime.sleep_ms(100)
else:
display.clear()
utime.sleep_ms(sample_rate)
信号处理关键点:
python复制baseline = sum(last_10_samples)/10 * 1.2
当检测到剧烈运动时(如跑步),自动切换模式:
python复制def get_movement():
x = accelerometer.get_x()
y = accelerometer.get_y()
return math.sqrt(x**2 + y**2)
if get_movement() > 800: # 经验阈值
enable_motion_compensation = True
运动状态下的心率计算需要:
python复制step_freq = detect_step_frequency() # 通过加速度计周期分析
remove_frequency_component(step_freq)
延长纽扣电池寿命的关键措施:
python复制if abs(last_hr - current_hr) < 5: # 心率稳定时
sample_rate = 100 # 降频采样
python复制microbit.sleep(60000) # 1分钟无操作后休眠
通过NFC配对手机显示详细数据:
python复制import radio
radio.config(channel=7) # 避免干扰
radio.on()
def send_data():
radio.send(str(heart_rate))
手机端可用Pyodide构建网页版仪表盘:
javascript复制// 接收示例
navigator.bluetooth.requestDevice({
filters: [{ services: ['6e400001-b5a3-f393-e0a9-e50e24dcca9e'] }]
}).then(device => {
console.log('Connected to:', device.name);
});
这些方法能显著改善学生实验效果:
典型误差来源及解决方法:
| 误差类型 | 表现特征 | 修正方案 |
|---|---|---|
| 运动伪影 | 数据突跳 | 启用加速度补偿 |
| 接触不良 | 信号断续 | 检查导线连接 |
| 环境干扰 | 基线漂移 | 接地处理 |
| 算法延迟 | 响应滞后 | 优化缓冲区大小 |
建议每学期开学时用专业设备(如Polar H10)做一次交叉验证,记录校准系数。
在基础功能上,可以引导学生尝试:
python复制def calculate_hrv(rr_intervals):
return np.std(rr_intervals)
我曾指导学生用这套系统完成"不同音乐对心率影响"的课题研究,关键发现包括:
最后分享一个调试技巧:用print()输出原始信号值时,先除以最大量程(1023)归一化,再用Excel绘制折线图,比肉眼观察LED闪烁可靠得多。遇到信号异常时,优先检查电源稳定性——纽扣电池电压低于2.7V时ADC精度会明显下降。