摘要:医院叫号平台系统的设计主要意在去改善老式人工医院排号、叫号管理中存在的一些混乱、无序状况,通过安卓手机APP取号、叫号的方式,去解决病员在等候就诊看病过程中所遇到的各种排队、插队和拥挤等问题,从而为病人就诊、医生叫号和医院管理带来很大的进步。系统通过对软硬件平台的结合,使得病人可以利用本系统进行手机app挂号、接收到叫号提醒、查询就诊中的信息;同时医生可以利用本系统硬件进行叫号等操作。系统在开发过程中,硬件端使用单片机进行开发,用C语言进行代码编程和烧写;软件端使用java语言在Android studio软件上进行安卓APP的开发,并利用阿里云服务器进行数据的存储;软硬件互联互通使用蓝牙模块的socket编程通信,实现叫号系统的完善。
关键词:STC15F2K60S2单片机,JQ8400语音芯片,蓝牙通信技术,Android基础开发
1引言
1.1研究背景与现状
随着近些年来互联网新兴技术的不断发展和应用,当下银行、餐饮等行业,其早已实现了用户自主叫号、有序提供自动服务的智能化系统。这种智能化系统减轻了行业用人的负担,能够去释放用人单位对于人进行业务操作的资源;同时也使得顾客在使用时候更加方便快捷,避免了因排队拥挤、就诊先后等问题而产生纠纷。但是当前许多医院在就医过程当中,仍然存在老式窗口排队挂号的现象,这种排队挂号不仅费时费力,而且导致排队无序、排队拥挤的情况频发,不利于医院医疗资源的充分利用。究其原因,一方面是因为对于医院服务内容方面的重视程度不够,没有系统分析医院就医的需求,从而开放性的提出新的挂号就诊方案;另一方面是没有能够利用互联网手段,结合当下的医院实际情况,对门诊系统进行挂号、叫号的一个新兴应用。于是我们在分析了医院的服务需求后,开发了医院叫号平台系统。医院叫号平台系统应合如今互联网发展的潮流,实现了电子设备对于医院叫号的充分利用,也使得就诊数据留痕更加方便,提升了用户体验。
1.2研究目的与意义
医院叫号系统的开发主要是意在使用智能化的互联网技术,结合单片机硬件与安卓端应用,开发出方便挂号就诊的医院叫号系统。从而去解决现存的医院排号混乱、耗时、耗力等问题,用互联网方式节约现有资源,让用户使用更加方便快捷。
系统应用后,的确能够去解决现存的不少问题:
(1)减少排队、插队和拥挤等现象
以往就诊,病员在等候就诊看病过程中经常会遇到各种排队、插队和拥挤等现象,通过本系统的进一步完善和应用,叫号只需要通过手机APP就可完成,同时语音播报前往就诊,大大提升了病员的服务体验。
(2)节省医院用人资源
以往医院的挂号系统都应用了专人专岗的形式,浪费了很多人力以及物力资源。但通过本系统的完善,能够去释放人的资源,提高护士的工作效率[1],从而做到数据多跑路,病员和医生少跑腿。
(3)信息留痕更加方便
以往医院的挂号信息留痕都需要通过医生护士的手动输入,通过医院叫号系统的完善,病员在通过手机进行挂号的同时,已经进行了数据信息的留痕,使得医院在数据管理方面出错率大大降低,而且用户也可以对自己的就诊记录实时的进行把控,体现医院以病人、以人民为中心的服务宗旨,大大改善了就医环境。
2技术应用概述
2.1单片机技术概述
单片机的第一次推出是在1971年,Intel研制出的第一个4位微处理器芯片Intel4004标志着单片机时代的开始。它在演变中经历了SCM、MCU、SoC三个阶段,性能也在不断地进行提升。
单片机的实质其实是一个微型计算机系统,他将具有数据处理能力的各种微型模块集成成为一个电路芯片,从而使得单片机成为集成有强大功能、使用方便、具有特色的计算机系统。
而今现阶段,更多新型的集成度高的单片机也在不断地推陈出新,高位单片机的出现更加满足了现如今信息技术的发展与用户诉求,它体积小、集成度高、使用方便的特性也是越来越受欢迎。本次系统也是基于单片机存储次数高、使用灵活方便的特性进行硬件选择的开发。使用到了STC15系列集成芯片进行开发,配以HC-06蓝牙芯片以及JQ8400语音芯片进行集成开发,使硬件端实现功能方便操作、直观易懂。
2.1.1STC15F2K60S2芯片概述
STC15F2K60S2芯片具有运行高速、低功耗、宽电压的特性,具备2048字节的RAM数据存储器和可擦写10万次以上的EEPROM带电可擦可编程只读存储器。EPROM用于单片机系统中,既可以扩展为片外EPROM,也可以扩展为片外RAM。它使单片机系统的设计,特别是调试实验更为方便、灵活[2]。
同时其具备有两个完全独立的高速运行串口通讯端口(UART),适合本次的开发要求(串口一连接蓝牙芯片电路,负责安卓端数据的接收显示和叫号的通知栏提醒;串口二连接蜂鸣器的语音播报电路,实现叫号信息的传输与语音播报通知)。
2.1.2 HC-06蓝牙芯片概述
截至目前蓝牙技术的开发目的是想要去提供一种是用成本价格低廉、用于短距离数据传输的无线通讯技术,随着市场对于低功耗要求的进一步提升,蓝牙模块的应用也是越来越广泛、协议版本以及内容也是在做着进一步的优化。本次系统考虑到硬件与软件之间的互通选择了比较成熟的蓝牙2.0版本进行开发。
HC-06 蓝牙芯片是基于Bluetooth Specification V2.0 蓝牙版本的并且带有EDR 蓝牙通讯网络协议的模块[3]。其在使用过程中有一个自带的LED小灯,可用来直观判断蓝牙是否已经成功被连接。同时其通过发送无线电波的方式进行串口数据的接收和发送,实现安卓软件端与单片机pcb板硬件端的数据交互。
2.1.3 JQ8400语音芯片概述
JQ8400语音芯片拥有两种控制模式,分别是两线串口模式和一线串口控制模式,并且能够支持智能组合播放,本次系统在开发中采用了两线串口组合播放模式,按文件夹命名进行不同语音段的组合,应和了医院不同科室叫号的智能播报系统。
2.2Android开发概述
Android 是基于Linux的开放性系统。其应用程序的开发为开发者提供了统一方法,意味着开发者只要在平台上进行规范的程序编程和打包APK,这样程序就可以搭载到不同的安卓移动设备上进行安装、运行和使用。除此之外,安卓还有着其他系统不可比拟的优势,如市场广大、开发成本低廉、开发环境简单等,使得安卓应用非常广泛。而Android应用程序的开发一般都是采用 Java 语言,本次系统也是基于java对安卓软件端进行布局和功能的完善。
2.3C语言概述
C语言程序是一种面向过程的语言,其因为适用范围大、可移植性较好等特点,在许多不同的操作系统中都可以得以衍生和应用。本次系统在STC15系列单片机编程过程中,就使用了C语言进行功能的编写,使得系统开发模块性高、代码简洁紧凑、使用灵活方便。
2.4开发工具链介绍
2.4.1软件部分
Android Studio是基于IntelliJ IDEA的官方Android应用集成开发环境(IDE)[4]。用于对病人安卓APP软件端的开发和调试。
Navicat是一款MySQL可视化数据库软件,并且使用结构化查询语言进行数据库管理,对于云服务器的数据表和数据存储进行操作。
阿里云服务器是一款提供基于互联网的基础设施服务的软件,主要负责数据库端云数据的存储。
2.4.2硬件部分
Altium Designer 18是一款单片机电子开发系统软件,主要负责医院叫号系统原理图的设计、电路的仿真、pcb图的转换和绘制、自动布线等功能,实现硬件端的初步设计。
keil uVsion2是一款51系列兼容单片机的C语言软件开发系统,实现硬件端代码的编译以及生成汇编。
STC-ISP串口通讯工具是一款基于STC系列单片机芯片的串口烧录工具,用于对汇编语言在单片机上的串口通讯烧写。
语音合成软件是一款智能语音合成的软件,通过对语音的合成,实现单片机蜂鸣器叫号电路内容的智能播报。
3项目概要设计
本医院挂号系统主要通过对叫号蓝牙模块的总体分析,在STC15F2K60S2单片机芯片、HC-06蓝牙通讯电路和用户手机安卓APP软硬件平台的结合下,实现软件利用蓝牙向硬件互通叫号信息,硬件利用蓝牙向软件发送叫号提醒信息,完善了基于单片机的医院叫号系统的设计与实现。
3.1需求分析
3.1.1硬件需求分析
(1)硬件端蓝牙接收用户叫号、根据叫号科室进行分流、显示在不同科室数码管。
(2)硬件端查看分科室后的当前叫号号码、按键叫号并刷新数码管、蜂鸣器发出叫号提醒、发送叫号通知到手机端功能。
3.1.2软件需求分析
(1)用户安卓APP连接硬件蓝牙模块,进行数据通信。
(2)用户使用身份证号码、就诊科室进行蓝牙排号
(3)用户查看个人叫号记录、查看科室引导、查询排号进程功能。
(4)用户安卓端蓝牙接收叫号提醒功能。
3.2项目功能概述
3.2.1蓝牙连接
通过蓝牙模块连接到安卓手机app和单片机STC15F2K60S2芯片实物。选取合适的蓝牙芯片模块HC-06芯片,使用Altium designer软件,绘制蓝牙电路原理图,通过原理图画好相应的PCB模块。得到实物后,按照PCB板的画法,将原件实物焊接到实际的PCB板子上。
通过安卓app内编写蓝牙socket接口,连接上蓝牙设备。安卓App可以查找到手机设备已经匹配过的蓝牙设备,以及未匹配过的设备,点击进行蓝牙的连接,从而实现双向电波数据的互联互通信息。
3.2.2取号
通过安卓手机app发送叫号号码,显示在不同科室数码管上。选取四位数码管,第一二位为第一科室,三四位为第二科室,进行科室分流。安卓app内编写叫号程序,输入身份号、就诊科室进行挂号。并将挂号记录连接上阿里云服务器进行数据存储。根据就诊科室不同进行分流,显示在不同数码管上。当前数码管数字有多个则存储在叫号队列中等待叫号。
3.2.3叫号
按下硬件按键叫号并刷新数码管队列中的下一个数字。选取两个按键,分别控制第一科室和第二科室的叫号,进行分流。按下按键进行相应数码管队列的刷新,队列中有下一个叫号信息则根据编码显示下一个叫号,没有则显示–。同时更新阿里云数据库中叫号状态位,显示已叫号。
3.2.4语音播报
蜂鸣器语音播报电路发出叫号提醒,“请*诊室*号就诊”。选取语音芯片和功放芯片,使用Altium designer绘制语音播报电路图,通过原理图画好相应的PCB模块并进行实物焊接。运用语音合成工具软件,合成所需要的语音。编写语音使用代码,并进行烧写。
3.2.5状态栏通知
安卓手机app接收蓝牙端发送的叫号通知。按下科室分流后的叫号按键,蓝牙输出模块TX发送消息到安卓手机端,安卓手机端可实现接收叫号通知notification,并在手机状态通知栏显示(软件在后台运行亦可收到叫号通知,并有伴有震动提醒)。
3.2.6信息查询
安卓手机app实现查看前方排号人数、查看个人叫号记录、查看科室引导功能。安卓手机使用fragment页面显示框架,并且进行布局切换显示。连接阿里云服务器,进行数据存储。根据科室号,叫号状态位,查找前方排号人数、根据身份证号查看个人叫号记录、根据科室号查看科室引导。
4项目功能实现
4.1项目实现流程
详细实现流程分为如下的步骤:
(1)在Altium designer软件画出完整的原理图的设计,并且进行四个电路的仿真,包括STC15F2K60S2芯片电路、USB电源电路、语音播报电路和HC-06蓝牙电路。
(2)根据仿真原理图,在Altium designer软件进行PCB图的转换和绘制。
(3)购买硬件芯片实物,在PCB板子上进行焊接。
(4)编写安卓数据通讯互联线程,用串口测试工具进行蓝牙连接调试,实现软硬件的数据互联。
(5)编写单片机硬件端代码,实现接收存储安卓端数据、科室分流、数码管显示、鸣器报警等功能,并通过STC串口烧录工具进行代码烧写。
(6)安卓端连接阿里云服务器存储叫号数据,并利用fragment框架搭建页面,实现查询叫号信息、状态栏通知等功能。
项目实现流程图如图4-1所示。
图4-1项目实现流程图
4.2单片机硬件电路实现
通过次系统,硬件集成采用了模块化的设计手段。模块化的好处非常多,不仅仅是便于分工,它还有助于程序的调试,有利于程序结构的划分,还能增加程序的可读性和可移植性[5]。硬件主要分为STC15F2K60S2芯片电路、USB电源电路、语音播报电路、HC-06蓝牙电路四个模块。通过pcb集成板的焊接形成了医生端的硬件叫号电路。软件主要利用安卓开发实现如下的一些功能:用户叫号,用户接受叫号notification提醒,用户安卓手机app查看前方排号人数、查看个人叫号记录、查看科室引导等。系统简化了设计,实时播报较好提醒可操作性强,能够切实有效的改善现状。
4.2.1 STC15F2K60S2芯片电路
STC15F2K60S2_SOP28_SKDIP28具有两个独立工作运行的数据收发串口[串口1(RxD/P3.0, TxD/P3.1)、串口2(RxD2/P1.0, TxD2/P1.1)][6]。在keil2软件开发过程当中,keil中没有自带的STC15系列的编程型号和头文件,需要根据STC15的串口烧录工具将STC仿真器驱动到keil中。
STC15F2K60S2_SOP28_SKDIP28芯片的P2.0-2.7接口连接了4口的数码管,P3.4-3.7接口连接数码管的显示控制接口H1-H4,数码管前两位显示为一科室号码、后两位显示为二科室号码,进行不同科室选择的号码分流显示;P3.0-P3.1连接Usb电源电路进行交流供电;P1.0-P1.1连接MP3语音播报电路,实现语音数据内容的传输;P1.6-1.7连接HC-06蓝牙模块,实现数据的双向通讯(蓝牙模块发送数据到芯片进行分流、队列存储、并显示;芯片电路发送叫号提醒到蓝牙模块,反馈已叫号,并由蓝牙模块发送叫号提醒)。P1.4-1.5连接两个叫号按钮,进行分流叫号,并控制不同的两个数码管进行数据的更新,并实时检测后续队列是否还存在数据。电路图如图4-2所示。
图4-2 STC15F2K60S2_SOP28_SKDIP28芯片电路图
科室一接收和显示数据的代码如下:
//诊室1的处理
if(dulen==cntRxd2){//如果没有储存的数据以后进入
LedBuff[0]=0xbf; //前两位显示— —
LedBuff[1]=0xbf&0x7f;
if(qing1==1){ //只有第一次进入才清除 计数器和 储存器
qing1=0; dulen=0;cntRxd2=0;
memset(bufRxd1,0,10);
memset(bufRxd2,0,10); }}
else { qing1=1;
LedBuff[0]=LedChar[bufRxd2[dulen]/10];
LedBuff[1]=LedChar[bufRxd2[dulen]%10]&0x7f; }
if(K1==0&&dulen!=cntRxd2){ //如果开关按下 并且储存器有数据的情况下才生效delay1ms (10); //去抖动
if(K1==0&&dulen!=cntRxd2){
bobao(bufRxd1[dulen],bufRxd2[dulen]); //播报诊室号和排对序号
SendData(bufRxd1[dulen]); //串口发送诊室号。
SendData(bufRxd2[dulen]); //串口发送排队序号
memset(bufRxd1,0, dulen);
//清除已经播报的 数组储存
memset(bufRxd2,0, dulen); delay1ms (10);
dulen++; //计数器加为下次触发做准备
while(K1==0&&dulen!=cntRxd2);}}
4.2.2 HC-06蓝牙模块
HC-06蓝牙芯片具有模块应用稳定性高、程序数据不易丢失等特点,并且采用2.0系列的USB接口电路,应和现在主流的使用方向。他的通信距离范围有10m,适合医院门诊大厅叫号的应用。
HC-06蓝牙芯片模块在工作时可以应用无线电波通信来代替全双工通讯所需要具备的物理连线[7],通过android主设备向从设备模块发送串口数据,发送时通过主设备RXD 端接收,并且将数据压缩成无线电波方发送,从设备的模块TXD端口能够接还原主设备发送的数据内容,数据发送原理如图4-3所示。
图4-3 HC-06蓝牙芯片模块数据发送原理图
单片机采用HC-06蓝牙模块进行软硬件的数据交互。TX、RX接口连接芯片电路进行科室号、排号号码的数据传输,同时也接收来自芯片电路的已叫号提醒;通过自身蓝牙连接接口协议,与安卓用户端进行socket的双向连接通讯,实现接收来自安卓用户传输的信息(科室号、号码),并且向安卓端发送已叫号的数据信息,在安卓端内更新数据库信息并且进行notification的状态栏通知提醒,做到叫号的实时提醒播报,方便病人前往就诊,蓝牙模块电路图如图4-4所示。
图4-4 蓝牙模块电路图
蓝牙模块串口收发数据代码如下:
//UART 中断服务程序
void Uart() interrupt 4{
if (RI){ RI = 0; //清除RI位//保存接收字节,并递增计数器
buf[cntRxd++] = SBUF; //串行口数据缓冲寄存器
if(cntRxd==2){ //串口接收两次数据以后进行处理
if(buf[0]==0x01){ //接收到两个数据后,判断第一位数据是1还是2
bufRxd1[cntRxd2]=buf[0]; //把两个数据给储存数组 数组总储存个数设定10个,可以修改个数,取决于单片机容量
bufRxd2[cntRxd2]=buf[1];
cntRxd2++; //接收累加器
memset(buf,0,2);
if(cntRxd2>UART_RX_MAX){ //如果储存器的数据个数 大于设定值 清除所有数据从0开始
memset(bufRxd1,0,10); memset(bufRxd2,0,10);
cntRxd2=0;}}
if(buf[0]==0x02){ //接收2诊室的数据处理 和诊室1一样的
bufRxd3[cntRxd3]=buf[0];
bufRxd4[cntRxd3]=buf[1];
cntRxd3++; memset(buf,0,2);
if(cntRxd3>UART_RX_MAX){
memset(bufRxd3,0,10); memset(bufRxd4,0,10);
cntRxd3=0;}} cntRxd =0;}}
if (TI){ TI = 0; //清除TI位 busy = 0; //清忙标志}}
void SendData(unsigned char dat)//发送串口数据{
while (busy); //等待前面的数据发送完成
busy = 1; SBUF = dat; //写数据到UART数据寄存器}
void Uart2() interrupt 8//UART2 中断服务程序{
if (S2CON & S2RI){S2CON &= ~S2RI; //清除S2RI位 }
if (S2CON & S2TI) {S2CON &= ~S2TI; //清除S2TI位
busy = 0; //清忙标志}}
void SendData2(unsigned char dat)//发送串口数据{
while (busy); //等待前面的数据发送完成
ACC = dat; (PSW.0)busy = 1;
S2BUF = ACC; //写数据到UART2数据寄存器}
4.2.3 USB电源电路
USB接口是新兴总线接口中的一种,它可以通过PCI总线和PC机的内部内置数据线进行数据的发送以及传输。同时USB接口也向硬件系统提供了稳定电压传输的外设的电源,适合本次硬件系统设计芯片电路的集成开发。而且近年来USB接口的应用和发展也十分迅猛,由于有着容易扩展的优点,在许多其他电子领域也被广泛使用。
USB电源电路是为整体硬件系统提供电源支持。D+\D-为蜂鸣器语音播报电路提供3.3V的稳定电压支持。TXD\RXD为STC15F2K60S2_SOP28_SKDIP28芯片电路提供编程接口,并传输5V交流电压,为系统运行提供平稳电流支持,如图4-5所示。
图4-5 USB电源电路仿真图
4.2.4蜂鸣器叫号模块
JQ8400-FL的语音芯片能够灵活更新语音内容,只要对于SPI-flash中的设置内容进行更新即可,省去了老式芯片安装上位机进行实时语音写入的步骤,使得系统开发和编程变得简单易懂。芯片支持两线串口通讯路径,对应操作指令可以有由自带上位机录入形成,代码编程烧写简单。语音芯片原理如图4-6所示。
图4-6 JQ8400-FL语音芯片设置图
蜂鸣器语音播报电路在叫号时播报出语音提醒,提醒病人前来科室进行就诊。P24/P25接口为串口收发脚,与STC芯片电路进行数据输入输出交互,接收到来自芯片电路的叫号信息,并通过语音拆解,进行音频MP3文件的整合播放;VMCU端口连接功放IC电路,将JQ8400输入的微弱电信号放大,从而产生电流推动蜂鸣器的扬声器进行语音的播报;D+/D-连接了3.3V的稳定USB电源;1-6引脚连接了SPI flash,利用flash设备通过SPI串行接口进行读写操作,电路原理图如4-7所示。
图4-7 JQ8400-FL语音芯片仿真图
语音播报代码如下:
void mp3_uart (unsigned char *buf,unsigned char len)
{ unsigned char i=0;
for(i=0;i<len;i++){SendData2(buf[i]); //串口2的发送 换串口 只需要改这 }}
void mp3(unsigned char dat)
{ unsigned char buf[6];//发送操作指令 根据手册
buf[0]=0xaa; buf[1]=0x07; buf[2]=0x02;
buf[3]=0x00;buf[4]=dat+1;
buf[5]=0xaa+0x07+0x02+0x00+dat+1;
mp3_uart(buf,sizeof(buf)); delay_ms(800);}
void mp3_vol(unsigned char dat)
{ unsigned char buf[5];//发送操作指令 根据手册
buf[0]=0xaa; buf[1]=0x13;buf[2]=0x01;buf[3]=dat;
buf[4]=0xaa+0x13+0x01+dat;
mp3_uart(buf,sizeof(buf));}
void bobao(unsigned char add,unsigned int dat){
unsigned char qian,bai,shi,ge; //把数值进行拆解
qian=dat/1000;bai=dat%1000/100;
shi=dat%100/10; ge=dat%10;
mp3(0x0e); //请mp3(add);//几mp3(0x10); //诊室delay_ms(200);
if(qian>0){ //如果最高位不是0 就进行播报
mp3(qian); //最高位的 数值
mp3(0x0c); // 千 }
if(qian>0&&bai==0){//如果千位大于0了 并且下一位(百)上是0 进行播报0
if(shi!=0){ //如果十位 是0 也不播报 mp3(0x0);}
}else if(bai>0){ //否则百位 不进行播报
mp3(bai); //播报百位数值mp3(0x0b); //百}
if(bai>0&&shi==0){
//如果百位大于0了,并且下一位(十)上是0,进行播报0
if(ge!=0){ //如果个位是0 也不播报 mp3(0x0); }
}else if(shi>0){ //否则百位不进行播报
if(shi>1){mp3(shi); //播报十位数值}
mp3(0x0a); //十}
if(ge!=0){ //判断个位 是不是0,如果是0则不进行播报
mp3(ge); //播报个位数值}
if(dat==0){mp3(0x0);}mp3(0x0d); //号}
4.2.5 PCB电路板的实现
PCB电路板的设计是硬件模块制作实现的最关键一步,需要通过前期的仿真图,依据所使用的元器件性能,进行集成制作的搭建。将原理图绘制转换成PCB电路图后,需要厂商对PCB板子进行制作,同时开发者选购合适的硬件,进行焊接。设计流程如图4-8所示。
图4-8 PCB电路板开发流程图
本系统在PCB开发过程中,需要考虑四个模块的分工以及合理连接,左上部分为STC15芯片电路,左下部分为蜂鸣器报警电路,右上部分为蓝牙芯片电路,形成了硬件模块在PCB上的集成开发和使用。具体设计图如图4-9所示。
图4-9 PCB电路板设计图
4.3安卓客户端软件实现
此医院挂号系统安卓软件端主要使用Android Studio进行开发,使用户可以随装随用。软件部分主要包括如下的一些模块:1、病人可以通过APP进行蓝牙的连接,包括手机设备已连接蓝牙的查询、手机设备未连接的周围蓝牙的搜索、手机安卓软件内与硬件端蓝牙的连接;2、病人通过手机APP使用自身身份证号码以及选择科室号进行挂号、利用MAC地址及socket通讯方式将信息以无线电波的方式传输到蓝牙端。3、病人通过APP查询功能实时进行就诊信息查询,如查询前方叫号排队等候人数、查询科室引导地址、查询身份证号码排号记录等。
4.3.1连接蓝牙模块
采用Menu菜单右上角内嵌的方式进行蓝牙连接页面的进入,使得使用直观且页面布局具有合理性。通过设置多个item下拉菜单选择,并且在Main主函数中设置getItemId()方法获取点击的id数据,利用返回onOptionsItemSelected()数据进行不同页面的activity跳转操作。
App中的蓝牙连接页面可以查询当前安卓手机设备已连接的蓝牙。根据安卓手机系统不同版本之间不同的适配情况,进行蓝牙适配器BluetoothAdapter的创建,注册查找接收蓝牙设备的action接收器,得到已配对蓝牙设备列表并在list表单中进行显示。同时App可以查询当前未进行匹配的周围蓝牙设备,设定扫描按键的响应程序,找到后在未匹配蓝牙的listview中进行显示,同时关闭正在进行的服务查找。安卓端主设备连接蓝牙从设备的流程如图4-10所示。
图4-10蓝牙设备连接的流程图
通过对listview显示列表的点击操作,可以获取蓝牙设备模块的Mac地址,进行socekt通讯连接设备,获取到蓝牙的数据输入流,并且建立双向的数据传输。
socekt通讯连接设备的代码如下:
if(requestCode==1 && resultCode==2) {
super.onActivityResult(requestCode, resultCode, data);
address = data.getStringExtra(“username”); //传入mac地址
_device = _bluetooth.getRemoteDevice(address);
Try{_socket = _device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
} catch (IOException e) {
Toast.makeText(this, “连接失败!”, Toast.LENGTH_SHORT).show();}
try {
_socket.connect();
Toast.makeText(this, “连接” + _device.getName() + “成功!”, Toast.LENGTH_SHORT).show();}
catch (IOException e) {
try { _socket.close();_socket = null;
} catch (IOException ee) {
Toast.makeText(this, “连接失败!”, Toast.LENGTH_SHORT).show();}
return;}
try { is = _socket.getInputStream(); //得到蓝牙数据输入流
} catch (IOException e) {
Toast.makeText(MainActivity.this, “接收数据失败!”, Toast.LENGTH_SHORT).show(); return;}
if (bThread == false) {
new MyThread().start();
bThread = true;
} else {bRun = true;}}}
在安卓APP内,病人可以通过item下拉选择框,进入到蓝牙连接页面和查看数据页面,规范美化了页面布局,使用更加简化大方。如图4-11所示。
图4-11 item下拉选择页面跳转图
4.3.2用户挂号模块
病人点击挂号button按钮进行取号,将String类型的科室号、取号号码中包含的字符转换成byte类型并且存入一个byte[]数组,写入一个txt文本文件当中,向蓝牙存储器进行写入。同时开启一个新线程,获取当地时间和其他相关数据,写入云服务器主机中进行数据的存储。挂号页面如图4-12所示。
图4-12挂号页面图
4.3.3挂号进度查询模块
病人输入身份证号码、取号号码可以进行前方等待人数的查询。在云数据库中匹配相应取号挂号的信息,同时查询该条信息是否已经被叫号,若未查找到则提示无该排号记录,如有该数据则根据叫号状态位判断前方科室排号等待人数,在页面上进行提醒,方便病人对于排号进度的实时掌握。
4.3.4就诊科室引导模块
利用spinner下拉框进行科室号数据选择的获取,进行云端数据库的数据删选, 并显示科室的地理位置信息,方便病人前往指定地点进行就诊。
4.3.5挂号记录查询模块
病人输入身份证号码进行个人挂号记录的查询,通过阿里云数据库中的查找,并将所有信息显示在list表单中,方便用户对于个人挂号记录的一个实时把控。
4.3.6 Fragment页面框架设计
fragment是一种控制器对象,activity可委派它执行任务。这些任务通常就是管理用户界面。根据应用和用户的需求,可联合使用fragment及activity来组装或重组用户界面[8]。这种页面控制框架的使用可以将多个activity页面封装到同一个控制器对象当中,实现简单的页面切换操作。Fragment控制器如图4-13所示。
图4-13 fragment控制器图
而本次系统安卓在设计查询功能时利用到了Fragment页面框架,Fragment框架将页面系统的集成起来,将不同页面放入一个Fragment的适配器当中进行轮播,同时配以点击亮色的页面小图标,提升用户使用感和App运行速度。
同时在fragment控制器使用前,我们需要编辑一个适配器Adapter来装载对象的使用(如对象的个数,对象的点击选中事件等)。拥有超过一个方法的接收器接口都可拥有适配器,每个适配器为每个接口方法提供默认的方法[9]。在使用适配器时我们只需要继承适配器的接口,即可应用android默认提供的方法。
4.3.7状态栏通知
病人在使用此系统时可以实时接收到来自医院叫号系统的叫号通知提醒,伴随有震动和声音提醒,并且在状态通知栏进行显示。使用标准视图Notification通知,创建NotificationManager对象来对通知进行管理。通过调用getSystemService()方法可以获取到实例对象,并且确定获取系统的服务类型,传入到Context.NOTIFICATION_SERVICE进行响应。通知在状态栏的显示如下图4-14所示。
图4-14 通知状态栏显示图
Notification通知的Builder构造器中有如下的一些方法:
setAutoCancel(boolean boolean)是指点击状态通知栏后自动清除。
setContentTitle(String string)是指通知的标题内容text。
setContentText(String string)是指通知的正文信息内容。
setSound(Uri sound)是指设置通知的音频,可使用系统默认自带音效。
4.4数据库设计
数据库是一类关系型数据的集合,利用SQL表达式对存储的数据进行操作。SQL表达式基本结构包括三个子句: select 子句,from子句和where子句[10]。本系统的安卓挂号信息插入、排队进度查询等功能就是利用SQL语句连接数据库服务器进行查询的。
4.4.1数据库概要设计
数据库使用阿里云端的主机服务器设备进行存储,实现数据的长期性保存与留痕。同时服务器已经提前有针对性地预置了多种参数和设置,且对 MySQL 数据库实现精准的操作和微改功能。
4.4.2数据库字段设计
(1)guide(病人科室查询信息表),如表4-1所示。
表4-1 病人科室查询信息表
字段名 | 类型 | 说明 | 主键 |
room | varchar | 科室号 | Yes |
guide_room | varchar | 科室引导地址 | No |
(2)register(病人挂号信息表)如表4-2所示。
表4-2 病人挂号信息表
字段名 | 类型 | 说明 | 主键 |
id | int | 编号 | Yes |
time | varchar | 挂号时间 | No |
person | varchar | 身份证号 | No |
room | varchar | 科室号 | No |
random | varchar | 挂号号码 | No |
status | varchar | 叫号情况 | No |
5难题和解决方法
5.1PCB图转换
电路仿真原理图转pcb开发板图的过程中,经常会出现器件封装没有找到,无法成功转换成开发板视图的现象,可以通过以下的三种方式进行解决:
1、去altium designer官网进行库文件封装的下载,然后根据项目硬件需要添加pcb的库文件到library中。
2、改变默认使用的封装类型,选择软件内现有存在的其他封装。
3、创建一个pcb library文件,在其中进行自主绘制适合硬件焊接的库文件。
5.2Notification通知适配
Notification通知在安卓8.0以上有了全新的版本编写要求,与原来存在版本不适配不兼容的问题。即从Android 8.0(API级别26)版本开始,在使用通知使必须通知分配给一个channel通道,否则将无法解析代码并进行通知,可用如下操作解决:
1、使用代码判断安卓版本号(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)是否在8.0以上。
2、 new 一个NotificationChannel()通道进行通知的存放。
5.3蜂鸣器语音组合播报
在利用JQ8400语音芯片进行语音分解播报编写过程中,如何将MP3音乐按照需求进行排列播报。
1、上网下载语音合成软件,合成需要的语音MP3。
2、按照MP3储存的顺序排列在文件夹下 ,按文件名来组合播放,0X01就是播放第一首。
3、拆解STC芯片传来的叫号数值,按个十百位读数方式组合音频文件进行播报。
6系统测试
6.1安卓用户叫号软件
6.1.1安卓APP连接蓝牙设备
通过安卓APP,可以实现对安卓手机设备现存已配对蓝牙设备的查找,以及对手机设备未配对的蓝牙进行查找,分别显示在不同的list表单中。病人点击表单,即可连接上单片机的硬件模块,开始进行叫号。如图6-1所示。
图6-1 安卓蓝牙搜索连接功能图
6.1.2安卓APP取号
通过连接蓝牙之后,病人可以使用APP通过输入身份证号和科室号进行挂号。如图6-2所示。
图6-2 安卓端用户叫号功能图
6.1.3安卓App查询当前排队等待人数
病人通过输入自己的身份证号码、挂号号码,可以查询到当前科室需要排队等候多少人。当输入信息错误时,会提示未查找到该排号记录。如图6-3所示。
图6-3 查询排队等待人数图
6.1.4安卓App查询科室地址
病人通过下拉spinner选择框,可以查询科室的就诊地址。如图6-4所示。
图6-4 查询科室地址图
6.1.5安卓App查询个人叫号记录
病人通过输入自己的身份证号码,可以查询到自己的挂号排号记录。当输入身份证信息错误时,会提示未查找到该身份证的排号记录。如图6-5所示。
图6-5 查询个人叫号记录图
6.2单片机硬件开发板
6.2.1单片机PCB开发板通电图
硬件开发板通电后,数码管将显示为“- -”,表示已通电但未接收到数据。蓝牙模块通信led小灯将未亮,证明未连接到主设备。如图6-6所示。
图6-6单片机PCB板通电图
6.2.2单片机叫号使用图
安卓软件端通过socekt通信将挂号信息发送到硬件单片机端,进行科室分流后并显示挂号信息。如图6-7所示。
图6-7单片机叫号使用图
结 论
本系统主要是设计了基于单片机的医院叫号系统,病人端使用安卓手机APP进行取号、查询,医生端使用单片机设备进行叫号,并通过蓝牙模块实现双方之间的数据通信。
叫号系统利用了硬件和软件相互结合互通的方式,实现了智能电磁波的通讯,从而能够简化医院门诊过程中的叫号流程,使得病人使用手机设备即可进行挂号和就诊数据等查询,极大的方便了医院就医双方的使用。
在设计过程中使用了STC15系列芯片,嵌入pcb开发板中进行嵌入式的开发,接口电路分别连接蓝牙数据通讯传输和蜂鸣器语音播放数据传输,实现了取号、叫号的一体化。在长久发展以及日后普及方面来看,基于本系统的功能实现,类似的叫号等服务应用也可以得到衍生、比如说银行智能手机取号、快递智能远程下单等,促进资源整合利用的新型数据化产业发展。当然本次叫号系统还可以进行进一步的整合优化,实现更多利于病人使用的功能,如线上APP缴费、查询就医详细内容等等,优化形成医生与病人都可使用的详实APP。
通过本次的医院叫号系统设计,我整合了大学四年来所学的知识,如安卓高级深入开发技能、STC系列单片机的应用与编写、蓝牙socket通讯模块协议的书写、蜂鸣器语音MP3电路的扩展与使用等等,进一步深入熟悉掌握了物联网嵌入式开发的流程和操作,为日后深入社会进行工作和进一步学习奠定了良好的基础。同时在设计过程中也发现了自身所存在的一些不足,如在设计系统规划过程中缺乏全面的考量,导致在前期项目分工拆解需求方面走了弯路;再如有些专业知识只是学习了系统,还不够深入与扎实,在项目编写过程中经常需要查阅各种资料。但是好在只要有进步的心态与勇气,不断深入的进行探索和学习,问题与困难都会解决,最终完美的写出了医院叫号系统。
在项目完成后的学习与工作生活中,我也将继续用编写毕设项目时的那股干劲与钻研精神,面对工作中的问题不断钻研、攻坚克难,面对前进路上的困境用于担当、坚守职责,面对群众的问题耐心服务、全心全意。同时做到向书本求知、向同事领导求教,从而做到不断提升自我,成为新时代的青年带头接班人,为社会主义建设做出创新性、引领性的贡献。
参 考 文 献
[1] 吕侃,钟臻.关于医院门诊预约挂号系统设计与实现[J].上海:科技风,2017(24):1.
[2]张毅刚.单片机原理及其接口技术[M].北京:人民邮电出版社,2011.8:178-179
[3] MiKe Lu. 蓝牙技术在物联网中的应用(英文)[C].北京:中国电子器材总公司,中国RFID产业联盟.2012传感世界暨物联网应用峰会,中国健康物联网(上海)高峰论坛论文集,中国电子器材总公司,中国RFID产业联盟:中国电子学会通信学分会,2012:65-69.
[4] 安辉.Android App开发从入门到精通[M].北京:清华大学出版社,2018.12.01:16-17.
[5]刘平,刘钊.STC15单片机实战指南(C语言版)——从51单片机DIY、四轴飞行器到优秀产品设计[M].北京:清华大学出版社,2016.09.01:20-21
[6] Jiahua H,Wenguang F,Shicheng G,et al.Implementation of STC15F2K60S2 MCU and CAN bus interface[J]. Bei Jing:Microcomputer & Its Applications,2014(17):59-62
[7] Joonseok Jung, Jongman Kwon, Joseph Mfitumukiza, Soonho Jung, Minwoo Lee, Jaesang Cha.HC-06 Bluetooth based driver module for emergency LED Multi-Directional Indicator[J].Korea:KCI registration candidate,2017.03:114-119
[8] Bill Phillips,Brian Hardy. Android编程权威指南[M].北京:人民邮电出版社,2014-4:104-105
[9] 埃克尔.Java编程思想[M].北京:机械工业出版社,2007.6.1:170-178
[10] 王珊,萨师煊. 数据库系统概论(第5版)[M].北京:高等教育出版社,2014.9.16 :231-240
致谢
随着本次毕业设计说明书的最后致敬落笔,一场学习与进步的盛宴也是落下了帷幕。从初步入校园对陌生环境的好奇与对美好生活的憧憬,到校园生活与同学共识共处、与老师共谈共讨,再到不断学习成长与取得骄傲的荣誉,最后到现在的来去告别,这几年伴随了我青春的成长也让我收获颇丰。
在此,我也需要感谢一路上陪伴我的老师同学们。
首先我想要感谢一下我的毕设指导老师。从毕业设计项目选题的规划、到毕业设计需求的步步拆解与分析、再到最后毕设框架的落实与形成,老师总是给予我许多指导与关怀,常常在深夜也在与我互通交流,给予我技能上、心理上的支撑与鼓励。也是在老师的带领下,我能够劈波斩疾,去克服设计项目硬件以及软件方面的各种困难。
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:1158,如若转载,请注明出处:https://www.447766.cn/chachong/161382.html,