基于单片机的智能医院输液系统设计

目 录

摘 要 Ⅰ
Abstract Ⅱ
引 言 1
1系统方案设计与论证 3
1.1系统硬件结构总体设计方案 3
1.2点滴速度测量电路方案的选择与论证 3
1.3液面检测电路方案的选择与论证 4
1.4通过电机控制滴速电路的方案与论证 4
1.5显示器接口电路方案选择与论证 5
1.6键盘接口电路方案选择与论证 6
1.7单片机型号的选择与论证 6
2输液系统各模块的硬件设计 9
2.1控制电机模块设计 10
2.2数据采集模块 11
2.3电源模块 13
2.4声音报警模块 13
2.5复位电路 13
2.6显示模块 14
2.7键控模块 16
2.8通信模块设计 17
3系统软件及框图设计 19
3.1滴速检测子程序 20
3.2电机控制子程序 21
3.3显示子程序 23
3.4键盘子程序 24
4系统调试及项目焊接 26
4.1设计实现过程 26
4.2电路焊接 26
4.3实物调节 27
4.4系统测试及结果误差分析 28
结 论 30
参考文献 31
附录1原理图 33
附录2源程序代码 34
致 谢 45

摘 要

随着自动化控制的不断发展,为了使医院工作人员更加轻松的工作,并且保证工作人员的工作效率,医院如何引进自动化设备作为临床医疗这个话题已经成为医疗事业的重点。静脉输液作为现代医疗的一种很常规的医疗手段,通过使药液直接进入到人体的静脉血液中直接起到治疗作用。本论文所阐述的医院输液系统将会对医疗事业有很大的帮助。
本课题是研究如何使自动化设备与静脉输液完美结合在一起的方法,本论文论述了如何用AT89SC51单片机以及多种传感器协同合作来实现自动化输液系统的。通过测速模块测出药液的滴速,通过红外感应模块反馈给单片机,继续向下传导信号来控制滴速保持稳定。通过液面检测传感器来反映出瓶中剩余的药液量,当到达起始时设定的警戒位置时发出警报并亮起红灯来提醒医护人员。这个系统操作简洁、上手较快、具有报警功能并且方便集中控制,在现代医疗事业具有较大意义,推动了自动化的智能医疗事业的发展, 有利于提高医护质量。
本项目总体实现了使用红外线感应模块来感应到液体的滴速,可以自行调节滴速。并可在护士站直接显示出瓶中剩余液体量与剩余时间,使护士可以实时了解输液情况。当瓶中的剩余量到达警戒值时发出警报并亮起红灯来提醒进行更换或拔除。本项目的整体设计对医院输液系统达成自动化做出巨大贡献。

关键词:51单片机;医院输液系统;输液监控系统。

Abstract

As a very conventional medical means in modern medical treatment, intravenous infusion plays a therapeutic role by directly entering the human vein blood. The hospital infusion system described in this paper will be of great help to the medical cause.
This paper discusses how to use 89C51 single chip microcomputer and many kinds of sensors to cooperate to realize the automatic infusion system. The dropping speed of the medicine liquid is measured by the speed measuring module, fed back to the single chip microcomputer by the infrared induction module, and continues to conduct downward signals to control the dropping speed to keep stable. Through the liquid level detection sensor to reflect the remaining amount of liquid medicine in the bottle, when it reaches the warning position set at the beginning, it will give an alarm and light a red light to remind the medical staff. This system is simple in operation, fast in operation, with alarm function and convenient in centralized control. It has great significance in modern medical industry, promotes the development of automatic intelligent medical industry, and is conducive to improving the quality of medical care.
In this project, the infrared sensing module is used to sense the drop speed of liquid, and the drop speed can be adjusted by itself. The remaining liquid quantity and time in the bottle can be displayed directly in the nurse station, so that the nurse can know the infusion situation in real time. When the remaining quantity in the bottle reaches the warning value, an alarm will be given and a red light will be lit to remind replacement or removal. The overall design of the project makes a great contribution to the automation of the hospital infusion system.

Keywords: 51MCU;hospital infusion system;infusion monitoring system

引 言

当今社会自动化控制在不断进展,为了使医院工作人员更加轻松的工作,并且保证工作人员的工作效率,医院如何引进自动化设备作为临床医疗这个话题已经成为医疗事业的重点。静脉输液作为现代医疗的一种很常规的医疗手段,通过使药液直接进入到人体的静脉血液中直接起到治疗作用。本论文所阐述的医院输液系统将会对医疗事业有很大的帮助。但是随着现代医疗事业的快速发展,越来越多的新药问世,这同时也意味着对输液的要求也越来越严格。一些药的滴速不宜过快,还有一些药滴速需要稳定在定义的速度,并且针对不同年龄、性别、身高、体重、体质的患者有着不同的输液要求。并且在输液过程中,偶尔会发生患者与医生没有注意到瓶中的剩余药液量而导致空气进入血管以至于发生医疗事故。为了避免此事的发生,本项目设计重点考虑此问题,并着重进行改进。
目前国内对输液系统的研究落后于世界先进国家,主要原因是起步较晚,当然我国现阶段医疗设备的市场中也有自主研发的输液设备。但是相较于国外来说,差距还是肉眼可见的。我国医疗设备整体技术落后于很多先进国家,并且种类也相对于很少,质量差距也是比较大。先进国家在自动化输液系统这项研究上起步很早因此领先于我国比较多。像在日本、新加坡、美国、德国的自动化医疗设备已经很普遍。
目前在中国,输注装置的研究相对滞后,国内市场上也有一些输注装置,但一般来说,国内的自动输注系统还需要很远的距离,而国内的医疗设备技术相对落后,种类相对较少,性能和质量也较低。它也基本上实现了知识产权并被广泛应用于医院的输液监控中。
国外的温度检测控制系统发展较早,技术相对成熟,以以色列、美国等为代表的国家很好的将计算机以及电子等技术应用在温度智能控制中。当然这些国家也是从机械控制逐步发展到如今的智能控制,其融合机械电子技术,将一些高级算法融入到输液系统使自动化控制越来越高的融入到医疗事业当中,使其控制变得更加简单,稳定性得到很大的提高。以色列现阶段已经研究出可以进行远程自动化控制的诊断设备。其将以构建一种传感器网络为特点,采用GSM实现温度等的远程控制,通过传感器传送过来的数据,在计算机中进行处理,通过之前建立的模型实现对温度的自动控制,实现了农业智能化。这也是当前智能化发展的方向和趋势。对此我认为此项目进行的非常有意义。
我国不仅是人口大国而且还是农业大国,对可远程显示温度检测系统的设计,对温度的精准监控意义重大,有利于人们实时掌握温度信息,对其进行调节,不仅可以改善农业和工业环境,而且会提高人们居住舒适度,对于工业和农业以及人们生活水平有着重要的意义,传统的温度监测系统具有局限性,目前在温度和光照强度以及PH等一些环境因素的检测与控制,我国都投入大量的人力物力进行研发,相信在不久的将来,我国在温度等自动化检测与控制一体方面将取得巨大成果,来满足当前日益准确控制,精确控制的要求。
研究方法:首先在网上以及书中查找大量的资料,对单片机技术,温度传感器技术有一个大体的了解。形成基于单片机智能温度控制的总体设计方案,综合分析,确定设计方案,用Visio绘制相关的硬件原理图,通过设计硬件电路和程序编写实现对家用电烤箱的智能温度控制功能用protues进行单片机的软件仿真调试,最后整理和编写设计说明。
本文基于单片机医院输液系统,本篇论文共分为四章,主要内容如下:
第一章:系统方案设计与论证。主要讲解设计系统方案时所提出的几种方案之间的论证关系,通过对比来选择具有优势的方案进行操作。
第二章:输液系统各模块的项目硬件设计。根据方案设计搭建好各个模块,并且介绍每个模块。
第三章:系统软件和框图设计。软件的设计原则和一般介绍。
第四章:系统故障排除和项目焊接。根据设计的图表执行项目焊接,并在焊接后执行硬件调试和软件调试。最后进行实物测试,测试当中记录问题并分析解决。

