基于STC单片机的智能化病房温控系统设计与实现

2022-03-31 00:36李满堂王换换
计算机测量与控制 2022年3期
关键词:温控串口温湿度

李 裴,刘 慧,李满堂,朱 莉,王换换

(1.徐州医科大学附属医院 信息处,江苏 徐州 221002; 2 徐州医科大学,江苏 徐州 221000)

0 引言

医疗水平的快速发展使得人们对医院整体环境质量提出了更高要求,尤其是病房区的条件配置,是影响病患病情恢复的重要因素。而温湿度等作为病房环境重要组成因素,如何对其进行有效控制,并减少温控系统资源浪费,是当前病房温控系统建设面临的主要问题。

据调研,相似气候条件下,与发达国家相比,我国单位面积建筑所消耗的热量要高出1~2倍。据研究,在国内供暖系统中,大型供暖系统的节能潜力平均约为12.5%,造成能源浪费的主要原因包括建筑保温性能差、热计量方法不合理,室温调节机制不完善等[1-2]。

对于温控系统的设计,科研人员已经开展了多项研究。并根据温度控制目标的不同,分为动态温度跟踪与恒值温度控制,在工业化工生产、农业生产以及室温控制等方面均有涉及[3-5]。在已开展的各项研究中,研究人员提出的PID控制算法[6-7]、智能温度控制法[8-9]、基于模糊逻辑描述的控制算法、模糊PID温度控制技术[10-11]等常用于工业化工生产、农业生产以及数学模型构建等,对于医院病房温度控制的研究相对较少。同时由于现有部分病房温控系统分辨率与精度低、管理人员水平有限、系统智能化程度不足,导致病房温控效果并不理想。

在国外,学者对温控系统及室内温控装置进行了较多研究,Monetti等使用Energ- yPlus[12]软件对某住宅使用散热器温控阀使供暖能耗进行动态仿真模拟,使节能效果提升2%~10%;Tahersima[13]等利用散热器温控阀的基础上提高了维护结构保温性能,供暖能耗下降50%;Baek[14]等设计了一种基于模糊目标温差的水利地板辐射采暖自适应室外复位控制系统,该系统能够确定热量供应时间和开关时间,且系统具有有效性。

在国内,宋春宁[15]等提出了基于ADHDP的PEMFC温度控制方法,利用Matlab/ Simulink仿真平台设计温度控制器,使电堆温度超调量仅为0.59%,小于HDP的0.94%;窦子文等[16]设计了基于前馈-反馈符合控制的光学晶体温度调节器,通过引入双闭环控制的前馈补偿控制,并基于ARM+FPGA架构的TEC驱动模块,实现高频、高精度的PWM驱动控制,使系统的精度可控制的宽温范围在-30 ℃~130 ℃;宋佳良等[17]对一种具有室温居里点的新型PTC材料PID控温性能展开研究,降低了温度超调,提高了控温精度。

学者对温控系统的设计开展了较多研究,但适用于病房的温控系统却少有研究,因此该文设计了一种基于STC单片机[10]的智能化病房温控系统。该系统利用温湿度传感器以及CO2浓度传感器对病房温湿度及CO2浓度进行实时检测,通过LCD1602显示屏显示。在病房温度调整过程中,可通过PID算法[11]的参数调整,实现病房温度的自控制,也可利用下位机通过UART串口通信将数据传输至PC上位机系统中,管理员根据医院需要更改病房温度阈值,调整病房区域温度,病患也可通过室内控制器进行调整,确保温控系统的灵活性。该系统的研究与设计对于提高温控调节器灵活性、降低医院资源消耗、提升病患入院诊疗满意度具有重要帮助。

1 系统整体设计方案

该系统由软件部分和硬件部分组成,具体执行流程如下:

温湿度传感器DHT11对病房实际温湿度进行监测,CO2传感器、CO传感器等获取病房内各种气体浓度,数据通过接口及时上传至单片机中。

