当前位置: 首页 > ds >正文

STM32项目分享:基于物联网的健康监测系统设计

“我们不做一锤子买卖,只做技术成长的长期伙伴!”

目录

一、视频展示

二、项目简介

三、原理图设计

四、PCB硬件设计

五、程序设计

六、资料分享


一、视频展示

基于物联网的健康监测系统设计 -视频分享

二、项目简介

题目:基于物联网的健康监测系统设计
主控:STM32
显示:OLED显示屏
jfc103生理指标传感器
ds18b20温度传感器
通信:esp8266上云
DC供电

功能:
1、屏幕实时显示当前体温,心率血氧,血压。
2、数据通过wifi上传到阿里云。
3、数据通过阿里云实时传输到手机查看数据。

三、原理图设计

四、PCB硬件设计

五、程序设计

#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "lcd.h"
#include "timer.h"
#include "IOput.h"
#include "usart.h"
#include "ds18b20.h"
/*该设计由STM32F103C8T6作为主控芯片,供电系统,0.96的OLED显示屏,DS18B20温度传感器和JFC103心率血氧血压模块,以及三个独立按键和蜂鸣器组成。
本设计的功能:1、 上电屏幕打开默认进入数据主页。该页面会显示当前测得数据包括心率血氧,舒张压收缩压,体温。2、此时摁下按键一时会进入阈值设置界面。共有五个阈值设置,都是通过摁下一键按顺序显示,方便调节阈值,其中分别为心率上下两个阈值设置(设置其上下限,测得心率超过阈值数值,蜂鸣器就会报警),血氧阈值设置(设置下限,和心率阈值报警逻辑一致),舒张压上下两个阈值设置,收缩压上下两个阈值设置,和体温阈值上限设置。
*/
u8 datatemp[SIZE];
u8 zl,show1_flag,count;
short zj;
u8 show_flag;
//以下是默认阈值,若修改此数值,则开机后对应的默认阈值也会改变
u8 max_wd=37;
u8 MaxDiastolicPressure = 139; //收缩压上限139
u8 MinDiastolicPressure = 100; //收缩压下限100
u8 MaxSystolicPressure = 89; //舒张压上限89
u8 MinSystolicPressure = 60; //舒张压下限60
u8 MaxBloodOxygen = 95;//血氧默认阈值
u8 MaxHeartRate = 100;//最大心率
u8 MinHeartRate = 60;//最小心率
u8 HeartRate,SystolicPressure,BloodOxygen,DiastolicPressure;int main (void)
{delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);OLED_Init();//屏幕初始化delay_ms(1);OLED_Clear();input_init();output_init();USART3_Init(38400);//jfc103串口初始化Usart_SendByte(USART3, 0x8a);Usart1_Init(9600);DS18B20_Init();show_flag == 0;while(1){count++;key_scan(1,0,0);//开启按键扫描程序if(set_flag == 1 && show_flag == 0){set_flag = 0;show_flag ++;if(show_flag >= 3)show_flag = 0;}if(show_flag == 0){show1_flag=0;temp_get();//温度获取入口OLED_ShowCH(0,0,"  健康监测系统  ");OLED_ShowCH(0,2,"心率:");OLED_ShowCH(0,4,"血氧:");OLED_ShowCH(0,6,"体温:");OLED_ShowCH(64,2,"收压:");OLED_ShowCH(64,4,"舒压:");OLED_ShowNum(40,6,wd,2,16);//温度数值if(senor_Flag)//判断当手指按压在jfc103模块上将开始传输数据并显示出来{senor_Flag=0;if(USART_RX_BUF2[65] == 0)OLED_ShowCH(40,2,"---");elseOLED_ShowNum(40,2,USART_RX_BUF2[65],3,16);//心率if(USART_RX_BUF2[66] == 0)OLED_ShowCH(40,4,"---");elseOLED_ShowNum(40,4,USART_RX_BUF2[66],3,16);//血氧if(USART_RX_BUF2[71] == 0)OLED_ShowCH(104,2,"---");elseOLED_ShowNum(104,4,USART_RX_BUF2[72],3,16);//舒张压if(USART_RX_BUF2[72] == 0)OLED_ShowCH(104,4, "---");elseOLED_ShowNum(104,2,USART_RX_BUF2[71],3,16);//收缩压HeartRate=USART_RX_BUF2[65];SystolicPressure=USART_RX_BUF2[72];BloodOxygen=USART_RX_BUF2[66];DiastolicPressure=USART_RX_BUF2[71];}}if(show_flag==1)//阈值修改界面,此界面包含四个阈值{OLED_ShowCH(0,0,"心率上限:");OLED_ShowCH(0,2,"心率下限:");OLED_ShowCH(0,4,"舒压上限:");OLED_ShowCH(0,6,"舒压下限:");OLED_ShowNum(72,0,MaxHeartRate,3,16);OLED_ShowNum(72,2,MinHeartRate,3,16);OLED_ShowNum(72,4,MaxSystolicPressure,3,16);OLED_ShowNum(72,6,MinSystolicPressure,3,16);if(set_flag==1&&show_flag==1)//在此界面判断按键按下程序,并与第一个界面放冲突{set_flag=0;show1_flag++;if(show1_flag>=4){show1_flag=0;show_flag=2;	OLED_Clear();}}if(show1_flag==0){OLED_ShowCH(112,0,"←");if(add_flag==1){add_flag=0;MaxHeartRate++;}if(dec_flag==1){dec_flag=0;MaxHeartRate--;}if(MaxHeartRate<=MinHeartRate){MaxHeartRate=MinHeartRate+1;}//防呆设置,避免心率上限阈值的数值比心率下限阈值的数值还要小,以下类似的均是此设置}if(show1_flag==1){OLED_ShowCH(112,2,"←");if(add_flag==1){add_flag=0;MinHeartRate++;}if(dec_flag==1){dec_flag=0;MinHeartRate--;}if(MinHeartRate>=MaxHeartRate){MinHeartRate=MaxHeartRate-1;}}if(show1_flag==2){OLED_ShowCH(112,4,"←");if(add_flag==1){add_flag=0;MaxSystolicPressure++;}if(dec_flag==1){dec_flag=0;MaxSystolicPressure--;}if(MaxSystolicPressure<=MinSystolicPressure){MaxSystolicPressure=MinSystolicPressure+1;}}if(show1_flag==3){OLED_ShowCH(112,6,"←");if(add_flag==1){add_flag=0;MinSystolicPressure++;}if(dec_flag==1){dec_flag=0;MinSystolicPressure--;}if(MinSystolicPressure>=MaxSystolicPressure){MinSystolicPressure=MaxSystolicPressure-1;}}}if(show_flag==2)//第二个阈值修改界面,包含四个阈值项{OLED_ShowCH(0,0,"血氧下限:");OLED_ShowCH(0,2,"温度上限:");OLED_ShowCH(0,4,"收压上限:");OLED_ShowCH(0,6,"收压下限:");OLED_ShowNum(72,0,MaxBloodOxygen,3,16);OLED_ShowNum(72,2,max_wd,3,16);OLED_ShowNum(72,4,MaxDiastolicPressure,3,16);OLED_ShowNum(72,6,MinDiastolicPressure,3,16);if(set_flag==1&&show_flag==2){set_flag=0;show1_flag++;if(show1_flag>=4){show_flag=0;OLED_Clear();}}if(show1_flag==0){OLED_ShowCH(112,0,"←");if(add_flag==1){add_flag=0;MaxBloodOxygen++;}if(dec_flag==1){dec_flag=0;MaxBloodOxygen--;}if(MaxBloodOxygen>=100 || MaxBloodOxygen<=0){MaxBloodOxygen=0;}}if(show1_flag==1){OLED_ShowCH(112,2,"←");if(add_flag==1){add_flag=0;max_wd++;}if(dec_flag==1){dec_flag=0;max_wd--;}if(max_wd>=100 || max_wd<=0){max_wd=0;}}if(show1_flag==2){OLED_ShowCH(112,4,"←");if(add_flag==1){add_flag=0;MaxDiastolicPressure++;}if(dec_flag==1){dec_flag=0;MaxDiastolicPressure--;}if(MaxDiastolicPressure<=MinDiastolicPressure){MaxDiastolicPressure=MinDiastolicPressure+1;}}if(show1_flag==3){OLED_ShowCH(112,6,"←");if(add_flag==1){add_flag=0;MinDiastolicPressure++;}if(dec_flag==1){dec_flag=0;MinDiastolicPressure--;}if(MinDiastolicPressure>=MaxDiastolicPressure){MinDiastolicPressure=MaxDiastolicPressure-1;}}}
//以下是判断阈值是否在范围内的判断,如果在范围内则停止警报,如果不在范围内则触发警报。if((HeartRate>=MaxHeartRate&&HeartRate!=0) || (HeartRate<=MinHeartRate&&HeartRate!=0) || (MaxBloodOxygen>=BloodOxygen&&BloodOxygen!=0) || ((MaxDiastolicPressure<=DiastolicPressure || MinDiastolicPressure>=DiastolicPressure)&&DiastolicPressure!=0) || ((SystolicPressure>=MaxSystolicPressure || SystolicPressure<=MinSystolicPressure )&&SystolicPressure!=0) || wd>=max_wd)BEEP=0;elseBEEP=1;if(count>=30){count = 0;USART_SendData(USART1,'B');delay_ms(1);USART_SendData(USART1,'a');delay_ms(1);USART_SendData(USART1,HeartRate);delay_ms(1);USART_SendData(USART1,'b');delay_ms(1);USART_SendData(USART1,BloodOxygen);delay_ms(1);USART_SendData(USART1,'c');delay_ms(1);USART_SendData(USART1,SystolicPressure);delay_ms(1);USART_SendData(USART1,'d');delay_ms(1);USART_SendData(USART1,DiastolicPressure);delay_ms(1);USART_SendData(USART1,'e');delay_ms(1);USART_SendData(USART1,(u8)wd);delay_ms(1);USART_SendData(USART1,'E');delay_ms(1);}}
}