1系统方案设计与论证

1.1系统硬件设计方案
输液器控制系统大致可分为以下几部分:电机系统、液位检测、剩余时间计算、滴速测量、键盘显示。结构图如下。

图1.1总体结构框图
1.2点滴速度测量电路方案的选择及论证
下行速度的测量在整个设计中起着重要的作用,它不仅是系统的基础,也是系统的最终回归点,根据当前市场使用的设计方法和电子控制原理,具有以下方案:
方案一:使用反射式红外光电传感器。反射式红外传感器放在输液袋的一端。当它掉落时,接收器会利用它的反射式红外线追踪功能。但因为水滴大小以及外表形状的差异,有时会导致反射信号不稳定,上下振动会发生,从而产生强烈的干扰。
方案二:在红外线软管处测量输注速度的基本原理是防止接收管在发射和产生高电平脉冲时接收红外光束。为了提高抗干扰能力,可以使用两对红外传感器进行接收和传输。而不是像场景1中那样只使用其中一个传感器在反射模式下工作。红外传感器体积小,重量轻,易于安装在跌落箱上;同时,它不需要复杂的辅助电路,电路非常简单,性能也相对稳定。现代红外传感器生产实践中发挥了巨大作用。
因为难以通过使用反射型红外传感器和对面的红外传感器来判断水的流速,尽管水流相对于红外而言相对较弱,但它比反射性要强。与其他红外线传感器相比,它可以更敏感地感知流速。因此,这个方案很容易实现,使用第二种方法来测量液滴下落速度更简单方便。
1.3液面检测电路方案的选择及论证
项目要求输液瓶中液体的剩余量滴完的时间低于5分钟时发出警报信号。其余下时间必须与滴漏速率和滴漏量相结合进行测量。如果10滴的分辨率为1 ml,则应立即在10 ml的位置发出警报。
方案一:与液滴速度测量模块还使用红外线传输和接收。根据接收管接收到的亮度,判断液位是否达到警告水位。如果它达到了警戒水位,它就会被及时送回单片机,然后中断报警。
方案二:使用质量传感器,当液体达到实际测量中的固定位置时,传感器会测量和比较液体的总质量。当总测量质量等于设定值时会发出警报。
与双面红外传感器相比,它具有成本低、安装方便等优点。只需要修理输液瓶外壁的传感器而不是精确计算输液瓶的液位。因此选择相对应的传感器既方便又实用,并且稳定性很高。
1.4通过电机控制滴速电路的方案论证
1.4.1电机控制滴速的方案设计
方案一:通过调整滴瓶高度h。根据滴瓶高度h与滴瓶速度的关系,发动机驱动滴瓶升高或降低以改变滴瓶高度h,从而调整速度。这种方法的原理简单易行,大多数设计者都采用这种方法。因此,我们需要通过实验来粗略地测量与相应高度相对应的水滴速度,并记下它存在于单片机中,然后直接对其进行调整。在滴斗处用红外系统来测量水滴的速度。模拟示意图如图1.2。
方案二:与人工输液相同,下降速度是通过控制木材的结来控制的,这是普遍接受的,但下降速度夹的特性决定了它只适合于液体下落速度的大幅度不均匀调整,当涉及微调时很难控制,不易实现。综上所述选择方案一。

