首页 > 编程语言 >单片机毕业设计之stm32单片机物联网远程心率血氧MAX30102健康监控系统,老人健康监测+行走步数监测ADXL345加速度+体温监测DS18B20+蓝牙串口通信+阈值设置声光报警+原理图源代码程序

单片机毕业设计之stm32单片机物联网远程心率血氧MAX30102健康监控系统,老人健康监测+行走步数监测ADXL345加速度+体温监测DS18B20+蓝牙串口通信+阈值设置声光报警+原理图源代码程序

时间:2025-01-17 18:30:16浏览次数:3  
标签:血氧 心率 引脚 原理图 蓝牙 单片机 模块 STM32F103C8T6 监测

一、设计简介

        本项目旨在利用STM32F103C8T6微控制器为核心,构建一个实时人体健康监测系统。该系统集成了多种传感器和模块,能够全面、准确地监测并显示人体的关键健康数据,同时提供异常报警功能,还通过蓝牙通信功能实现了数据的远程传输和记录,方便用户随时了解自己的健康状况并进行相应的调整。同时,系统的异常报警功能也为用户的健康提供了有力的保障。确保用户能够及时了解自身的健康状况。

原理图源代码等相关资料相关在文末

二、功能设计

  1. 心率血氧监测
    • 通过MAX30102传感器,系统能够实时采集并处理人体的心率和血氧饱和度数据。
  2. 行走步数监测
    • 利用ADXL345加速度传感器,系统能够准确记录用户的行走步数,
  3. 体温监测
    • 通过DS18B20温度传感器,系统能够实时测量并显示用户的体温数据,
  4. 实时时间显示与修改
    • 系统配备了一个独立的RTC时钟模块,能够显示当前时间,并允许用户通过按键进行时间的修改,确保时间的准确性和实用性。
  5. OLED液晶显示
    • 系统采用OLED液晶显示屏,能够清晰地显示当前时间、心率、血氧、体温和步数等关键健康数据,方便用户随时查看。
  6. 蓝牙通信
    • 系统支持蓝牙连接功能,能够将采集到的健康数据无线传输到手机端蓝牙调试软件上,方便用户进行远程监测和数据记录。
  7. 阈值设置与异常报警
    • 用户可以根据自身健康状况设置心率、血氧和温度的正常范围阈值。一旦系统检测到数据超出设定的阈值范围,将立即触发声光报警功能

三、所需硬件连接

(1)、通过MAX30102的采集心率血氧数据;

(2)、ADXL345采集当前行走步数;

(3)、DS18B20采集温度数据;

(4)、独立RTC时钟模块显示当前时间,可通过按键修改时间;

(5)、OLED液晶显示当前时间,心率血氧,体温,步数。

(6)、蓝牙通讯模块HC05、HC06连接蓝牙,手机端蓝牙调试软件接收无线传输数据。

(7)、设置阈值,心率血氧和温度的正常范围

(8)、异常情况触发声光报警

四、软件环境

Keil5 MDK:stm32单片机源代码程序编写及下载代码

ST-Link 驱动程序:用于下载程序到 STM32。

手机APP

五、所需硬件以及传感器模块

5.1 stm32f103c8t6最小系统板(1个)

STM32F103C8T6最小系统板是基于STM32F103C8T6微控制器(MCU)构建的一个基础电路系统,它能够确保MCU正常工作并发挥其基本功能。

STM32F103C8T6微控制器是该最小系统板的核心组件,它是一款基于ARM Cortex-M3内核的高性能、低功耗的32位单片机。这款MCU具有丰富的外设接口,如USART、I2C、SPI、ADC等,能够满足各种应用需求。

需要为其配置一系列外围电路,这些电路共同构成了STM32F103C8T6最小系统板。以下是外围电路的主要组成部分:

  1. 电源电路

    • 通常,STM32F103C8T6微控制器的工作电压在1.8V至3.6V之间。因此,需要使用稳压器(如AMS1117)将外部输入的5V电压转换为3.3V,以供给MCU使用。
    • 为了稳定电压并滤除噪声,电源电路中还会配置多个去耦电容。
  2. 时钟电路

    • 时钟电路是MCU的“心跳”,为MCU提供系统时钟信号。STM32F103C8T6支持外部晶振和内部RC振荡器两种时钟源。
    • 在实际应用中,通常会使用外部晶振(如8MHz晶体谐振器)作为主时钟源,并配置两个负载电容器。
  3. 复位电路

    • 复位电路用于将MCU恢复到起始状态,以便重新开始执行程序。STM32F103C8T6支持系统复位、电源复位和备份区域复位等多种复位方式。
    • 在最小系统板中,通常会使用电阻和电容组合来实现上电自动复位以及手动按钮触发复位的功能。
  4. 下载调试电路

    • 为了方便程序的下载和调试,STM32F103C8T6最小系统板会配置SWD/SWDIO两线串行调试端口。这个端口允许连接编程工具(如ST-Link)进行固件下载和在线调试操作。