单片机对收到的温湿度、一氧化碳、二氧化碳等数据后,进行分析与处理;同时对温度、湿度的具体值以及CO和CO2的浓度进行分析,并通过LCD1602显示屏展示当前温湿度等的值。

对于所监测的各项参数,通过单片机中独立的键盘模块,对温湿度的阈值进行设置,当温湿度及各类气体监测值超过限值时,蜂鸣器模拟的报警系统将发出警报。警报出现后,模拟的控温系统、加湿系统以及通风系统将根据报警值自动调节,直到数值恢复到正常范围。

在上述过程中,单片机通过UART串口通信将传感器监测到的温湿度数据发送至PC端,上位机将数据保存至数据库中,并通过相关技术绘制温湿度的实时曲线。

1.1 系统相关参数设计

系统设计中需首先保证相关参数的设计要求,及相关硬件的使用要求,参数具体范围如表1所示。

表1 单片机相关参数参考范围

1.2 系统设计目标分析

为确保基于STC单片机的智能化病房温控系统能够实时监测病房温湿度,检测病房CO2等气体浓度,灵活控制病房温湿度,保证病患住院舒适度,该温控系统的设计需实现以下几点目标。

1)实时性:由于病房存在长时间不通风状态,尤其是较为寒冷的冬季,会导致室内有害气体浓度上升,对室内人员造成危害;同时为确保病患舒适度提高疾病恢复速度,需控制室内温度在设定阈值范围内,因此,该温控系统的设计需具备实时性。

2)高分辨率、高精度:长时间不通风状态下易产生CO2气体,对病房人员造成不良影响。对此,需要具有高分辨力和高精确度的检测设备来实现对有害气体的检测和记录,当浓度接近阈值时,下位机产生预警信息,通过无线传输至上位机系统,蜂鸣器警报,确保病患安全。

3)灵活性:通常病房温湿度的控制由医院温控系统统一管理,但由于病房类型和病患需求的不同,要求温控系统具有一定的灵活性,保证病患或病区医生能够自主设定温湿度阈值,加快病患病情恢复速度。

1.3 系统功能设计分析

为实现该温控系统的预期设计目标,在该病房温控系统的设计中需实现以下功能:

1)系统各功能模块独立运行,当模块出现错误时,上位机控制端具备错误追踪能力,能够快速定位错误点,加快系统恢复进程,降低系统故障影响。

2)对于病房的温湿度等环境参数,系统具备对病房温湿度的实时监测功能,同时能够满足病患和管理人员的灵活自调整需求。

3)当病房温湿度及有害气体超出设定的温湿度与气体浓度限值时,系统具备报警功能,当出现问题时,能够及时提醒管理员进行调整,提升医护人员处理速度,提高病患入院诊疗满意度。

1.4 系统模块化设计

该文设计的基于STC单片机[18]的智能病房温控系统采用模块化的设计原则,将系统分为主控模块、数据采集模块、数据处理展示模块、串口通信模块以及自动控制模块,各模块功能如下。

1)主控模块:该模块负责系统的整体运行,提供下位机终端设备与各传感器的控制功能,并通过中央处理器CPU、程序存储器RAM、数据存储器ROM、多种I/O口和终止系统、定时器/计数器以及UART串口通信与各模块进行通信,保证硬件系统稳定运行。

2)数据采集模块:数据采集模块包含温湿度采集板块和气体监测模块,由DHT11传感器、CJMCU-MiCS-6814传感器以及T6713-5K传感器组成,可利用主控模块将传感器和A/D转换器将传输的电压信号转化为数字信号,然后在LCD屏显示。

3)串口通信模块:该模块是单片机将检测到的数据值发送到PC端的重要通道。

4)自动控制模块:该模块是当温湿度和相关气体浓度超过既定阈值,蜂鸣器开启报警,温控板块、加湿板块以及通风板块自动工作调节温湿度至正常范围。

图1 系统电路图

2 系统硬件设计