图1.2 输液模拟示意图
1.4.2控制用电动机及驱动的选择与比较
方案一:采用直流电机
当直流电动机起动时,失电后的惯性非常大。在停止之前它将旋转一定角度。转矩小,没有锁定功能。如果必须在一个特定位置停止,其算法很复杂。
方案二:采用步进电机
当步进电机发出脉冲信号时,速度与脉冲频率成正比。步进电机由单片机控制。控制信号是数字的,不需要数字/模拟转换。它具有快速启动/停止功能,可以快速启动或停止。延迟时间短,位置准确,精度高,运行性能强。综合考虑,选用步进电机。
1.5显示器的选择与论证
根据设计规格,应手动设定下降速度。显示器包括预设值和调整值。为显示此设计,有两个方案:
方案一:采用(LCD)液晶显示屏。液晶屏具有重量轻、无辐射、图像稳定、图片效果好、抗干扰能力强、功耗低等优点。
方案二:使用LED显示器来显示滴漏的数量。LED显示屏的点间距越小价格越贵,因为本项目运用的显示器面积很小,使用LED显示时价格方面会更高。
通过两个方案的对比并结合本项目设计的要求,因此选择方案一更加合适。本项目采用的是型号为1602A的LCD显示器。
1.6键盘接口电路方案选择论证
键盘是人们将数据加载到机器中以检查系统是否受到干扰的基本设备。但是,即使是单芯片微食物系统也很便宜,通常使用的是无标签键盘,可分为独立的密钥电路、矩阵键盘电路、中断键盘电路等。
1.6.1按键电路
单片机控制系统只需要几个功能键。对于某些键盘,采用独立的结构。独立系统的优势之处在于,每个系统都有一个I/ O界面线,而且每一个系统都是独立的,不会影响其他界面的状态。电路在结构上很简单,组态上也很灵活。
1.6.2矩阵式键盘电路
矩阵键盘结构的特征是,该键位于行和列的交点处,并且该键的两个端点分别连接到行和列的线上。常用的键盘大小有44、48、8*8等,因为独立系统中的端点数量很少,因此最适合使用独立键盘。
1.7单片机型号的选择与论证
1.7.1现有主流单片机的概述
现目前常见的单片机有多种形式,如51系列、ARM-CHIP系列等,AT89S51是一种具有8K系统和可编程内存的CMOS 8位微控制器,芯片中的程序内存系统是可编程的,在单个芯片上有51个智能8位CPU和系统可编程闪存。
1.7.2单片机的选用
单片机作为系统的主要控制单元,控制着所有的输入输出,监控系统是单片机最小的微机应用系统。系统的某些功能不能集成到芯片中,如晶闸管、复位电路等,将相应的辅助电路添加到芯片中。对于不带ROM的单片机如图1.3所示。

图1.3单片机最小应用系统
AT89SC51主要性能:
(1)与MCS-51 兼容
(2)4K字节可编程FLASH存储器
(3)全静态工作:0Hz-24KHz
(4)三级程序存储器保密锁定
(5)128*8位内部RAM
(6)32条可编程I/O线
(7)两个16位定时器/计数器
(8)6个中断源
(9)可编程串行通道
(10)低功耗的闲置和掉电模式
(11)片内振荡器和时钟电路
1.7.3单片机I/O口管脚分配
根据单芯片微数据存储区的外部布线,I/ O端口的管脚分布如下:
(1)P1.0与报警装置相连。当输液异常或报警键被按下时,P1.0端口将有一个高电平的报警设备运行。
(2)P1.1是附加档的入口。当检测到辅助键被按下时,P1.1将加载一个低级别的值,并且固定值将增加一个。
(3)P1.2是按键的输入。当检测到最暗点按下时,P1.2将加载一个低级别,并且固定值将增加一个。
(4)P1.3是用于添加键的按钮的入口。按下检测键时,P1.3将加载低电平,并提供高电平P1.0以触发报警设备。
(5)P1.4—P1.6为步进电动机的脉冲输入端,通过轮流作用来控制电动机的旋转和转向。
(6)P1.7是数据购买端口。当脉冲经过时,P1.7会发出高电平信号来计数脉冲并计算电流速度。
(7)P3端口是与上位机的通信端口。
(8)P0.0-p0.5是显示器的小型控制端口。
(9)P2.0—P2.3是显示数据的输出口。

2输液系统各模块的硬件设计

本章节主要介绍了电机模块、电源模块、声音报警模块以及步进电机的工作原理,详细介绍了如何串联各部分工作单位进行工作,使该项目完整运行。主要结构框图如图2.1所示。

图2.1 结构框图
病床端结构框图如图2.2所示。

图2.2病床端框图

护士站端机构框图如图2.3所示。

图2.3护士站端结构框图

2.1控制电机模块设计
作为步进电机的部分设计。步进电机由单片机控制微数据垫,电机的旋转路径根据相位序列输入脉冲进行控制。对于每个输入脉冲电机,沿所选方向向前移动一个步进,并且电机在向前每个步进中以固定角度旋转。从而带动滴瓶来调节高低,进而达到控制滴速的目的。
2.1.1步进电动机的工作原理
步进电机是将数字脉冲信号转化为机械角度运动或线性位移的执行器,是由专用脉冲电源驱动的多相同步电机,每次脉冲输入时,脉冲都会旋转一个角度或向前移动,故称为步进电机。
2.1.2步进电机控制原理
步进电机是一种将脉冲信号转换为角位移的数字控制电机,即发送脉冲信号,步进电机旋转一个角度,非常适合于MCU控制。步进电机可分为反应式步进电机(VR为短)、永磁步进电机(PM为短)和混合式步进电机(HB为短)。步进电机的驱动电路根据:
(1)控制换相顺序
上的转动过程称为脉冲分配,例如,对序列a-b-c-a的影响是三相步进,控制轴上的力应检测到对a-b-c-a相位的影响,并与该序列精确匹配。
(2)控制步进电机的转向
如果按正顺序打开给定的运行模式,步进电机将向前旋转。如果按相反顺序则断开电源。
(3)控制步进电机的速度
如果将控制脉冲发送到步进电机,它会执行一个步骤,产生一个脉冲,然后执行另一个步骤,同时产生另一个脉冲。两个脉冲之间的间隔越短,步进电机旋转的速度就越快。放大器可以通过调整单个芯片发送的脉冲频率来调节。步进电机控制原理如表2.4所示。
表2.4步进电机控制原理
方式 步序 控制位 通电绕组 控制字
三项单三拍式

1步
2 步
3 步 P1.6 P1.5 P1.4
C相 B相 A相
0 0 1
0 1 0
1 0 0

 A相
 B相
 C相	

01H
02H
03H

本设计的重点是如何控制电机的方向和转速,以便在合理范围内控制调整时的绝对最小误差。
2.2数据采集模块
接管部分采用红外传感器技术检测输液瓶中的药液滴落速度,并如图2.5所示。比较基板LM311的阈值电压可调,可提供0.8V到5V的电压,以适应不同的环境。当没有通过时接收器管显示为短截,VI输出水平产生高于比较器阈值电压V的上升边缘,比较器向单片机发出高电平脉冲,触发单片机进行计数,达到单位时间计数的目的。如图2.5所示。

