本文是基于课程设计所拓展的STM32相关项目,提供主要方案介绍
本文针对中小应用场景,设计一款基于STM32的心率血氧监测系统,不仅可以灵活部署监测模块对心率血氧温度血压的实时监测,还能通过物联网远程监控整个系统。
人体健康监测系统整体方案设计,将系统分为移动终端、云服务器、网关和监测模块四部分,通过各种传感器模块监测人体健康相关数据,STM32将采集到的相关数据传输到云平台传输电路,该电路利用WI-FI模块将数据上传到物联网云平台,物联网云平台与移动终端实时同步显示数据。
STM32C8T6(最小核心板)
MAX30102
DS18B20
MSP20
ESP8266
本系统基于阿里云物联网云平台公共实例
STM32F103C8T6最小系统板为核心,心率血氧传感器MAX30102、温度传感器DS18B20、血压传感器MPS20和OLED显示模块组成的传感器组成,实现监测模块独立进行心率血氧、温度、血压等人体健康数据采集。
STM32F103C8T6最小系统板为核心,以及ESP8266-01S Wi-Fi模块构成网络通信数据传输部分,通过连接云平台公网IP发送MQTT协议包将传感器采集电路部分监测的人健康数据发送的物联网云平台。
心率监测主要依据传感器监测数据,利用光电脉冲监测法得到容积脉搏波的方法,称为光电容积脉搏波描记法(Photo PlethysmoGraphy,PPG)。
MAX30102心率血氧传感器的功能实现主要依靠光电容积脉搏波描记法(PPG)。基本思想是计算动态阈值曲线,利用波形与曲线相交来确定PPG信号的周期。当PPG波形在相同的位置两次经过动态阈值曲线的交点时,这段时间的间隔就能认为是PPG的一个周期,根据此周期即可求出心率。动态阈值曲线的某一点的值为前面若干个周期内的点的平均值。
//心率计算
uint16_t Heart_Rate = 60.00 * SAMPLES_PER_SECOND *
// s1_max_index / FFT_N;
Heart_Rate = 60.00 * ((100.0 * s1_max_index )/ 512.00);
g_blooddata.heart = Heart_Rate;
//血氧含量计算
double R = (s2[average].real * s1[0].real)/(s1[s1_max_index].real * s2[0].real);
sp02_num = (1 - sp02_num) * SAMPLES_PER_SECOND + CORRECTED_VALUE;
double R = (s1[s1_max_index].real/s1[0].real)/(s2[s2_max_index].real/s2[0].real);
double sp02_num =-16.666666*R*R+ 8.333333 *R + 100;
g_blooddata.SpO2 = sp02_num;
//血氧含量计算
float sp02_num = (s2[s1_max_index].real * s1[0].real)/(s1[s1_max_index].real * s2[0].real);
sp02_num = (1 - sp02_num) * SAMPLES_PER_SECOND + CORRECTED_VALUE;
( n_y_ac *n_x_dc_max) / ( n_x_ac *n_y_dc_max)
R = (ac_ir*dc_red)/(ac_red*dc_ir);
sp02_num =-45.060*R*R+ 30.354 *R + 94.845;
g_blooddata.SpO2 = sp02_num;
//状态正常
// }
在本系统中,物联网云平台作为MQTT的服务端,WI-FI模块作为客户端先向服务端发布信息,再从服务端进行订阅接受信息。
本设计的需求是要把传感器采集电路部分所获取的所有数据传输到云平台,所以配置其工作模式为“STA”模式(WI-FI模式)。配置为STA模式后需要连接手机热点,配置完成后就能连接TCP服务器,进入透传模式,此时ESP8266即可通过MQTT协议向云服务器发送数据,上述操作均为通过代码向单片机发送AT指令来控制Wi-Fi模块执行操作。
/*-------------------------------------------------*/
/*函数名:连接TCP服务器,并进入透传模式 */
/*参 数:timeout: 超时时间(100ms的倍数) */
/*返回值:0:正确 其他:错误 */
/*-------------------------------------------------*/
char WiFi_Connect_Server(int timeout)
{
WiFi_RxCounter=0; //WiFi接收数据量变量清零
memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE); //清空WiFi接收缓冲区
WiFi_printf("AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",ServerIP,ServerPort);//发送连接服务器指令
while(timeout--){ //等待超时与否
Delay_Ms(100); //延时100ms
if(strstr(WiFi_RX_BUF ,"CONNECT")) //如果接受到CONNECT表示连接成功
break; //跳出while循环
if(strstr(WiFi_RX_BUF ,"CLOSED")) //如果接受到CLOSED表示服务器未开启
return 1; //服务器未开启返回1
if(strstr(WiFi_RX_BUF ,"ALREADY CONNECTED"))//如果接受到ALREADY CONNECTED已经建立连接
return 2; //已经建立连接返回2
u1_printf("%d ",timeout); //串口输出现在的超时时间
}
阿里云物联网云平台界面
上位机显示
APP界面
总体效果
STM32的应用:一块STM32用来处理监测的健康数据,另一块将采集的数据通过WIFI模块上传到阿里云物联网平台
元件清单:
蜂鸣器-PA4
OLED
SDA-PB5
SCL-PB8
血压-PA1
DS18B20-PB0
MAX30102血氧
SCL-PB6
SDA-PB7
INT-PB9
ESP8266
RXD-PA2
TXD-PA3
RST-PA4