5.2 蓝牙通讯模块HC06(1个)

  • HC-06模块设计简洁,引脚定义清晰,方便与各种单片机和嵌入式系统集成。
  • 模块通过4个2.54mm间距的排针与外部连接,包括GND(接地)、VCC(电源,3.3V~5.0V)、RXD(模块串口接收脚,TTL电平)、TXD(模块串口发送脚,TTL电平)四个引脚。
  • 此外,HC-06模块还自带了一个状态指示灯,可以方便地判断模块的当前状态。指示灯有两种状态:均匀慢速闪烁表示蓝牙等待配对,常亮表示蓝牙已建立连接。
  • 5.3 MAX30102心率血氧模块(1个)

        MAX30102是Maxim Integrated公司开发的一款高灵敏度光学脉搏血氧传感器,能够采集心率和血氧饱和度(SpO2)数据。MAX30102通过光电容积脉搏波描记法(PPG)来测量心率和血氧饱和度。传感器内部的红光LED和红外光LED向皮肤发射光线,血液中的血红蛋白会吸收部分光线,剩余的光线被反射回传感器并被光电二极管接收并转换成电信号。传感器内部的模拟前端(AFE)对电信号进行放大和滤波,得到脉搏波信号。最后,通过I2C接口将处理后的数据传输给主控芯片进行进一步分析和处理。

要将MAX30102模块与STM32连接,需要按照以下步骤进行:

  1. 将SCL(I2C时钟线)连接到微控制器的SCL引脚。
  2. 将SDA(I2C数据线)连接到微控制器的SDA引脚。
  3. 将VDD(电源引脚)接3.3V(MAX30102工作电压为1.8V~3.3V,不支持5V)。
  4. 将GND接地。
  5. 将中断引脚(INT)连接到微控制器的一个GPIO引脚,用于通知数据准备好。

5.4 ADXL345采集当前行走步数(1个)

        ADXL345是ADI公司推出的一款高性能、低功耗的三轴加速度传感器。以下是对ADXL345的详细介绍:

  1. 高分辨率:ADXL345具有最高13位的分辨率,能够精确测量加速度的微小变化。在±16g的测量范围内,分辨率可高达4mg/LSB(最小刻度),可以检测到非常小的加速度变化。
  2. 可变测量范围:ADXL345拥有±2g、±4g、±8g、±16g四种可变的测量范围,可以根据不同的应用需求进行选择。
  3. 数字接口:支持标准的I2C和SPI数字接口,方便与各种微控制器或处理器进行通信。I2C接口使用较少的引脚,适合对引脚数量有限制的系统;SPI接口则具有更高的通信速度,适用于对数据传输速率要求较高的应用。
  4. 自带FIFO存储:自带32级FIFO(先进先出)存储,可以缓存传感器采集到的数据,减少主机处理器的干预,提高数据处理的效率。
  5. 低功耗:在VS=2.5V(典型值)时,测量模式下低至23μA,待机模式下更是低至0.1μA。并且功耗会根据带宽自动扩展,支持基于运动的智能电源管理,可有效降低系统的功耗。
  6. 状态检测和中断方式:内部有多种状态检测和灵活的中断方式,如活动和不活动感应、轻敲感应、自由落体感应等,这些功能可以映射到两个中断输出引脚之一,方便系统及时响应传感器的状态变化。

5.5  DS18B20温度传感器(1个)

DS18B20是一款常用的数字温度传感器

一、基本特性

  • 输出信号:数字信号。
  • 特点:体积小、硬件开销低、抗干扰能力强、精度高。
  • 工作电压:3V~5.5V。
  • 测温范围:-55℃+125℃(-67°F+257°F)。
  • 测量精度:在-10℃~+70℃范围内的测试精度可以达到±0.5℃。
  • 分辨率:可配置为9到12位,默认情况下为12位。分辨率越高,测量的精度越高,但转换时间也越长。温度转换为12位数字格式时,最大值为750毫秒。