图2.5数据采集装置
如图2.6所示,输液瓶中无液滴时,光子晶体接收最大光照并产生最大光曲线,当液滴由于光学特性而下降时,光束会相互发散,并且敏感管上的光程会减少光程。由于不同类型的药液(透明,半透明和不透明)液滴的光学特性不同,只要检测到光电晶体管的输出电流脉冲,就可以检测液滴是否通过。

 图2.6 采集装置结构图

2.2.1红外发光二极管和光敏三极管
光电传感器由光源和光接收器组成,砷化镓红外二极管通常用作光源,并且插入了来自发光源的针。常用的光电探测器包括光电三极管、光电三极管和光敏集成电路。发射光接收器的刀。光电耦合器采用电光原理。
2.2.2红外发光二极管主要参数
红外发光二极管主要用于光电输入机和光电设备,光电控制和与红外线光源的光电耦合,并完全用环氧树脂封装。GaAs红外发光二极管的主要性能参数,并根据其设计了电源电路。
2.2.3光敏三极管的主要参数
硅光电晶体管用于近红外光电探测器,以及光耦合,特性识别,过程控制等。对于陶瓷基环氧树脂封装,下表根据液滴速度检测电路设计的性能参数列出了硅光敏三极管的主要性能参数。如表2.7所示。

表2.7硅光敏三极管的主要性能参数
参数 符号 额定值
工作温度(℃) Topr -65 ~ +125
存储温度(℃) Tstg -65 ~ +150
集射极击穿电压(v) Vceo 45
集电极基极击穿电压(v) Vcbo 45
发射极基极击穿电压(v) Vebo 5
功率损耗(mW) Pd 300
集电极电流(mA) Ic 1.0
饱和电压(v) Vce 0.4
峰值波长(nm) λ 940
开启时间(µs) Ton 8
切断时间(µs) Toff 7

2.3电源模块
监视系统可以由电池或交流电供电。在输液器正常时,电池的功率会及时影响警报。由于单个微数据和显示器都需要5V左右的电源,所以当我们制作电路板时,我们使用备用插槽提供5V电源的方式。与监控计算机相连的电路由计算机驱动。单片机和RS-485接口需要5V电源。
2.4声报警模块
将接口连接到单芯片数据的P1.0,并根据患者输液前的情况设置输液速度。当输液速度低于10滴/分钟或高于70滴/分钟时,单个芯片发出信号使P1.0产生高电平,从而触发报警装置,门铃会发出声音。如果有人按报警按钮,I/ O端口也会产生高电平,从而 关闭输液器s组以确保病人的安全。否则,当速度设置为x液滴/分钟时,如果下降少于5/20ml,MCU还会产生一个断路器报警。
2.5复位电路
系统使用手动重置。按下两个机械周期中RST末端产生的高电位的复位键,然后复位系统,图2.8所示。

图2.8复位电路
2.6显示模块
在单片机系统中,常用的显示器有:
(1)发光二极管显示器,简称LED(Light Emitting Diode);
(2)液晶显示器,简称LCD(Liquid Crystal Display);
(3)荧光灯显示器,简称CRT,近年来也开始使用简单的CRT接口显示一些汉字和图形。
LCD可满足显示需求,因此本设计使用LCD显示器。
2.6.1LCD1602A显示器的优点
(1)显示质量高。
由于1602LCD每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,画质高且不会闪烁。
(2)数字式接口
1602液晶屏都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
(3)体积小、重量轻
1602液晶模块通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示屏要轻得多。
(4)功耗低
相对而言,1602液晶显示屏的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示屏要少得多。
液晶显示模块LCD1602A的内部结构可以分成三部分:一为LCD控制器,二为LCD驱动器,三为LCD显示装备。如下图所示。

表2.10 LCD共阴/共阳段选编码表
显示字符 共阴极字型码 共阳极字型码 显示字符 共阴极字型码 共阳极字型码
0 3FH C0 C 39H C6H
1 06H F9H D 5EH A1H
2 5BH A4H E 79H 86H
3 4FH B0H F 71H 8EH
4 66H 99H P 73H 8CH
5 6DH 92H U 3EH C1H
6 7DH 82H I 31H CEH
7 07H F8H Y 6EH 91H
8 7FH 80H H 76H 89H
9 6FH 90H L 38H C7H
A 77H 88H 空格 00H FFH
B 7CH 83H

2.6.2LCD显示器的显示方法
LCD显示屏有两种显示模式:静态显示和动态显示。在这个设计中,动态显示是被选取的,也就是说,在一个时间点,只有一部份的位元行是在strobe-模式下,而另一个位元行则是在off模式下。同时,字体行中的相应位输出要显示的字符的字体代码。同时,只有一部分4位字显示其他三个字已关闭。
2.6.3显示模块电路设计
如图, P0端口1至AT89SC51用作数据线,P1.2、P1.1和P1.0分别用作LCD的a、R / W和RS。如果芯片标记信号是由下降边缘触发的,则R / W为读写信号,RS为寄存器标记信号,如图2.11所示。

图2.11显示模块电路图
2.7键控模块
根据功能要求,输液器的中央控制模块主要用于参数切换,在使用前可设置液滴,输液过程中可随时暂停,输液套件可随时启动。为了提高安全,当电源过快或因异常情况而中断时,也有报警装置。所有这一切都需要四个按键。重置一个按键,病人的紧急呼叫占有一个按键。可以通过增加和减少来设定速度。首先,在内部设定一个初始值,然后通过增加和减少来改变它按下相应按键时,键盘电路会将相应的I/ O端口从高电平到低低电平。目前,SCM系统监视P1端口的相应级别更改并执行相应的子程序。此应用程序的子例程是从P2端口发送的。四个二进制代码将驱动NIX管道作为CC4511解码器的输入信号。

图2.12键盘电路
2.8通信模块设计
通信接口标准有两种形式:RS-232C和RS-4885。根据RS-232C标准,在没有调制解调器的情况下,符号失真小于4%,接口驱动程序负载容量小于2500pf,本地数据终端与数据通信设备之间的最大距离为50米(15.24m)实际应用中的最大距离大于此值,这是因为实际应用中允许的符号失真远远超过4%,但为了改善RS-232C的缺点,例如低传输速率、短距离以及信号在接口上的易交叉性,美国电子工业由于只有一个驾驶员可以在RS-485标准下同时处理同一对信号线,因此只有一个驾驶员可以在同一对信号线上工作。根据标准,总线系统中的所有驾驶员都由激活端进行检查,并且系统中一次只能有一个发射器允许使用。电平转换电路如图2.13所示。