病房温控系统由主控模块、数据采集模块、数据处理与显示模块、串口通信模块以及自动控制模块组成。整体系统硬件架构如图2所示。

图2 系统硬件架构图

2.1 主控模块

主控模块作为下位机核心单元,需保证下位机端各模块稳定运行,设计中采用基于8位单片机处理芯片STC89C51RC系统的STC89C51单片机,该单片机基于51核心板,作为8051核的ISP可编程芯片,最高时钟频率为80 MHz,内含4 k Bytes的可反复擦写一千次,Flash只读程序存储器,兼容标准MCS-51指令系统及80C51引脚结构,芯片集成通用8位中央处理器、ISP Flash存储单元以及MAX810专用复位电路(外部20 M以下时,可省外部复位电路)。

CPU结构采用流水线和简化的指令集和,工作电压为5 V,时钟频率为0~35兆赫兹,正常工作时电压为48兆赫兹,应用程序存储空间为12 k、10 k、8 k、6 k、4 k、2 k Byte,随机存取存储器为512字节,EEPROM以512字节为一个扇区,起始地址为Flash+1(0×2 000),有23或27个通用I/O口,电压幅为之后准双向口可设置成准双向口/弱上拉、推挽/强上拉、仅为输入/高阻以及开漏4种模式,内部集成MAX810专用复位电路,当外部晶体晶振低于20兆赫兹,外部复位电路省略不用。时钟源部分,外部有高精度晶体,内部采用R/C振荡器。常温下内部R/C振荡器频率为5.2~6.8兆赫兹。

本次设计中,单片机选用PDIP封装方式,引脚部分P0口由8个相同结构引脚组成;P1口通常用作通用I/O端口,可用作按拉寻址处理;P2口可作为普通输入输出口,也可以在系统外部扩展存储器,输出高8位地址;RST为复位端口,ALE/PROG输出1/6角频率的方波;PSEN作为外部程序存储器选通讯号;EA/VPP作为访问外部程序存储器的控制信号,XTAL1是振荡器逆变放大器和内部时钟发生器电路的输入端,XTAL2是XTAL1的输出端。

2.2 数据采集模块

数据采集模块包括温湿度信号采集板块、CO气体浓度采集板块、CO2气体浓度检测模块。

温湿度传感器选用DHT11传感器,包含3个引脚,P1(GND),接地,电源负极;P2(DATA),船型数据,单总线,接单片机IO口;P3(VCC),电源引脚。数据由8 bit湿度整数数据+8 bit湿度小数数据+8 bit温度整数数据+8bit温度小数数据+8 bit校验位;微处理器(M0)与DHT11通信约定,其中M0作为主机,DHT11为从机。具体过程M0通知相应信息准备接收数据,DHT发送信号准备结束内部信号,DHT的测试环境的温湿度数据和记录数据的开始信号为下次M0。整个过程中,DHT输出80 μs低电平作为应答信号,输出80 μs高电平,作为通知微处理器准备接收数据的通知。

CO传感器采用CJMCU-MiCS-6814,该传感器除可检测CO浓度外,还可对NH3、NO2等气体进行监测。该传感器具有体积小、适应能力强、功耗低、检测灵敏度高、监测范围广等优势,传感器的5个引脚分别对应CO、NH3、NO2、GND、+5 V。具体参数配置如表2所示。

表2 CJMCU-MiCS-6814参数表

CO2传感器选用T6713-5K气体传感器,传感器大小为30 mm×15.6 mm×8.6 mm,准确率的范围为400~5 000 ppm+/-30 ppm±3% 到400~2 000 ppm+/-25 ppm±3%之间,温度依赖性为每摄氏度5 ppm或每摄氏度读数的0.5%,以较大者为准,压力一辆为每毫米汞柱读数0.13%,90%的跃阶变化响应时间<3分钟,信号每5秒更新一次,传感器本身的存储条件在-30~70摄氏度之间。该传感器融合了体积小、精度高、可靠性强、功耗小、测量范围大、响应时间短等优势,相关参数如表3所示。

