聚丰项目 > 大病术后吹气练习仪
首先,我向各位致歉,因为申请的项目为“液体流量传感器”类的项目,但最终给我发来了“气体流量传感器”。使得原计划项目不得不更改。但,我要致谢IDT,错误的传感器,确给我带来了另外一个项目的应用:大病术后吹气练习仪。
lgx1213
分享lgx1213
团队成员
刘桄序 组长
刘小军 软件设计
罗晨 协调与设备测试
陈相炙 硬件电路
梁雄 软件美观设计
由于大病在手术后,都需要进行吹气练习,以练习肺活量和排除肺中废物。
为此研究的“大病术后吹气练习仪”,具备以下功能:
1、仪器便携方便,吹气量化精确,为治疗提供重要参考数据
2、仪器具备设备显示和手机APP操作、显示两用,并具备数据记忆和查询功能,方便病人和家属使用
3、测试数据具有云端功能,方便医生对病人气量的掌握,数据科学,避免家属照顾中数据出现差错,影响医治和用药判断
4、测试提醒功能:照顾病人家属可能因为照顾不周,忘记定期测试和测试时间,本功能测试仪具备设置定时提醒功能。
一、整体硬件电路雏形
二、硬件说明:
本硬件由单片机系统和气体流量传感器构成。单片机系统采用89c52单片机,具备8位数字显示功能,通过蓝牙模块与手机端APP进行链接,进行设备测试及其他相关操作。电路框图如下:
1、单片机系统
单片机采用最为常见的89C51系列单片机,对于系统应用和移植都非常方便。单片机系统采用5V供电,与其他模块电路供电电路一致。
电路系统中,除最小系统应用电路的18、19引脚外接晶体振荡器外,9脚还必须外接对应的复位电路,必不可少。另外对于功能性引脚引用方面:1、2脚(P1.0、P1.1)接按键,对运行模式进行调控。12~15( P3.2~P3.5),及21~28(P2.0~P2.7)为数码LED显示的段码控制端。10、11脚(P3.0\RXD、P3.1\TXD)外接蓝牙模块,39脚P0.0接气体流量传感,进行AD模拟信号输入。
2、气体流量传感器
本系统电路中,气体流量传感器采用IDT提供的FS2011,本模块各引脚功能键下表。
在数据量化中,可以参考:
以及:
这由于传感器的高灵敏性,使得在计算之前必须要进行补偿,否则数据将不会准确。
3、蓝牙模块
本电路采用市售现成的蓝牙模块与系统相连,以便实施手机APP与硬件系统的数据交互。
4、按键电路
本系统中设置了2个按键,即K1和K2对应电路。可对运行状况、各类参数进行设置调控。
5、显示电路
本处显示电路采用由74hc595驱动译码的八位数字显示电路。其中,高4位显示为瞬间气体流量值,低4位位单次吹气小计流量值。
三、手机状态运行截图
上图显示吹气人的吹气量比较低,图片显示底部为绿色,需要加油练习。
上图显示吹气人的吹气量比较好,图片显示中部为蓝色,表示吹气人的吹气量较好。
上图显示吹气人的吹气量比很好,图片显示上部为红色,全部显示完毕为最好,吹气量为正常人状态。
1、单片机应用软件
#include "reg52.h"
#include"XPT2046.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P2^0;
sbit k2=P2^1;
u8 m,moshi=1;
u8 disp[4],disp1[8];
static u16 temp2;
void delay100ms(void) //误差 -0.000000000023us
{
unsigned char a,b;
for(b=221;b>0;b--)
for(a=207;a>0;a--);
}
void delay(u16 i)
{
while(i--);
}
void delay2ms(void)
{
unsigned char d,e;
for(d=4;d>0;d--)
for(e=248;e>0;e--);
_nop_();
}
void UsartInit()
{
SCON=0X50;
TMOD=0X20;
PCON=0X00;
TH1=0XFd;
TL1=0XFd;
ES=1;
EA=1;
TR1=1;
}
void datapros()
{
u8 temp1;
temp1 = Read_AD_Data(0xE4)/16;
disp[0]=temp1/1000;
disp[1]=temp1%1000/100;
disp[2]=temp1%100/10;
disp[3]=temp1%10;
if(m==4)
{
m=0;
}
}
void DigDisplay()
{
for(m=0;m<4;m++)
{
UsartInit();
SBUF='0'+disp[m];
delay2ms();
TI=0;
}
}
void delay10ms(void)
{
unsigned char a,b;
for(b=249;b>0;b--)
for(a=17;a>0;a--);
}
void datapros1()
{
static u16 temp3;
static u8 i;
if(i==100)
{
i=0;
temp3 = Read_AD_Data(0xE4);
if(temp3>100)
{
temp2=temp3+temp2;
}
else
temp2=temp2;
}
i++;
disp1[0]=smgduan[temp3/1000];
disp1[1]=smgduan[temp3%1000/100];
disp1[2]=smgduan[temp3%1000%100/10];
disp1[3]=smgduan[temp3%1000%100%10];
disp1[4]=smgduan[temp2/10/1000];
disp1[5]=smgduan[temp2/10%1000/100];
disp1[6]=smgduan[temp2/10%1000%100/10];
disp1[7]=smgduan[temp2/10%1000%100%10];
}
void DigDisplay1()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
case(4):
LSA=0;LSB=0;LSC=1; break;
case(5):
LSA=1;LSB=0;LSC=1; break;
case(6):
LSA=0;LSB=1;LSC=1; break;
case(7):
LSA=1;LSB=1;LSC=1; break;
}
P0=disp1[i];
delay(100);
P0=0x00;
}
}
void main()
{
while(1)
{
if(moshi==2)
{ while(1)
{
datapros();
DigDisplay();
delay100ms();
if(k2==0)
{
delay10ms();
if(k2==0)
{
moshi=1;
break;
}
}
}
}
else if(moshi==1)
{
while(1)
{
datapros1();
DigDisplay1();
if(k1==0)
{
delay10ms();
if(k1==0)
{
temp2=0;
}
}
if(k2==0)
{
delay10ms();
if(k2==0)
{
moshi=2;
break;
}
}
}
}
}
}
2、APP手机端应用软件
见附件运行程序
3、云端数据库
(略)
(3.44 MB)下载