图2.13电平转换电路

3系统软件及框图设计

主从站设计是指护理室(从站)与病房(主站)之间通过通信进行控制和信息反馈,因此,这是输注监控系统设计的关键,其主从站方案应包括对各部门巡逻人员是否完全接收到主从站的信息以及是否进行交流的评估。程序设计框图如图3.1所示。

图3.1 主站程序框图

应当在从站的程序设计中计算滴速,以防止患者因滴速太快或太慢而引起输血不适,并且应通过控制电动机来控制液瓶的液位。为了达到加快或减慢滴速的目的;同时,病房中的从机还应具有剩余时间检测,液位警告,时间测量和报警功能。因此,也有相应的程序框图设计,如图3.2所示。

图3.2从站程序框图
3.1滴速检测子程序
当一个液滴通过P1.7时,会产生一个脉冲。通过这种方法,可以记录两滴液体之间的时间,并且通过计算可以达到滴定速度,流程图如3.3所示:

图3.3检测程序框图
3.2电机控制子程序
电机的控制是将实际值与设定值进行比较。如果在允许的误差范围内,发动机无法工作,如果实际值小于规定值且差值大于允许误差范围,则发动机将通过。

图3.4电机控制程序框图
COMP: MOV A,32H ;实际值和检测值比较
CJNE A,35H,COMP1
MOV A,31H
CJNE A,34H,COMP1
MOV A,30H
CJNE A,33H,COMP1
AJMP STOP
COMP1: JC UP
JNC DOWN
UP: SETB P1.4 ;电机正转
CLR P1.5
CLR P1.6
SETB P1.5
CLR P1.6
CLR P1.4
SETB P1.6
CLR P1.4
CLR P1.5
AJMP COMP
DOWN: SETB P1.4 ;电机反转
CLR P1.5
CLR P1.6
SETB P1.6
CLR P1.5
CLR P1.4
SETB P1.5
CLR P1.4
CLR P1.6
AJMP COMP
STOP: CLR P1.4 电机停止
CLR P1.5
CLR P1.6
AJMP GOOUT
3.3显示子程序
LED显示器要显示的内容是检测速度和设定速度,
六位数码管(右起)位选代码分别为:FEH(11111110), FD(1111101),FBH(11111011)F7H(11110111),EFH(11101111),DFH(11011111)。

图3.5 显示程序框图
3.4键盘程序
除了重置键之外,系统还会扩展三个键。他们的功能包括“添加键”、“记忆键”和“报警键”,加减键功能程序通过加1减1实现。设置单位。当有人按下警报键时,警报声响起。如果在10秒内没有人处理过该警报,请通过将设置值修改为0来停止警报并停止滴落,以确保患者安全。

图3.6 键盘程序框图

4系统设计结果分析

4.1设计实现过程
(1)测试条件:
测试点环境温度:25°C
(2)测试仪器:
PC机 秒表
直流稳压电源
(3)测试方法及结果
表4.1 滴速设定及相关稳定时间测量结果
测试次数 当前值 设定值 稳定时显示值 稳定时实际值 稳定时间 误 差(滴/分)
1 171 20 19 20 1′50″ 1
2 20 150 150 152 1′40″ 2
3 150 70 70 71 57″ 1
4 71 80 82 83 11″ 1
5 82 20 21 21 51″ 0
6 21 25 25 26 10″ 1
7 25 50 50 51 16″ 1
根据表4.1的分析,在整个过程中,测量误差小于项目所需固定值的1%。同时,稳定时间也小于项目所需的3分钟,因此下降速度设置功能符合标准。
报警功能测试:
当药液滴低于设定界面,或药液容量/药液滴速度小于300秒时,即5分钟,告警设备工作正常,表明告警功能正常。总结起来,每个测试过程都是正常的,并且该输液系统基本完成了设计任务所需的基本功能。

4.2电路焊接
本项目采用手工焊接的方法进行焊接,在焊接前首先对各元器件进行检查,在确认其完好后才能够进行焊接,否则会导致系统无法运行。然后开始在电路板按照原理图上放置各元器件。焊接时连续时间不得超过10秒。焊接结果如下图4.2。

图4.2电路板焊接
4.3实物调节
当模拟开始时,表示病人已经开始输液,这时病床端以及护士站端开始显示瓶内剩余的液量,以及此时液体流速,并且显示瓶中剩余药量还需要多久可以滴完。确保护士站端可以保证实时监控病人的输液状况。显示情况如图4.2所示。

图4.2起始状态显示图
在输液过程中病人可以自行观察瓶中剩余的液量来进行监控,但为了防止病人有时注意力没有放在观察瓶内剩余量上或者病人入睡导致输液事故,在瓶内剩余量不足时,将会响起警报亮起红灯来提示护士站端前来给病人进行更换或者拔出输液器。显示方式如图4.3所示。

图4.3 报警显示图

4.4系统测试及结果误差分析
测试结果表明,液面报警系统、主站报警系统和主从通信均可正常工作,整个系统性能良好。该系统已基本满足该主题的要求,其中滴速的测量更加准确,并且整个区域的误差小于3(下降/分钟)。通过设置下降速度,控制精度优于整个区域的2(下降/分钟),但仍存在一定误差。经过分析,主要是由于以下原因引起的:
(1)输液瓶中的液面不断下降,导致液体的下降速度不稳定。
(2)在测量滴液的实际滴速时,人工计数或者使用秒表计数都会有影响。
(3)单片机有是会产生错误导致中断,调整并重启也会影响实验结果,后期希望通过优化程序来改善这个问题。
(4)输液管的滴斗处的点滴激起的飞溅会影响对滴速的检测。

结 论