六、原理图及设计流程图

七、实物图

八、程序代码

int main(void)
{
	unsigned char i;
	
	DelayInit();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	I2C_Configuration(); //IIC初始化
	OLED_Init(); //OLED初始化
	KEY_Init(); //按键初始化
	DelayMs(200);
	CheckNewMcu();
  OLED_CLS();//清屏
	DS18B20_Init();
	DS1302_Init(&SysDate); 
	DelayMs(100);
	for(i=0;i<8;i++)OLED_ShowCN(i*16,2,i+8,0);//测试显示中文:欢迎使用使能手环
	DelayMs(1000);
	OLED_CLS();//清屏
	DS1302_DateRead(&SysDate);//读时间
	OLED_CLS();//清屏
	for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+16,1);//测试显示中文:心率
	for(i=0;i<2;i++)OLED_ShowCN(i*16+48,4,i+18,1);//测试显示中文:血氧
	for(i=0;i<2;i++)OLED_ShowCN(i*16+95,4,i+20,1);//测试显示中文:步数
	OLED_ShowCentigrade(112, 2);    //℃
	IIC_init();//IIC初始化
	uart1_Init(9600);
	adxl345_init();//ADXL345初始化
	Init_MAX30102();//MAX30102初始化
	TIM2_Init(99,719);   //定时器初始化,定时1ms
	//Tout = ((arr+1)*(psc+1))/Tclk ; 
	//Tclk:定时器输入频率(单位MHZ)
	//Tout:定时器溢出时间(单位us)
	while(1)
	{
		  shanshuo=!shanshuo;
		  KeySettings();
	    DisplayTime();
		  if(setn == 0)//不在设置状态下,读取相关数据
			{
					DisplayTemperature();
					GetSteps();
					GetHeartRateSpO2();
				  if(fallTime==0)
					{
							if(displayfall==0)
							{
									displayfall=1;
								  OLED_CLS();//清屏
								  for(i=0;i<3;i++)OLED_ShowCN(i*16+48,2,i+64,0);//测试显示中文:跌倒
								  UsartSendReceiveData();
								  DelayMs(1000);DelayMs(1000);
								  OLED_CLS();//清屏
									for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+16,1);//测试显示中文:心率
									for(i=0;i<2;i++)OLED_ShowCN(i*16+48,4,i+18,1);//测试显示中文:血氧
									for(i=0;i<2;i++)OLED_ShowCN(i*16+95,4,i+20,1);//测试显示中文:步数
									OLED_ShowCentigrade(112, 2);    //℃
							}
					}
			}
			UsartSendReceiveData();
			DelayMs(10);
	}
}

void TIM2_IRQHandler(void)//定时器2中断服务程序,用于记录时间
{ 
	  static u16 timeCount1 = 0;
	  static u16 timeCount3 = 0;
	
    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
		{ 
				TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除中断标志位  
				
			  timeCount1 ++;
				if(timeCount1 >= 800)  
				{
						timeCount1 = 0;
						 sendFlag = 1;
					
					  if(tiltFlag)
						{
								if(fallTime>0)fallTime--;  //跌倒时间倒计时
						}
				}
			
			  timeCount3 ++;
				if(timeCount3 >= 100) 
				{
						timeCount3=0;
						if(fallTime==0){        //跌倒蜂鸣器报警
								BEEP=1;
						} 
						else
						{
								if(((hrAvg!=0)&&(hrAvg>=xinlvMax||hrAvg<=xinlvMin))||((spo2Avg!=0)&&(spo2Avg<=spo2Min))||(temperature>=tempMax||temperature<=tempMin))//不在范围蜂鸣器报警
								{
									BEEP=~BEEP;
									beepFlag|=0x01;
									
								}else
								{	
									beepFlag&=0xFE;
									BEEP=0;
								}
						}
				}
		}
}

九、资料内容清单

源代码原理图等相关资料

百度网盘资料下载链接

更过相关设计资料或者毕设计定制请加下面联系方式

标签:血氧,心率,引脚,原理图,蓝牙,单片机,模块,STM32F103C8T6,监测
From: https://blog.csdn.net/weixin_41024363/article/details/145174165

