基于STM32单片机的病人护理监测系统
- 0、毕业设计选题原则说明(重点)
- 1、项目简介
- 1.1 系统功能
- 1.2 演示视频
- 2、部分电路设计
- 2.1 STM32单片机核心板电路设计
- 2.2 DS18B20温度采集电路
- 2.3 MKB0805血压心率检测电路设计
- 2.4、非接触式水位检测电路设计
- 2.5、OLED显示电路设计
- 3、单片机代码展示
- 3.1 系统初始化
- 3.2 DS18B20读取温度数据
- 3.3 非接触式水位传感器初始化
0、毕业设计选题原则说明(重点)
- 选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的!
- 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。
- 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业证而已!!!
- 当你明白这一点后,作毕业设计的要求就是在满足老师的要求后,越简单越好,这样不但容易去做,而且你自己也容易去理解,掌握,同样也能花最少的钱!!!
- 满足老师的要求,这个没办法,毕竟他是决定你是否能通过答辩的人。
- 每年都有很多同学找到我的时候,后悔当初为什么要把功能写的那么复杂,后悔没有提前找我咨询一下!所以在这里提醒同学们,提交开题报告之前一定要多想想,咨询下以往的学长学姐,不要自己随便写一堆提交上去!!!
1、项目简介
- 系统构成:本设计由STM32单片机电路+非接触式水位传感器电路+LED报警电路电路+蜂鸣器报警电路+DS18B20温度检测电路+oled显示电路+mkb0805心率血压检测电路+电源电路组成。
1.1 系统功能
- 功能介绍:
- 1、系统能够实时采集温度、舒张压、收缩压、心率数据
- 2、实时检测瓶内液体是否到达警戒值(2~3cm)
- 3、通过OLED显示心率、温度、舒张压、收缩压、液体是否到达境界值
- 4、心率超过140次/分钟即发出声光报警;血压范围:收缩压90~140,舒张压60~90,血压超出此范围进行声光报警
- 5、当输液瓶内液体降到警戒值(2~3cm)时,能发出警报信号
1.2 演示视频
2、部分电路设计
2.1 STM32单片机核心板电路设计
- 基于 ARM Cortex-M3内核的STM32F1系列单片机属于主流STM32单片机,其中增强型STM32F103子系列单片机的CPU 主频高达72MHz,片内Flash容量高达1MB,芯片引脚数量多达144个,有 QFN、LQFP、CSP、BGA 等多种芯片封装形式,并具有多种片内外设、USB接口和CAN 接口。根据STM32F103单片机片内Flash容量的不同,ST 公司将其分为小容量(16-32KB)、中等容量(64-128KB)、大容量(256KB-1MB)3种。
- 电源电路:为单片机提供稳定的工作电压,通常采用3.3V电源供电。电源电路的设计要保证单片机在不同工作条件下都能获得稳定的电压输出,以确保单片机的正常工作。
- 晶振电路:提供单片机工作所需的时钟信号。晶振电路通过晶振和电容组成,为单片机提供稳定的工作脉冲,确保单片机的定时和同步需求。
- 复位电路:实现单片机的复位功能,类似于电脑的重启。复位电路通过电容和电阻的配合,实现单片机在上电启动时的自动复位,以及通过手动按键实现复位功能,保证单片机在程序跑飞或异常情况下能够重新开始执行程序。
STM32单片机是一种功能强大、易于使用、灵活且可靠的32位微控制器,基于ARM Cortex™-M内核。其主要功能特点包括:
- 高性能和低功耗:STM32系列单片机提供多种内核选择,如Cortex-M0、Cortex-M3、Cortex-M4等,满足不同应用场景对性能的需求,同时保持低功耗特性。
- 多种通信和外设接口:STM32单片机具备广泛的通信和外设接口,如I2C、SPI、USART、USB等,便于开发者实现各种复杂功能。
- 易于开发和调试:STM32单片机提供了丰富的软件和硬件工具,如HAL库、CubeMX等,帮助开发者快速创建和调试嵌入式系统。
- 高集成度和设计灵活性:STM32系列单片机全系列产品共用大部分引脚、软件和外设,优异的兼容性为开发人员带来最大的设计灵活性
单片机最小系统原理图如下图所示:
- 实物图:
2.2 DS18B20温度采集电路
- DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
- DS18B20温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒,用户可定义的非易失性温度报警设置,应用范围包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统。试验证明DS18B20温度传感器满足本设计要求。
- DS18B20温度传感器封装一般有2种,使用上都是一样的。可以根据使用环境随意选择。第一种是直接是裸露的芯片,主要用于空气温度检测。第2种是不锈钢钢管封装好的,防水,一般用于水温灯液体温度检测。实物图如下:
- 其具体电路原理图如下图所示:
2.3 MKB0805血压心率检测电路设计
- 该心率血压监测方案主要由1 颗 YK1801 脉搏传感器芯片、1 颗 HR6707 脉搏芯片 、1 颗 HR6816增益芯片 和 1 颗 SFB9712 算法芯片组成。
- 脉搏传感器芯片采用光电式容积脉搏波描记( PPG )的方式感应人体的 脉搏信息并加以提取,通过模拟 端芯片 HR607+HR6816 和算法芯片 SFB9712 输出血压、心率等串口信号。
- 该心率血压监测方案可实现功能:心率血压采集计算、脉搏波和心电波形输出、人体佩戴状态识别、人体体表温度监测(选装)、 HR V PNN50 (选装)、 血压跟踪监测等人体健康指标。
- 血压方案原理:主要通过PPG 特征认知、跟踪对比监测用户的血压变化趋势。
- 其具体电路原理图如下图所示:
2.4、非接触式水位检测电路设计
- 传感器采用先进的信号处理技术及高速信号处理芯片,突破了容器壁厚的影响,实现对密闭容器内液位高度的真正非接触检测。适用于非金属管道(管道外径 D≥11MM)或者平面容器,无需与液体直接接触,不会受到强酸强碱等腐蚀性液体的腐蚀,不受水垢或其他杂物影响。
工作原理
- 利用水的感应电容来检测是否有液体存在,在没有液体接近感应器时,感应器上由于分布电容的存在,因此感应器对地存在一定的静态电容,当液面慢慢升高接近感应器时,液体的寄生电容将耦合到这个静态电容上,使感应器的最终电容值变大,该变化的电容信号再输入到控制IC进行信号转换,将变化的电容量转换成某种电信号的变化量,再由一定的算法来检测和判断这个变化量的程度,当这个变化量超过一定的阈值时就认为液位到达感应点。
- 其具体电路原理图如下图所示:
- 实物图:
- 安装图:
2.5、OLED显示电路设计
- OLED显示屏是一款无需背景光源,自发光式的显示模块。模块采用蓝色背景,显示尺寸控制在0.96英寸,采用OLED专用驱动芯片SSD1306控制。该模块支持通过I2C接口与控制器通信,支持高传输速率,能够实现60Hz的刷新频率。
其具体电路原理图如下图所示:
实物图:
3、单片机代码展示
3.1 系统初始化
void DeviceInit(void) {
Usart1_Init(115200); //串口1 连接MBK0805模块,发送命令与接收数据;同时还兼任系统打印调试信息
Usart2_Init(115200); //串口2,驱动ESP8266用
DIWaterInit(); //对光管引脚初始化
Beep_Init(); //蜂鸣器初始化
OLED_Init(); //OLED初始化
//清除数据
memset(&sample_data, 0, sizeof(SampleData));
memset(&system_mode, 0, sizeof(SystemMode));
memset(&show_data, 0, sizeof(ShowDataStr));
//初始化数据
sample_data.temp_threshold = 38.5; //温度阈值
sample_data.xinlv_h_threshold = 140; //心率阈值
sample_data.shousuoya_l_threshold = 90; //收缩压低阈值
sample_data.shousuoya_h_threshold = 140; //收缩压高阈值
sample_data.shuzhangya_l_threshold = 60; //舒张压低阈值
sample_data.shuzhangya_h_threshold = 90; //舒张压高阈值
}
3.2 DS18B20读取温度数据
//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值 (-550~1250)
short DS18B20_Get_Temp(void)
{
u8 temp;
u8 TL,TH;
short tem;
DS18B20_Start (); // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0xbe);// convert
TL=DS18B20_Read_Byte(); // LSB
TH=DS18B20_Read_Byte(); // MSB
if(TH>7)
{
TH=~TH;
TL=~TL;
temp=0;//温度为负
}else temp=1;//温度为正
tem=TH; //获得高八位
tem<<=8;
tem+=TL;//获得底八位
tem=(float)tem*0.625;//转换
if(temp)return tem; //返回温度值
else return -tem;
}
3.3 非接触式水位传感器初始化
void DIWaterInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(WATER_1_GPIO_RCC,ENABLE);//使能时钟
GPIO_InitStructure.GPIO_Pin = WATER_1_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
GPIO_Init(WATER_1_GPIO_PORT, &GPIO_InitStructure);//初始化引脚
RCC_APB2PeriphClockCmd(WATER_2_GPIO_RCC,ENABLE);//使能时钟
GPIO_InitStructure.GPIO_Pin = WATER_2_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IPD; //设置成下拉输入
GPIO_Init(WATER_2_GPIO_PORT, &GPIO_InitStructure);//初始化引脚
}