该系统已完成了液滴桶上液滴速度的检测,并设计了可动态显示液滴速度的液晶显示装置。液滴速度可以通过改变高度来控制。可通过键盘设置和显示喝酒速度。设定范围为50-90,误差在规定范围内。当高度达到报警值时,可发出报警信号,并可手动触发报警模式。
通过模拟结果可得出能够满足的要求有以下几点:
(1)相显示液滴滴速、剩余输液时间;
(2)对输液速度可以自动控制;
(3)将病床端与护士站端相连接,使输液情况可以及时传输到护士站端,便于护士观察。
(4)当剩余的输液时间达到一定时间(5分钟)时,可以通过相应的设备触发自动警报或输液情况。
此设计还完全分析并确定了输液系统设计的关键和难点,通过理论分析、论证判定这些辩证思想达到最佳设计方案。

参考文献

[1]任骏原.单稳态触发器的触发特性分析[J].吉林大学学报(信息科学版),2013.1:25-27
[2]胡中功,黄波,江维.基于RS485总线的PC与单片机多机通信系统设计[J].自动化与仪器仪表,2012.2:26-30
[3]王颖,吕显强,张菁.MAX485在PC机与单片机间通信的应用[J].信息技术, 2011.6:33-45
[4] 张晓乐,王颖,项莉,卢吉.基于IPAD的移动护理质量管理系统的研发与应用[J].护理学杂志,2014.5:157-160
[5]朱宗敏,朱日然.6种β-内酰胺类抗生素与溶媒配伍的稳定性研究[J].药学研究,2014.7:78-82
[6]张志艳,杨小亮,马宏忠.输液速度自动控制系统的设计[J].自动化与仪表,2009.2:156-158
[7]任文兰,魏春玲.常见输液反应的预防措施[J].中国社区医师(医学专业半月刊),2009.6:15-24
[8]王华,岳丽全,岳志高.MSComm控件在VC++6.0串口通信中的应用[J].长春工程学院学报(自然科学版),2009.5:77-82
[9]刘宝莲.静脉输液相关的不良反应及原因[J].黑龙江医药,2009(02)89-96
[10]王震,张震,马立,饶进军.基于CAN总线的医用输液监控系统设计[J].机电一体化,2009.7:69-87
[11]尹明,谢云.一种新型无线输液监护系统的设计[J].计算机与数字工程, 2007.8:55-62
[12]杨丽丽,皮喜田,彭承琳,肖霄.一种面向社区医疗微型输液监测系统的设计[J].重庆大学学报(自然科学版),2007.9:58-68
[13] 张明.步进电机的基本原理[J].科技信息,2007(09):88-96
[14] 严建华,郭烈恩.一种基于微机和单片机的步进电机控制系统[J].机械工程与自动化,2007.5:65-72
[15]江勇,宋宇.基于AT89C51的医院输液监控系统[J].医疗装备,2007.1:65-72
[16] 李琴,梁光胜.基于MCGS的液体点滴监控系统模型的设计与实现[M].北京华北电力大学,2006.10:98-101
[17] 单巍.基于AT89S52的输液监控系统的设计与实现[D].安徽合肥工业大学,2009.3:104-107
[18] 李和太,赵新,李新,夏加宽.智能输液监控系统的研制[J].沈阳工业大学学报,2006.4:318-322
[19] 江勇.基与AT89C51的输液远程监控系统的研究[D].云南,昆明理工大学,2007.5:311-324
[20] 张永东,班旭东.输液速度自动测控系统的设计与实现[J]. 自动化与仪器仪表,2005.9:20-22
附录一
系统硬件电路图

附录二
系统程序

#include “lcd1602.h”
#include “eepom52.h”
#include “nrf24l01.h”

sbit buzzer = P1^7;//蜂鸣器

sbit key1 = P2^1;
sbit key2 = P2^0;
sbit key3 = P2^2;

sbit Reduc = P2^1; //减
sbit Add = P2^0; //加
sbit Mode = P2^2; //设置

static int step_index; //步进索引数,值为0-7
static bit turn; //步进电机转动方向
static bit stop_flag; //步进电机停止标志

sbit S1=P1^0;
sbit S2=P1^1;
sbit S3=P1^2;
sbit S4=P1^3;

void gorun(void)
{
if (stop_flag1)
{
S1 = 0;
S2 = 0;
S3 = 0;
S4 = 0;
return;
}
switch(step_index)
{
case 0: //0
S1 = 1;
S2 = 0;
S3 = 0;
S4 = 0;
break;
case 1: //0、1
S1 = 1;
S2 = 1;
S3 = 0;
S4 = 0;
break;
case 2: //1
S1 = 0;
S2 = 1;
S3 = 0;
S4 = 0;
break;
case 3: //1、2
S1 = 0;
S2 = 1;
S3 = 1;
S4 = 0;
break;
case 4: //2
S1 = 0;
S2 = 0;
S3 = 1;
S4 = 0;
break;
case 5: //2、3
S1 = 0;
S2 = 0;
S3 = 1;
S4 = 1;
break;
case 6: //3
S1 = 0;
S2 = 0;
S3 = 0;
S4 = 1;
break;
case 7: //3、0
S1 = 1;
S2 = 0;
S3 = 0;
S4 = 1;
break;
}
if (turn
0)
{
step_index++;
if(step_index>7)
step_index=0;
}
else
{
step_index–;
if(step_index<0)
step_index=7;
}
}

