树莓派pico+max30102实现心率、脉搏检测

文章介绍了MAX30102高灵敏度生物传感器的工作原理、特点,如何通过I2C接口与树莓派PICO连接,并提供了使用Python代码配置和读取传感器数据的实例。
摘要由CSDN通过智能技术生成

max30102简介:


        MAX30102是高灵敏度血氧和心率生物传感器,它包括内部LED、光电探测器、光学元件和具有环境光抑制功能的低噪声电子设备。传感器内部通过一个1.8V电源和一个单独的5.0V电源为内部LED供电。利用标准I2C兼容接口进行通信,同时MAX30102传感器的封装上加了玻璃盖,极大地增强了芯片的抗干扰能力,使其测量效果可以达到更优。另外本模块可以通过软件断电,待机电流也可忽略不计,从而使电源导轨始终保持通电状态。

        此外对于测量脉搏主要方法有心电信提取,测量血压压力传感器测到的波动来计算脉率以及光容积法。对于MAX30102采用的便是光容积法。

        其基本原理是利用人体组织在血管搏动时造成透光率不同来进行脉搏和血氧饱和度测量的,其使用的传感器由光源和光电转换器两部分组成。通过绷带或夹子固定在病人的手指、手腕或耳垂。测血氧饱和度时,根据氧合血红蛋白(Hb02)和血红蛋白(Hb)对红光、红外光的吸收量来计算。血管随着心跳舒张和收缩,舒张时血量多,吸收的红光和红外光多,收缩时血量少,吸收的红光和红外光少。根据反射到传感器的光量周期性变化,可以计算出心率。血氧饱和度计算公式。

树莓派PICO:

        对于树莓派PICO网上的资料介绍都有很多,这里我就不在浪费大家的时间了。直接上代码

代码部分:

        代码主要便是使用i2c协议,配置max30102的寄存器,并从寄存器中读取出数据。注意该部分读取的是红光与红外光反射强度的原始数据:

from machine import Pin,I2C
import time


# 定义Max30102传感器的I2C地址
MAX30102_I2C_ADDR = 0x57

# 定义Max30102传感器的寄存器地址
REG_INTR_STATUS_1 = 0x00
REG_INTR_STATUS_2 = 0x01

REG_INTR_ENABLE_1 = 0x02
REG_INTR_ENABLE_2 = 0x03

REG_FIFO_WR_PTR = 0x04
REG_OVF_COUNTER = 0x05
REG_FIFO_RD_PTR = 0x06
REG_FIFO_DATA = 0x07
REG_FIFO_CONFIG = 0x08

REG_MODE_CONFIG = 0x09
REG_SPO2_CONFIG = 0x0A
REG_LED1_PA = 0x0C

REG_LED2_PA = 0x0D
REG_PILOT_PA = 0x10
REG_MULTI_LED_CTRL1 = 0x11
REG_MULTI_LED_CTRL2 = 0x12

REG_TEMP_INTR = 0x1F
REG_TEMP_FRAC = 0x20
REG_TEMP_CONFIG = 0x21
REG_PROX_INT_THRESH = 0x30
REG_REV_ID = 0xFE
REG_PART_ID = 0xFF

i2c = I2C(0,sda=Pin(8),scl=Pin(9),freq=400000)
i2c.scan()              # 扫描从设备
# 初始化Max30102传感器
def writ_to_register():
    # 势能寄存器
    i2c.writeto(0x57,bytearray([REG_INTR_ENABLE_1,0xc0]))
    i2c.writeto(0x57,bytearray([REG_INTR_STATUS_2,0x00]))
    # 
    i2c.writeto(0x57,bytearray([REG_FIFO_WR_PTR,0x00]))
    i2c.writeto(0x57,bytearray([REG_OVF_COUNTER,0x00]))
    i2c.writeto(0x57,bytearray([REG_FIFO_RD_PTR,0x00]))
    
    i2c.writeto(0x57,bytearray([REG_FIFO_CONFIG,0x4f]))
    
    i2c.writeto(0x57,bytearray([REG_MODE_CONFIG,0x03]))
    i2c.writeto(0x57,bytearray([REG_SPO2_CONFIG,0x27]))
    
    i2c.writeto(0x57,bytearray([REG_LED1_PA,0x024]))
    i2c.writeto(0x57,bytearray([REG_LED2_PA,0x024]))
    i2c.writeto(0x57,bytearray([REG_PILOT_PA,0x7f]))
    

def read_data():
    data = i2c.readfrom_mem(0x57,REG_FIFO_RD_PTR,1)
    write = i2c.readfrom_mem(0x57,REG_FIFO_WR_PTR,1)
    return data

# 读取数据
def read_fifo(address=0x57):
    """
    This function will read the data register.
    """
    red_led = None
    ir_led = None

    # read 1 byte from registers (values are discarded)
    reg_INTR1 = i2c.readfrom_mem(address, REG_INTR_STATUS_1, 1)
    reg_INTR2 = i2c.readfrom_mem(address, REG_INTR_STATUS_2, 1)

    # read 6-byte data from the device
    d = i2c.readfrom_mem(address, REG_FIFO_DATA, 6)
    # mask MSB [23:18]
    red_led = (d[0] << 16 | d[1] << 8 | d[2]) & 0x03FFFF
    ir_led = (d[3] << 16 | d[4] << 8 | d[5]) & 0x03FFFF

    return red_led, ir_led