表3 T6713-5K参数表

设计中选择的各种传感器所需满足的各种工作条件互不排斥,且均具有较高的精确度,能够在复杂环境中稳定运行,保证了温控系统整体的可靠性。

2.3 显示模块

采用LCD1602液晶显示屏,双行显示,每行16字符,工作电压为4.5~5.5 V,工作电流为在5 V电压下为2毫安,字符尺长为2.95×4.35(长×宽)毫米,显示屏中包含16个引脚,第2引脚为VCC接V电压,第3引脚VL为液晶屏显示对比度调节端口,第4脚RS选择寄存器,RS=0,选择数据寄存器,RS=1,选择指令寄存器,第6引脚E为Enable,高电平转低电平时,表示可用,能实现命令,第7~14引脚,D0~D7是8位双向数据线。另外LCD1602中关键性指令设置了清屏指令、设置模式指令、显示开关控制指令、功能设定指令等。

2.4 预警模块设计

预警模块主要负责对超出预警值的监测信息进行报警,确保病房环境安全。具体硬件设计如下。

预警模块由蜂鸣器、发光二极管以及LED组成。电子蜂鸣器作为集成结构,选用直流稳压电源,应用场景广泛,设计中通过设置不同的频率使蜂鸣器发出不同声音,作为不同监测值的报警信息。设计中使用有源蜂鸣器,在其两端加载5V的直流电压,当单片机P1^5输出一个低电平时,蜂鸣器响,实现报警。

发光二极管由含镓(Ga)、砷(As)、磷(P)、氮(N)等化合物制成,由于LED体积小,常作为电路指示灯。该文设计中使用红色发光二极管作为自动控制模块中的一部分,当蜂鸣器报警时,LED模拟加湿系统,调节病房湿度,控温系统调节病房温度,通风系统调节病房空气质量。

2.5 按键模块设计

该系统对硬件系统按键模块的设计中采用独立键盘的方式,一个按键对应单片机的一个I/O口引脚。设计的总份额从K1到K3,共有3个按键式开关,K1、K2、K3分别连接单片机P3^1、P3^0以及P3的2个I/O口,用来改变温湿度的上下限阈值。键盘模块为低电平,按键未按下时,上拉电阻确保单片机I/O口具有一定的高电平,当某个按键按下时,I/O口变成低电平。

3 系统软件设计

系统的软件设计主要分为上位机和下位机两部分,软件部分采用STC89C51系统进行C语言的编辑,Keil C51提供了完整的开发方案,本次设计在Win10环境下运行。

3.1 单片机软件系统

主程序控制各模块,负责接收温湿度传感器的温湿度数据、接收CO传感器和CO2传感器检测的气体数据,并向PC端传送串口数据、LCD液晶屏显示温湿度,进行按键检测调节温湿度上下限。主程序设计如下:

void main()

{

uchar i:

UsartInit( ); // 串口初始化

LcdInit( ); // 液晶功能初始化

LcdShowInit ); // 显示功能初始化

Flengshan = 0;

AlarmTL = EEPROM_Read(0x2000);

//从EEPROM的0x2000位置读取温度的报警下限

AlarmTH = EEPROM_Read(0x2001);

AlarmHL = EEPROM_Read(0x2002);

AlarmHH = EEPROM_Read(0x2003);

while(1)

{

sendSeriaPortMessage();//串口传输

Datapros();//接收CO2数据

ReadDhtData(); //检测温湿度数据

LcdGotoXY(1,2);//光标定位温度处

LcdPrintNum(temp); //显示温度值

LcdGotoXY(1,11); // 定位湿度处

LcdPrintNum(humi); //显示湿度值

AlarmJudge(); // 判断报警信息

for(i=0;i<25;i++)

{

KeyScanf(); // 按键扫描

DelayMs(20); // 延时

}

}

}

3.2 DHT11温湿度数据收集程序设计

