基于STM32的人体健康检测系统

发布时间:2023年12月27日

一、前言

本文是基于课程设计所拓展的STM32相关项目,提供主要方案介绍

二、概论

本文针对中小应用场景,设计一款基于STM32的心率血氧监测系统,不仅可以灵活部署监测模块对心率血氧温度血压的实时监测,还能通过物联网远程监控整个系统。

三、项目介绍

1、项目框架

人体健康监测系统整体方案设计,将系统分为移动终端、云服务器、网关和监测模块四部分,通过各种传感器模块监测人体健康相关数据,STM32将采集到的相关数据传输到云平台传输电路,该电路利用WI-FI模块将数据上传到物联网云平台,物联网云平台与移动终端实时同步显示数据。

整体结构框架

2、器件选型

主控芯片

STM32C8T6(最小核心板)

在这里插入图片描述

心率模块

MAX30102
在这里插入图片描述

温度模块

DS18B20
在这里插入图片描述

气压模块

MSP20
在这里插入图片描述

WIFI模块

ESP8266
在这里插入图片描述

3、物联网云平台

本系统基于阿里云物联网云平台公共实例
在这里插入图片描述

四、项目实现

1、框架搭建

监测电路

STM32F103C8T6最小系统板为核心,心率血氧传感器MAX30102、温度传感器DS18B20、血压传感器MPS20和OLED显示模块组成的传感器组成,实现监测模块独立进行心率血氧、温度、血压等人体健康数据采集。
在这里插入图片描述

网络传输电路

STM32F103C8T6最小系统板为核心,以及ESP8266-01S Wi-Fi模块构成网络通信数据传输部分,通过连接云平台公网IP发送MQTT协议包将传感器采集电路部分监测的人健康数据发送的物联网云平台。
在这里插入图片描述

2、相关算法及程序实现

心率血氧算法

心率监测主要依据传感器监测数据,利用光电脉冲监测法得到容积脉搏波的方法,称为光电容积脉搏波描记法(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通讯协议

在本系统中,物联网云平台作为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);                   //串口输出现在的超时时间  
	}

2、结果展示

阿里云物联网云平台界面
在这里插入图片描述
上位机显示
在这里插入图片描述
APP界面
在这里插入图片描述
总体效果

在这里插入图片描述
STM32的应用:一块STM32用来处理监测的健康数据,另一块将采集的数据通过WIFI模块上传到阿里云物联网平台

元件清单:

  • STM32C8T6两块
  • ESP8266 WIFI模块
  • MAX30102心率血氧模块
  • DS18B20温度模块
  • MSP20气压模块
  • 3.3V 5V多路输出电源模块
  • 12864OLED显示模块

五、引脚连接

蜂鸣器-PA4

OLED
SDA-PB5
SCL-PB8

血压-PA1

DS18B20-PB0

MAX30102血氧
SCL-PB6
SDA-PB7
INT-PB9

ESP8266
RXD-PA2
TXD-PA3
RST-PA4

文章来源:https://blog.csdn.net/cookapk/article/details/135216981
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。