uint time10ms=0,time1s=0;
uint v=0;
uint dishu=0;
/**********************
** 速度检测处理部分
***********************/
void int0_init(void)
{
IT0=1; //下降沿触发
EX0=1; //中断标志位置1
EA=1; //打开总中断
}
void int0() interrupt 0
{
EX0=0;
TR1=1;
if(time10ms>50)
{
dishu++;
v=60000/time10ms;
if(v>2000)v=0;
time10ms=0;
}
EX0=1;
}
void Timer1_init(void)
{
TMOD&=0X0F;
TMOD|=0X10; //定时器0工作于方式1
TH1=(65536-10000)/256; //定时器T0高8位重新赋初值
TL1=(65536-10000)%256; //定时器T0低8位重新赋初值 //10MS
ET1=1; //打开定时器0
TR1=0; //启动定时器0
EA=1; //开总中断
}
void Time1(void) interrupt 3
{
TH1=(65536-10000)/256; //定时器T0高8位重新赋初值
TL1=(65536-10000)%256; //定时器T0低8位重新赋初值
time10ms++;
time1s++;
if(time10ms>800){v=time10ms=0;TR1=0;}
}
void main(void)
{
bit abfsds=0;
uchar bingchuanghao=1;
bit wtwt=0;
uint bs=0,ds=0;
uchar yw2=0;

bit wq=0,we=0,wq1=0,we1=0;
uint time=0,gs;
uint as=0,vl=500,lh=3000;
uchar TxBuf[12];//无线模块发射数组
uint L=0;
uchar ws1=1,ws2=1;
uchar disp1[16]={"v:00.00ml/min 01"};
uchar disp2[16]={"L:000.00ml 500ml"};

uchar Mode_project=1,Mode_flag=1,Mode_count=0;//设置变量

uint buzzer_flag=0,buzzer_count=0,buzzer_time=45;//蜂鸣器报警变量

//buzzer=0;

int0_init();//外部中断初始化
Timer1_init();//定时器初始化

LCD_Init();//LCD初始化
//检测无线模块是否存在
MOSI=0;
while(NRF24L01_Check())
{
	WriteChar(1,0,16,"  NO  NRF24L01  ");				 
	delayms(500);
	WriteChar(1,0,16,"                ");				 
	delayms(500); 
}
init_NRF24L01();//无线模块初始化

dishu=0;

/***开机把数据从单片机内部eepom中读出来***/
if(byte_read(0x2050)!=1)
{		
	SectorErase(0x2000);
	byte_write(0x2000,vl/255);
	byte_write(0x2001,vl%255);

	byte_write(0x2002,lh/255);
	byte_write(0x2003,lh%255);

	byte_write(0x2004,bingchuanghao);

	byte_write(0x2050,1);		
}
if(byte_read(0x2050)==1)
{
	vl=byte_read(0x2000)*255+byte_read(0x2001);
	lh=byte_read(0x2002)*255+byte_read(0x2003);
	bingchuanghao=byte_read(0x2004);
}

while(1)
{	 
	//切换总量
	if(!key1 && !wq1)
	{
		wq1=1;
		we1=~we1;
		if(!we1)//500
		{			
			ws2=1;
			dishu=0;
			disp2[11]='5';
			disp2[12]='0';	
		}
		else//250
		{
			ws2=2;
			dishu=0;
			disp2[11]='2';
			disp2[12]='5';	
		}
	}
	if(key1 && wq1)
	{
		wq1=0;
	}


	/****10秒没有液滴报警****/
	if(v>100 && !bs)
	{
		bs=1;	
	}
	if(bs && v==0)
	{
		if(++ds>300)yw2=1;
	}
	if(bs && v!=0){ds=0;yw2=0;}

	//夹死管子
	if(yw2 && !wtwt)
	{
		wtwt=1;
		
		buzzer=1;
		
		turn = 0;//反转
		stop_flag=0;
		gs=2000;
		while(gs--)
		{
			gorun();			
			delay11us(100);
		}
		stop_flag=1;
		gorun();
	}
	//松开管子
	if(!yw2 && wtwt)
	{
		wtwt=0;
		
		buzzer=1;
		
		turn = 1;//正转
		stop_flag=0;
		gs=2000;
		while(gs--)
		{
			gorun();			
			delay11us(100);
		}
		stop_flag=1;
		gorun();
	}
	//手动报警
	if(!key2 && !wq)
	{
		wq=1;
		we=~we;
	}
	
	if(key2 && wq)
	{
		wq=0;
	}
		
	

	//步进电机自动调节
	if(v>=0 && v<100)
	{
		stop_flag=1;
		gorun();
	}
	else 
	{
		if(++time>200)
		{
			time=0;
			if((v>vl-200)&&(v<vl+200))
			{
				stop_flag=1;
				gorun();	
				
				abfsds=1;//速度正常范围标志位置1
			}
			else if(v>vl+200)
			{
				turn = 0;//反转
				stop_flag=0;
				gs=100;
				while(gs--)
				{
					gorun();			
					delay11us(100);
				}
				stop_flag=1;
				gorun();
			}
			else if(v<vl-200)
			{
				turn = 1;//正转
				stop_flag=0;
				gs=100;
				while(gs--)
				{
					gorun();			
					delay11us(100);
				}
				stop_flag=1;
				gorun();	
			}
		}
	}

	disp1[14]=bingchuanghao/10%10+0x30;
	disp1[15]=bingchuanghao%10+0x30;


	disp1[2]=v/1000%10+0x30;
	disp1[3]=v/100%10+0x30;
	disp1[5]=v/10%10+0x30;
	disp1[6]=v%10+0x30;

	if(ws1==1)L=dishu*10/1.0;

// else if(ws12)L=dishu*10/1.5;
// else if(ws1
3)L=dishu*10/2.0;

	if(ws2==1)L=50000-L;
	else if(ws2==2)L=25000-L;

// else if(ws2==3)L=10000-L;

	disp2[2]=L/10000%10+0x30;
	disp2[3]=L/1000%10+0x30;
	disp2[4]=L/100%10+0x30;
	disp2[6]=L/10%10+0x30;		
	disp2[7]=L%10+0x30;

	/****无线发送****/
	TxBuf[2]=v/255;
	TxBuf[3]=v%255;
	TxBuf[4]=L/255;
	TxBuf[5]=L%255;
	TxBuf[6]=ws2;
	TxBuf[7]=1;//从机地址
	TxBuf[8]=buzzer_flag;
	TxBuf[9]=bingchuanghao;
	//无线发射		
	nRF24L01_TxPacket(TxBuf);
	delayms(10);
	/****剩余量少于设定值或10秒没有检测到液滴或手动报警或速度不在上下限范围内报警****/
	if((L<lh || we || yw2)||(abfsds && (v<vl-300)||(v>vl+300)))
	{
		buzzer_flag=1;
	}
	else
	{
		buzzer_flag=0;
		buzzer=1;
	}		
	/*******蜂鸣器报警********/
	buzzer_count++;if(buzzer_count>buzzer_time*10)buzzer_count=buzzer_time+1;
	if(buzzer_count%buzzer_time==0 && buzzer_flag)
	{
		buzzer=~buzzer;//蜂鸣器取反发出声音报警
		if(!buzzer)LCD_Init();
	}

	//按下设置键,进入设置页面
	if(Mode==0 && Mode_flag)
	{	 
		buzzer=1;
		as=0;
		WriteCOMDATA(0x0F,0);
		delayms(100);			
		if(Mode==0)
		{	
			while(Mode==0);			
			Mode_flag=0;
			Mode_project=1;
			//设置页面显示内容
			WriteChar(1,0,16,"Lh:000.0 ml    01");				 
			WriteChar(2,0,16,"  v:00.00ml/min ");


			WriteCOMDATA(0x83,0);
			WriteCOMDATA(lh/10000%10+0x30,1);
			WriteCOMDATA(lh/1000%10+0x30,1);
			WriteCOMDATA(lh/10%10+0x30,1);
			WriteCOMDATA('.',1);
			WriteCOMDATA(lh/10%10+0x30,1);				
			//WriteCOMDATA(lh%10+0x30,1);


			WriteCOMDATA(0x8E,0);
			WriteCOMDATA(bingchuanghao/10%10+0x30,1);
			WriteCOMDATA(bingchuanghao%10+0x30,1);

			WriteCOMDATA(0xC4,0);
			WriteCOMDATA(vl/1000%10+0x30,1);
			WriteCOMDATA(vl/100%10+0x30,1);
			WriteCOMDATA('.',1);
			WriteCOMDATA(vl/10%10+0x30,1);				
			WriteCOMDATA(vl%10+0x30,1);
			while(Mode==0);
			while(1)		  
			{	
				switch(Mode_project)
				{	
					case 1:
						WriteCOMDATA(0x83,0);
						WriteCOMDATA(lh/10000%10+0x30,1);
						WriteCOMDATA(lh/1000%10+0x30,1);
						WriteCOMDATA(lh/100%10+0x30,1);
						WriteCOMDATA('.',1);
						WriteCOMDATA(lh/10%10+0x30,1);				
						//WriteCOMDATA(lh%10+0x30,1);
						WriteCOMDATA(0x87,0);
					break;
					case 2:
						WriteCOMDATA(0x8E,0);
						WriteCOMDATA(bingchuanghao/10%10+0x30,1);				
						WriteCOMDATA(bingchuanghao%10+0x30,1);
						WriteCOMDATA(0x8F,0);
					break;			                                						
					case 3:
						WriteCOMDATA(0xC4,0);
						WriteCOMDATA(vl/1000%10+0x30,1);
						WriteCOMDATA(vl/100%10+0x30,1);
						WriteCOMDATA('.',1);
						WriteCOMDATA(vl/10%10+0x30,1);							
						WriteCOMDATA(vl%10+0x30,1);
						WriteCOMDATA(0xC8,0);
					break;						
				}
				delayms(400);
				//按下加键,对设定目标加
				if(Add==0)
				{
					delayms(400);
					switch(Mode_project)
					{
						case 1:lh+=50;break;
						case 2:bingchuanghao+=1;if(bingchuanghao>=99)bingchuanghao=99;break;
						case 3:vl+=1;break;							
					}		
				}
				//按下减键,对设定目标减
				if(Reduc==0)
				{
					delayms(400);
					switch(Mode_project)
					{
						case 1:lh-=50;break;
						case 2:bingchuanghao-=1;if(bingchuanghao<=1)bingchuanghao=1;break;
						case 3:vl-=1;break;															
					}		
				}
				//短按设置键,切换设定目标,长按设置键2S,则退出设置页面
				if(Mode==0)
				{
					delayms(600);
					while(Mode==0)
					{
						delayms(600);
						Mode_count++;
						if(Mode_count>6)
						{
							WriteCOMDATA(0x0C,0);
							delayms(100);
							WriteChar(1,0,16,disp1);  //第一行显示内容
							WriteChar(2,0,16,disp2); //第二行显示内容
						}
					}
					if(Mode_count>6)
					{
						Mode_count=0;

						SectorErase(0x2000);
						byte_write(0x2000,vl/255);
						byte_write(0x2001,vl%255);
						byte_write(0x2002,lh/255);
						byte_write(0x2003,lh%255);
						byte_write(0x2004,bingchuanghao);
						byte_write(0x2050,1);
						break;
					}
					else Mode_count=0; 
					Mode_project++;
					if(Mode_project>3)Mode_project=1;
				}
			}	
		}
	}					
	/********液晶显示********/		   			 
	WriteChar(1,0,16,disp1);
	WriteChar(2,0,16,disp2);
	if(Mode_flag==0){Mode_count++;if(Mode_count>20){Mode_count=0;Mode_flag=1;}}
}

}