DHT11能够读取5个字节,连续读40 bit。当遇到低电平时,是while(低电平),等待;为高电平时,就延时30 μs,然后读电平,若读到低电平,说明已经到达第二个bit,而之前那个bit是0,返回(1);如果是高电平,说明我们还在这个bit,bit是1,则while(高电平)等待,等转换到bit的低电平,返回(1),具体程序设计如下。

图3 相关参数监测流程图

void ReadDhtData()

{

uchar HumiHig; //分别设置温湿度的限值

uchar HumiLow;

uchar TemHig;

uchar TemLow;

uchar check;

DHT11_P = 0;

DelayMs(20);

DHT11_P = 1;

Delay10us( );

Delay10us( );

Delay10us( );

while(!DHT11_P); //等待

while(DHT11_P); //将测量数据赋予定义好的变量

HumiHig = DhtReadByte( );

HumiLow = DhtReadByte( );

TemHig = DhtReadByte( );

TemLow = DhtReadByte( );

Check = DhtReadByte( );

DHT11_P = 1;

if(check HumiHig+HumiLow+TemHig+TemLow)

{

Temp = TemHig;

Humi = HumiHig;

}

}

3.3 接收串口数据关键代码

接收串口数据前首先对串口进行初始化操作,注册串口驱动程序,在初始化过程中,先取出相应的UART_Port,然后对其初始化,获取虚拟机地址,获取终端号,复位FIFO;接着添加UART_Port-UART_add _one_Port,创建属性文件,最后初始化动态频率调节,关键代码如下。

SerialPort1 = newSerialPort (“COM5”, 4800, Parity.None, 8, StopBits.One); //初始化串口设置

Public delegate void Displaydelegate (byte[] InputBuf);

Byte[] OutputBuf = new Byte[128];

public Displaydelegate disp_delegate;

string str;

Public From1()

{

disp_delegate =new Displaydelegate (DispUI);

serialPort.DeataReceived += new;

SerialDataReceivedEventHandler(Comm_DataReceived);

InitializeComponent( );

}

3.4 绘制实时曲线

该部分的设计为实现温湿度的实时监测,并实现温湿度的可视化,便于管理员实时监测温湿度变化趋势,进行相应的限值调整,具体设计如下。

private void timer1_Tick(object sender, Event args e)

{

timer1.Interval = 500;

Double newX, newY, newZ;

newX = i;

newY = Convert.Todouble(temp);

newZ = Convert.ToDouble(humi);

Chart1.Series[0].Points.AddXY(newX, newY);

Chart1.Series[1].Points.AddXY(newX, newZ);

i++;

if(chart1.Series[0].Points.Count > 10)//绘画坐标点超过100个时,更新X时间坐标

{

Chart1.ChartAreas[“ChartAreal”].AxisX.Minimum = i-10;//设置Y轴最小值

Chart1.ChartAreas[“ChartAreal”].AxisX.Maximum = i+10;//设置Y轴最大值

Chart1.ChartAreas[“ChartAreal”].AxisX.Interval = 2; //设置每个刻度的跨度

}

}

3.5 PID算法

此外,为实现病房温控系统的智能化,系统设计中使用PID算法[19-21],通过PID算法中的参数调整,智能调节病房温度。

图4 PID算法框架图

PID是比例、积分与微分的简称,该算法的关键是控制参数KP、KI、KD的设置。作为比例控制参数KP,其能够提高系统的动态响应速度,迅速反应误差,从而减少误差,但不能消除误差,即KP值越大越快,KP值越小越慢;KI为积分控制作用,一般用于消除静态误差,静态误差指系统稳定后输入输出之间存在的差值,当系统存在误差,积分作用便会导致误差不断叠加,便需要输出控制量来消除误差,当误差为零时,积分停止;KD则是对偏差的变化趋势做出反应,根据偏差的变化趋势实现超前调节,提高反应速度。PID算法数学表达如下。

