心率监测仪项目:ESP32+MicroPython实战

2026-11-01 09:43:04 37阅读

【Heart Rate Sensor】心率监测仪

本文介绍了一个心率监测仪项目,使用DFRobot心率传感器(型号:SEN0203)结合ESP32开发板及MicroPython编程。项目包括硬件连接、环境搭建、代码示例、流程图及效果演示。通过这个项目,学生可以理解心率监测原理,并动手实践。最终效果是通过数码管显示心率变化,并通过串口绘图工具获取心电图。

【Heart Rate Sensor】心率监测仪

本文介绍了 DFRobot 心率传感器 heart rate sensor 结合 ESP32 开发板及MicroPython 编程、数码管模块,通过 ADC 电压采样、心率计算、串口通信,实现心率监测的项目设计,包括环境搭建、代码、流程图、效果演示等。

项目介绍

  • 准备工作:心率传感器模块、两位数码管模块、硬件连接、环境搭建;
  • 工程测试:流程图、关键代码、串口绘图、数码管显示。

ESP32 开发板与指尖心率传感器的项目封面插画

心率传感器

心率传感器,采用光电容积脉搏波描记法,通过测量血液中血红蛋白随心脏跳动而对氧气吸收的变化量来测量人体心率参数。

心率传感器模块正面特写,可见光学元件与信号接口

  • 具有响应快,性能稳定,适应性强等特点;
  • 模块拥有方波和脉搏波两种信号输出模式,可以通过板载开关去自由切换输出信号;
  • 脉搏波将输出一个连续的心率波形,而方波将根据心率的变化输出对应的方波;
  • 心率传感器体积小巧,可以佩戴于手指、手腕等检测位置。

硬件连接

  • 连接心率传感器模块和 ESP32-S31 开发板;
心率传感器ESP32-S31Note
SignalPin 45Data
GNDGNDGround
VCC3V3Power

根据原理图和数据手册可知,ESP32-S31 集成了 2 个 ADC,管脚分配以其数据手册为准。

  • 使用杜邦线连接 USB 转 TTL 工具和 ESP32-S31 开发板;
ESP32-S31USB-TTLNote
Pin 2 (TXD1)RXDTransmite
Pin 3 (RXD1)TXDReceive
GNDGNDGround

串口烧录与调试通过 USB 转 TTL 隔离转换器完成。

  • 杜邦线连接开发板和数码管模块
74HC595ESP32-S31Note
SDIPin 38Serial Data In
SCLKPin 37Serial Clock
LOADPin 36Load / Latch
GNDGNDGround
VCC3V3Power

实物图

ESP32-S31 开发板经 USB 转 TTL 转换器连接心率传感器与数码管的实物接线

环境搭建

  • 烧录 MicroPython 固件至开发板;
    MicroPython 固件标志图
  • 下载并安装 Thonny IDE 软件;

开发板的介绍、环境搭建与工程测试方法以其配套资料为准。

流程图

程序主流程图:初始化后循环执行 ADC 扫描、电压读取、心率换算、串口打印与数码管显示

工程代码

Thonny IDE 新建 hr_seg_uart.py 文件,添加如下代码

from machine import Pin, ADC, UART
import time

# ---------- 74HC595 数码管引脚 ---------------
latch = Pin(36, Pin.OUT)
clock = Pin(37, Pin.OUT)
data  = Pin(38, Pin.OUT)

# Initialize UART 
uart = UART(1, baudrate=115200, tx=Pin(2), rx=Pin(3))

# 共阳数码管段码
smgduan = [
    0b11000000, # 0
    0b11111001, # 1
    0b10100100, # 2
    0b10110000, # 3
    0b10011001, # 4
    0b10010010, # 5
    0b10000010, # 6
    0b11111000, # 7
    0b10000000, # 8
    0b10010000, # 9
]

# ------------ ADC 心率传感器配置 ----------------
adc_pin = Pin(45)        # 心率传感器OUT引脚
adc = ADC(adc_pin)
adc.atten(ADC.ATTN_11DB)# 0~3.3V量程
conv_factor = 3.3 / 65535.0

# 595移位输出
def shift_out(byte):
    for i in range(8):
        bit = (byte >> (7 - i)) & 1
        data.value(bit)
        clock.value(1)
        clock.value(0)

# 双位数码管显示函数
# left:整数位,right:小数位,dot=True点亮小数点
def show(left, right, dot=False):
    seg_l = smgduan[left % 10]
    seg_r = smgduan[right % 10]
    if dot:
        seg_l &= 0b01111111  # 整数位点亮小数点,如 1.2
    latch.value(0)
    shift_out(seg_r)
    shift_out(seg_l)
    latch.value(1)

# ---------------------- 主循环 ----------------------
while True:
    adc_val = adc.read_u16()
    voltage = adc_val * conv_factor  # 转换电压 0~3.3V

    # 保留一位小数
    v_1dec = round(voltage * 10) / 10
    int_part = int(v_1dec)
    dec_part = int((v_1dec * 10) % 10)

    # 数码管显示 X.X
    show(int_part, dec_part, dot=True)

    # 串口打印
    uart.write(f"{adc_val}\r\n")
    print(f"Heart ADC raw:{adc_val}, Voltage:{voltage:.1f} V")
    
    time.sleep(0.2)

保存文件。

效果演示

  • Thonny 运行程序,或将程序另存为 main.py 至开发板根目录,复位运行;
  • 将心率传感器固定在手指或手腕,通过串口或数码管观察到 ADC 数值规律跳动;

整机通电实拍:数码管点亮显示测量读数

  • Thonny 软件的 Shell 终端空白处右键,勾选 显示绘图器 选项;

Thonny 终端右键菜单中勾选显示绘图器的操作示意

显示 ADC 原始值的波动,即心率变化;

串口绘图器绘制出的 ADC 心率波动曲线

串口绘图

  • 打开网页版串口绘图工具(WebSerial 串口绘图器);
  • 配置参数,连接串口,开始采集;

网页串口绘图工具实时采集到的心电图波形界面

  • 根据串口数据绘图结果,可获取心电图;
  • 数码管显示 ADC 电压;

总结

本文介绍了 DFRobot 心率传感器 heart rate sensor 结合 ESP32 开发板及MicroPython 编程,通过 ADC 电压采样、心率计算、串口通信,实现心率监测的项目设计,包括环境搭建、工程配置、代码、流程图、效果演示等,为相关产品的快速开发和应用设计提供了参考。

硬件清单

  • Gravity: 心率传感器1


作者:无垠的广袤
链接:https://www.aiddithome.com/p/8d88633c5d752.html
本作版权归作者所有,未经允许请勿转载。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
0条评论
还没有人评论过~