if __name__ == "__main__":
    # 初始化Max30102传感器
    writ_to_register() 
    while True:
        # 读取脉搏数据
        pulse = read_fifo()
        print(pulse)
#         print(int.from_bytes(pulse))
        time.sleep_ms(10)

附上硬件接线图:

由于是晚上拍的可能会看不清在这口述一下,GND与VIN分别接上PICO的GND与3V3,SDA接GPIO8,SCL接GPIO9。 

        由于第一次写博客还不太熟悉,如果对大家有帮助的话请大家点赞支持一下。最后本文如有错误的地方还请指正。 浏览量高后续还会更新对原始数据处理求出心率与脉搏的部分。

一般描述 MAX30102是一款集成式脉搏血氧仪和心率监测模块。 它包 括内部LED,光电探测器,光学元件以及环境光抑制的低 噪声电子元件。 MAX30102提供了一个完整的系统解决方 案,以简化移动设备和可穿戴设备的设计过程。 MAX30102采用1.8V单电源供电,内部LED采用独立的5.0V 电源供电。 通讯采用标准I2C兼容接口。 该模块可以通过 零电流软件关闭,使电源轨始终保持供电状态。 应用 ● 可穿戴设备 ● 健身助理设备 优点和特点 ● LED反射式解决方案中的心率监测器和脉搏血氧仪 传感器 ● 小巧的5.6mm x 3.3mm x 1.55mm 14引脚光学模块 • 集成的盖玻片提供最佳,稳定的性能 ● 移动设备的超低功耗操作 • 可编程采样率和LED电流以节省电力 • 低功耗心率监测器(<1mW) • 超低关断电流(0.7μA,典型值) ● 快速的数据输出能力 • 高采样率 ● 强大的运动神器弹性 • 高信噪比 ● -40°C至+ 85°C工作温度范围 订购信息出现在数据表的末尾。 系统图 应用 硬件框架 DRIVER 19-7740; Rev 0; 9/15 MAX30102 High-Sensitivity Pulse Oximeter and Heart-Rate Sensor for Wearable Health www.maximintegrated.com Maxim Integrated │ 2 绝对最大额定值 VDD到 GND ............................................ ........ .....- 0.3V至+ 2.2V GND到 PGND ............................................... .... ...- 0.3V至+ 0.3V X_DRV,VLED +至 PGND ......................................- 0.3V至+ 6.0V 所有其他引脚接 GND ..........................................- 0.3V到+ 6.0V 输出短路电流持续时间.......................连续 连续输入电流到任何端子....................±20mA ESD,人 体模型(HBM).............. ......................... 2.5kV以上 闩锁免 疫................................................ ...... .....±250毫安 连续功耗(TA= + 70°C) OESIP(降低5.5mW /°C + 70°C)............................ 440mW 工作温度范围.......................... -40°C至+ 85°C结 温.......... ............................................ .. + 90°C 焊接温度(回流焊)....................................... + 260°C 存储温度范围............................ -40°C至+ 105°C 封装热特性(注1) OESIP 结到环境热阻(θJA)........ 180°C / W 结至外壳热阻(θJC)................. 150°C / W 注1:使用四层板使用JEDEC规范JESD51-7中描述的方法获得封装热阻。 有关封装散热注意事项的详细信息,请参阅 www.maximintegrated.com/thermal-tutorial. 电气特性 除非另有说明,典型值为TA= 1.8V,VIR_LED += VR_LED += 5.0V,TA= -40°C至+ 85°C。 + 25°C)(注2) 参数 符号 条件 MIN TYP MAX 单位 电源 电源电压 VDD 由RED和IR计数容差保证 1.7 1.8 2.0 V LED电源电压 R_LED +或IR_LED +到PGND VLED + 通过LED驱动器的PSRR保证(仅限 R_LED +和IR_LED +) 3.1 3.3 5.25 V SpO2和HR模式,PW =215μs, 50sps 600 1200 仅IR模式,PW =215μS,50sps 600 1200 关机时的电源电流 ISHDN TA= + 25°C,MODE = 0x80 0.7 10 µA 脉冲氧化/心率传感器特性 ADC分辨率 18 位 红色ADC计数(注 3) REDC RED_PA = 0x0C,LED_PW = 0x01, SPO2_SR = 0x05, ADC_RGE = 0x00,TA= + 25°C 55536 65536 75536 计数 MAX30102 High-Sensitivity Pulse Oximeter and Heart-Rate Sensor for Wearable Health www.maximintegrated.com Maxim Integrated │ 3 IR ADC计数(注3) IRC IR_PA = 0x0C,LED_PW = 0x01, SPO2_SR = 0x05 ADC_RGE = 0x00,TA= + 25°C 55536 65536 75536
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@T565

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值