https://forum.eepw.com.cn/thread/396852/1
Let'sdo2025年第2期—智能手环:②过程帖一:点亮RGB灯
https://forum.eepw.com.cn/thread/396913/1
Let'sdo2025年第2期—智能手环:③过程帖二:点亮OLED:HelloWorld!
https://forum.eepw.com.cn/thread/396915/1
Let'sdo2025年第2期—智能手环:④过程帖三:驱动心率血氧模块
https://forum.eepw.com.cn/thread/396963/1
经过前期的摸索,终于可以将上述阶段性成果串联起来,完成本成果贴:智能手环:心率血氧仪
我们再回顾下3个主要部分的介绍
MAX78000FTHR:
MAX78000FTHR是一款集成ARMCortex-M4+FPU、CNN加速器和RISC-V内核的MCU,专为低功耗边缘AI应用设计。 该模块支持图像和声音处理,包含安全功能,并配有节能的AI推理能力。 开发环境包括MaximMicrosSDK和Eclipse,方便用户进行项目构建和调试。 MAX78000FTHR是基于MAX78000的小型板微控制器单元(MCU)。
其实本次智能手环没用到CNN功能,有点大材小用了,后面有机会再慢慢摸索吧。
SSD1306 OLED模块
SSD1306是一款带控制器的用于OLED点阵图形显示系统的单片CMOS OLED/PLED驱动器。它由128个SEG(列输出)和64个COM(行输出)组成。该芯片专为共阴极OLED面板设计。
SSD1306内置对比度控制器、显示RAM(GDDRAM)和振荡器,以此减少了外部元件的数量和功耗。该芯片有256级亮度控制。数据或命令由通用微控制器通过硬件选择的6800/8000系通用并行接口、I2C接口或串行外围接口发送。该芯片适用于许多小型便携式应用,如手机副显示屏、MP3播放器和计算器等。
MAX30102心率血氧模块
MAX30102 传感器是一种集成了红外光传感器和光电二极管的生物传感器。它基于光吸收和反射的理,用于非侵入式心率监测和血氧饱和度测量。在使用 MAX30102 传感器时,LED 发射器会发出红色和红外光。这些光通过皮肤或组织层,并被血液吸收和反射,接收器上的光电二极管接收经过组织反射的光。根据血液中血红蛋白的吸收特性,红光和红外光的衰减程度与血液中的氧气饱和度相关。MAX30102 传感器利用这种光吸收与血氧饱和度之间的关系来测量血氧饱和度和心率。通过对接收到的红色和红外光的强度进行采样和处理,传感器可以计算出血氧饱和度以及心率的值。
总结起来,MAX30102 传感器利用光吸收和反射的原理,通过测量血液中的氧气饱和度来实现非侵入式的心率监测和血氧饱和度测量。 MAX30102 是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块(芯片)。它集成了一个 660nm 红光 LED、880nm 红外光 LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。
系统框图
电路原理图
本例核心使用了MAX78000FTHR开发板,以及OLED模块(i2c协议)和心率血氧模块(i2c协议)。
因此电路就比较简单。
OLED跟心率血氧模块并联在SCL、SDA线上。
实物照片如下图:
看上图,你会发现怎么换了一个OLED模块?之前过程贴中的OLED模块怎么没使用了。
这里有个小插曲,之前的OLED模块是128*64,主控SSD1306
但不知什么原因,只要是跟心率模块一并联,OLED与心率模块都不能正常工作,只要一分开,各自都正常。
而且更诡异的是用ADI官方例程i2c_detect,是可以扫描到OLED与心率模块的地址的。
一直摸不着头脑,不知道问题出在哪里。
现在使用的OLED是128*32(小了一半),主控仍然是SSD1306,后面改使用这款后,两者都正常了
但是要说明的是两者主控虽然都是SSD1306,但初始化代码有差异。
/* uint8_t init_cmds[] = { 0xAE, 0x20, 0x00, 0xB0, 0xC8, 0x00, 0x10, 0x40, 0x81, 0xFF, 0xA1, 0xA6, 0xA8, 0x3F, 0xA4, 0xD3, 0x00, 0xD5, 0xF0, 0xD9, 0x22, 0xDA, 0x12, 0xDB, 0x20, 0x8D, 0x14, 0xAF}; */ uint8_t init_cmds[] = { 0x40,0xB0,0xC8,0x81,0xff,0xa1,0xa6,0xa8,0x1f,0xd3,0x00, 0xd5,0xf0,0xd9,0x22,0xda,0x02,0xdb,0x49,0x8d,0x14,0xaf};
上面是12864这款的初始化代码
下面是12832的初始化代码
终于找到原因,12864这款OLED自身硬件存在某些未知的原因,比如电阻等等,不支持其他i2c模块并入。
虽然深层次原因仍然未知,但至少知道哪里出问题了,如何避免,这不也是一个好的结果吗?
如何开启运行
开机上电后,心率模块便开始工作,不断循环往复测量心率和血氧,并显示在OLED屏幕上。
用手触摸心率血氧模块即可,测得的数据稳定性一般,大概在心率105 BPM,血氧97%
主要参数情况
主要参数就是: 使用MAX78000FTHR开发板的硬件i2c1模块驱动
SSD1306 i2c的地址是0x3c
max30102的地址是0x57
实现步骤
实现步骤其实上面已经描述得差不多了。
先用面包板接好硬件,逐个测试接入的单元,如RGB灯、SSD3016 OLED模块、MAX30102模块
最后将功能汇总集成,就实现了智能手环的功能。