相关文章

  • 氢能源汽车使用过程中的氢气监测技术:量子电导氢气传感器的引领
    ​    ​    ​一、引言    ​    ​随着氢能源汽车的不断发展,其安全性成为人们关注的焦点。氢气作为一种易燃易爆的气体,其在车辆内部和外部的浓度监测至关重要。本文将探讨车辆使用过程中氢气水平监测的技术手段,特别是量子电导氢气传感器的应用,以及系统架构......
  • 基于 GEE ERA5 数据集监测不同土壤层水分和温度变化
    目录1数据介绍2完整代码3运行结果1数据介绍数据集:ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AGGR")2完整代码//定义研究区域vargeometry=table;//加载ERA5数据集varera5Dataset=ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AG......
  • 基于STM32单片机自动售货机扫码支付无人超市语音播报无线蓝牙APP/WIFI-APP控制/WIFI视
    STM32-S147语音播报+二维码付+4种商品+4路电机出货+选货+手付+库存+缺货+找零+声光+按键+TFT屏+(无线方式选择)产品功能描述:本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、(无线蓝牙/无线WIFI/无线视频监控模块-可选)、步进电机控制电路、语音播报模块接口、蜂鸣器报警电......
  • STC12单片机设置50Hz的PWM波驱动舵机
    STC12单片机设置50Hz的PWM波驱动舵机一、引言在机器人控制、航模制作以及各种自动化设备领域,舵机作为一种关键的执行元件,能够精准地控制角度,实现诸如机械臂关节运动、模型转向等功能。而使用STC12单片机来产生50Hz的PWM波驱动舵机,是一种经济高效且灵活的方案。STC12系列单......
  • 新手如何学会单片机?(五)XC8P9530按键扫描以及功能处理
            单片机的按键扫描方法以及原理,百度有太多的案例解释,我这里就不做太多的赘述,只教大家如何利用XC8P9530配置输入上拉下拉,然后配合时基检测的方法。一般IO口按键检测要高电平有效,那IO口就要配置成输入下拉,反之则配置成输入上拉,一般我们单片机检测按键低电平有效的......
  • 课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)二、DHT11温湿度传感
    往期内容课设毕设分享:基于单片机的风扇控制器设计(AT89C52、Proteus、Keil)一、初期准备+单片机最小系统(时钟电路、复位电路)手把手教学如何做一份高分课设文章目录往期内容前言一、课设要求1.基本要求2.方案设定首先进行前期准备工作配置环境绘制思维导图功能要求分析大......
  • 基于单片机的书写坐姿规范提醒器的设计(论文+源码)
    1功能设计本课题为基于单片机的书写坐姿规范提醒器的设计,其主要针对学生在进行书写时,经常会出现坐姿不对等现象,这样长期下去会影响学生的身体健康,因此本系统在功能上设计如下:采用超声波传感器检测坐姿,如果距离太近,则通过语音播报“距离过近请注意坐姿”的提示信息;通过光敏电......
  • 国产化板卡设计原理图:2274-基于FMC接口的JFM7VX690T36的3U VPX信号处理板
    基于FMC接口的JFM7VX690T36的3UVPX信号处理板一、板卡概述     本板卡系我司自主研发的基于3U VPX导冷架构的信号处理板,适用于高速图像处理等。芯片采用工业级设计。该处理板包含1片 FPGA-JFM7VX690T36。板载两组64位宽DDR3,每组容量4GB,一个HPC FMC接口。VPX接口连接4......
  • 利用Python实现远程心电监测系统
    前言心电图(ECG)是监测心脏健康的重要手段。随着物联网技术的发展,远程心电监测系统逐渐成为可能。这类系统可以帮助医生实时监控患者的心电数据,及时发现异常情况,提供更为及时和精准的医疗服务。本文将详细介绍如何使用Python编写一个简单的远程心电监测系统,包括数据采集、数......
  • 故障分析---单片机上点后没有运转,如何检查
    故障分析---单片机上点后没有运转,如何检查确认电源电压是否正常。用万用表测量地引脚和电源引脚之间的电压,看是否符合规范电压;检查复位引脚电压是否正常。分别测量复位按键按下和松开时的电压,看是否符合;检查晶振是否起振了,一般用示波器来查看晶振引脚的波形,示波器探头使用“*1......