致 谢

长达半年左右的毕业设计马上就要接近尾声了。在这半年内我们经历了论文的撰写、项目的设计和论文答辩。这就意味着我们的大学生活马上就结束了。在这四年内学校给予了我们很多,老师的教诲,同学的深厚感情。同时很感谢学校在这即将结束的时候利用论文让我们再次的从中学习到了自律、严谨、认真的学习精神。
首先要感谢谢莹老师和冯雅丽老师对我论文的帮助,如果没有您二位导师,也许我的论文不会写的这么好,写的这么顺利,每次论文您对我的要求使得我的论文才能合格。同时对工作认真严谨的态度也让我学到了许多。
另外值此论文完成之际,谨向那些曾教导我的师长、帮助我的同学,表达我诚挚的谢意!使我在以后的学习与工作里受益终生。再次向谢莹老师和冯雅丽老师表示深深地感谢!
我也要感谢亲爱的同学们,在我有了困难的时候是你们给予了我帮助,当我处在意志薄弱的时期给予我鼓励。彼此友爱,互帮互助的和谐气氛给予了我无尽的温暖,让我重燃了克服困难的信心。
在此特别感谢谢莹老师和冯雅丽老师对我的细心教导,在我遇到问题时,是您细心对我进行帮助。在平时的学习生活中,您总是不断督促我学习,在我遇到困难时耐心为我解读。您不只是在学习中对我进行教导,生活中遇到困难都是您帮助解决。最后祝愿工作一切顺利,桃李满天下。

作者:wqq_992250277

物联沃分享整理
物联沃-IOTWORD物联网 » 基于单片机的智能医院输液系统设计

发表评论