六、资料分享

点击即可查看当前资料分享。

http://www.xdnf.cn/news/20462.html

相关文章:

  • 基于STM32的智能宠物屋系统设计
  • 人工智能学习:什么是seq2seq模型
  • Java全栈开发工程师的面试实战:从基础到复杂场景的技术探索
  • Compose笔记(四十九)--SwipeToDismiss
  • RabbitMQ工作模式(下)
  • 贪心算法应用:蛋白质折叠问题详解
  • Eureka与Nacos的区别-服务注册+配置管理
  • AI模型测评平台工程化实战十二讲(第一讲:从手工测试到系统化的觉醒)
  • 力扣29. 两数相除题解
  • Qt资源系统学习
  • 【继承和派生】
  • 【Flask】测试平台开发,重构提测管理页面-第二十篇
  • 把装配想象成移动物体的问题
  • java基础学习(五):对象中的封装、继承和多态
  • C++经典的数据结构与算法之经典算法思想:排序算法
  • phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2014-8959)
  • 吴恩达机器学习(七)
  • 综合安防集成系统解决方案,智慧园区,智慧小区安防方案(300页Word方案)
  • 《2025国赛/高教杯》C题 完整实战教程(代码+公式详解)
  • 关于连接池
  • 【PostgreSQL】如何实现主从复制?
  • 网络原理-
  • 在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • Qt 基础教程合集(完)
  • 分布式数据架构
  • 硬件开发_基于物联网的老人跌倒监测报警系统
  • 数据结构——栈(Java)
  • MySQL数据库约束和设计
  • 附050.Kubernetes Karmada Helm部署联邦及使用
  • C++_哈希