设定一个目标温度值,设为yp(t),实际温度是y(t),则偏差值为:

err(t)=yp(t)-y(t)

(1)

由图6知,得出偏差值err(t)后,根据PID算法的比例、积分和微分运算,得到控制量u(t),其表达式如下:

图6 温湿度范围设置测试

(2)

其中:u(t)为控制器输出值,KP为比例系数,TI为积分时间常数,TD为微分时间常数。

积分项KI可以化简为:

(3)

微分项KD可以化简为:

(4)

综上,控制量u(t)公式化简为:

KD*[err(k)-err(k-1)]

(5)

算法执行过程如下:

图5 算法执行流程图

4 实验结果与分析

系统设计完成后,为确保系统各模块能够正常运行,将病房温控系统设计的软件、硬件、网络等板块相结合,开展现实环境中的实践测试,以便及早发现潜在问题并进行处理。本次实验主要针对硬件系统是否正常运行、温湿度的限值设置、温湿度的实时曲线显示,结果如下。

4.1 硬件系统检测

该部分对电源模块、主控模块、液晶显示模块以及DHT11传感器是否正常工作进行检验,首先接通电源查看电源指示灯是否正常亮起,其次检测DHT11传感器是否正常监测温度,以及LCD1602显示屏是否正常开启,并能显示温湿度传感器上传的温湿度数值,最后检测单片机按键模块是否能调整温湿度的限值,经检验一切正常。

4.2 温湿度阈值设置

本次实验针对冬季病房温度阈值进行设置,考虑病患舒适度与病患病情恢复速度等因素,决定将温度范围设置为20~25 ℃,湿度为40%RH~55%RH,结果如下。

4.3 温湿度实时监测

为更好地观察病房内温湿度的变化过程,以及全天病房温湿度变化趋势,系统设计中在上位机部分设置了温湿度实时变化曲线监测功能,横坐标为时间变化,纵坐标为温湿度范围,具体结果如下。

图7 温湿度实时曲线

经检验,该文设计的温控系统各部分能够正常运行,温湿度传感器、一氧化碳和二氧化碳等气体传感器能够正常监测环境温湿度以及其中气体浓度,并能通过接口将数据上传至单片机中,LCD显示屏对数值进行显示,之后通过UART串口将数据上传至PC上位机端,实现温湿度曲线的实时绘制,实验结果达到预期目标。

5 结束语

目前,构建智能化的病房温控系统是解决或缓解医院病房温控资源浪费的重要手段,其中通过精密有效的测量方式与仪器形成的软硬件系统则是智能化病房温控系统建设的重点。该文利用STC系列,基于51核心板的8051核ISP可编程芯片,设计基于PID算法的智能病房温控系统,通过温湿度传感器实时监测病房温湿度变化趋势,期间单片机通过转换器接收传感器上传的温湿度等数据,利用UART串口将数据上传至上位机端进行可视化。通过设置温湿度限值,使用蜂鸣器建立预警系统,对超出限值的项进行报警,管理员通过操作软件系统或硬件系统按键模块,实现对病房温湿度的范围控制,确保病房整体环境质量,为病患提供更良好的病房环境,有助于病患疾病的恢复。另外,所选用的各类仪器能够在低功耗下,长时间稳定运行,且能保证精确度,有效降低了管理人员的管理难度。针对该文设计的系统存在的不足,下一阶段研究中,将不断完善该温控系统的智能化建设,并通过引入深度学习算法,实现系统的高效自管理。

猜你喜欢
温控串口温湿度
基于小型化的功放单元和温控箱结构及散热设计
蛋鸡育雏育成舍环境控制技术
档案库房温湿度记录统计及调控
MCS—51单片机中的多串口通讯技术的应用
智能风扇技术在冷却X射线管组件中的应用
变电站高压配电智能温湿度控制装置的研发与应用
全国计算机等级考试机房准备工作探讨
档案库房温湿度调控思考
微机串口的测试诊断
温控旋转型MINI卷发器