基于GEC6818 Qt智能病房监控系统

2023-10-11 08:50

本文主要是介绍基于GEC6818 Qt智能病房监控系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、项目设备及平台
  • 二、项目功能说明
    • 1. 整体功能
    • 2. GEC6818开发板功能介绍
    • 3. GY39模块功能介绍
    • 4. MQ-2型烟雾传感器功能介绍
    • 5. RFID模块
  • 三、硬件系统设计实现与图表
  • 四、软件系统设计实现与流程图
    • 1. 软件系统设计总体描述
    • 2. 软件实现流程图
    • 3. 操作过程
  • 五、调试过程中出现的问题及相应解决办法
  • 六、视频演示
  • 七、程序设计
    • 1. 数据库连接
    • 2. Socket通信
    • 3. 串口初始化
    • 4. Label动、静态图
    • 5. 定时器
    • 6. 蜂鸣器驱动


一、项目设备及平台

设备:
GEC6818开发板、串口线、网线、GY39传感器、高频读卡器与标签、MQ-2烟雾浓度传感器。

平台:
QT、Putty

二、项目功能说明

1. 整体功能

该智能病房监测系统是通过QT编程实现模拟服务器功能,与GEC6818开发板实现数据通信。首先,开发板和PC通过套接字通信建立连接,开发板作为客户端可以通过查询PC端的ip地址及串口号从而与PC端建立连接。则开发板作为客户端,PC机作为服务器端。开发板可以向服务器端发送数据,则PC端即服务器端进行相应的数据处理。

病人登录时,通过数据库select语句进行查询,若存在,则登录成功,否则登录失败。首先,用户可以在开发板上进行登录身份的选择,如果是以病人身份进入系统,则首先对病人身份进行注册而后登录,该步骤主要通过RFID射频识别技术实现,成功读取病人的身份信息后再通过数据库编程实现对病人信息的存储,方便下次用户登录。病人成功登录后将会进入环境监测界面,该界面上会显示温度、湿度、海拔和光照等环境信息,该过程主要是通过GY39传感器模块实现,利用串口通信采集传感器数据加载到QT控件上,然后再将控件直接显示到屏幕上。其中,可以利用定时器每0.5s更新一次数据并发送至服务器,蜂鸣器会在温度超过30度时发出警报提醒。此外,当病人按下紧急呼救按钮时,客户端将该病人的病房号发送至服务器,服务器收到后在开发板上显示呼叫成功,而后触发蜂鸣器警报,实现处理病人的紧急呼叫功能。

医生进入系统时,首先进行身份的登录,登录成功后可以看到医生的姓名及年龄等信息。系统中病人对应的医生信息已在QT编程中实现设置,则病人注册登录成功后将自动进行医生的绑定,本项目中设置了两位病人信息与一位医生进行绑定,病人信息可以在进入医生身份登录界面后通过查询病历本查看。

2. GEC6818开发板功能介绍

GEC6818 开发平台,核心板采用 10 层板工艺设计,确保稳定可靠,可以批量用于平板电脑,车机,学 习机,POS 机,游戏机,行业监控等多种领域。该平台搭载三星 Cortex-A53 系列高性能八核处理器 S5P6818, 最高主频高达 1.4GHz,可应用于嵌入式 Linux 和 Android 等操作系统的驱动、应用开发。开发板留有丰富的外设,支持千兆以太网、板载 LVDS 接口、MIPI 接口、USB 接口等。在本次项目中主要实现数据通信及界面显示等功能。

3. GY39模块功能介绍

GY-39 是一款低成本,气压,温湿度,光强度 传感器模块。工作电压 3-5v,功耗小,安装方便。 其工作原理是,MCU 收集各种传感器数据,统一处理,直接输出计算后的结果,此模块,有两种方式读取数据,即串口 UART(TTL 电平)或者 IIC(2 线)。串口的波特率有 9600bps 与 115200bps,可配置,有连续,询问输出两种方式,可掉电保存设置。可适应不同的工作环境,与单片机及电脑连接。模块另外可以设置单独传感器芯片工作模式,作为简单传感器模块,MCU 不参与数据处理工作。

4. MQ-2型烟雾传感器功能介绍

MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。当处于200~300摄氏度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至而变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾的浓度越大,导电率越大,输出电阻越低,则输出的模拟信号就越大,与MQ-7类似。本项目中主要利用该模块对空气中的烟雾浓度进行监测,通过监测数据及时进行烟雾报警等处理。

5. RFID模块

高频RFID一般频率在13.56MHz左右,识别距离可扩展至1.5米,具有防碰撞特性,可以同时读取多个电子标签。标签可以存储少量数据,多用于需要存储数据、距离的识别应用,如:图书馆管理系统、场地通道安全管理系统等。

三、硬件系统设计实现与图表

硬件系统由GEC6818开发板、GY39模块、烟雾传感器模块、高频RFID模块、高频电子标签、杜邦线等组成。

  • GEC6818开发板配置:
    在这里插入图片描述

  • GY39光强度传感器原理图
    在这里插入图片描述

  • MQ2烟雾浓度传感器原理图
    在这里插入图片描述

四、软件系统设计实现与流程图

1. 软件系统设计总体描述

首先通过查询服务器端的ip地址及双方约定的端口号进行服务器和客户端的绑定,保证通信的顺利进行。其次,在病人登录时,首先进行病人身份的注册,此时需要利用RFID射频识别技术对病人身份进行识别,若已经注册过则可以直接登录,否则先进行注册而后才能登录。登录时,首先通过select语句对后台数据库进行查询,如果病人信息存在则登录成功,否则登录失败。若登录失败则应退出登录进行病人的数据绑定之后再进行登录。病人登录成功后就可以进入环境监测界面,在该界面中可以看到温度、湿度、光照等环境变量的显示,并且该界面中的数据因为软件编程中定时器的应用还可以进行每0.5s进行一次更新的操作,实现真正的动态监测。环境监测变量中还安排了报警机制,当温度超过30摄氏度时,系统会自动触发蜂鸣器警报,从而提醒医护人员进行处理。除此之外,病人还可以通过按键进行紧急呼救,当病人按下按钮时,系统也会触发蜂鸣器警报,系统将进行应急处理。

在医生进行登录操作时,系统将会根据数据库内病人所绑定的主治医生对医生进行数据更新,即医生每登陆账号后台会实时更新医生的数据消息,医生也可在此查看个人数据和负责病人的病历单。

综上所述,软件系统中用到的编程技术总结如下:套接字通信、数据库编程、RFID射频识别技术、串口通信、QT设计等等。

2. 软件实现流程图

  • 病人登录注册操作流程图
    在这里插入图片描述
    简要说明: 在病人登录时,首先进行病人身份的注册,此时需要利用RFID射频识别技术对病人身份进行识别,若已经注册过则可以直接登录,否则先进行注册而后才能登录。登录时,首先通过select语句对后台数据库进行查询,如果病人信息存在则登录成功,否则登录失败。若登录失败则应退出登录进行病人的数据绑定之后再进行登录。

  • 医生登录流程图
    在这里插入图片描述
    简要说明: 在医生进行登录操作时,系统将会根据数据库内病人所绑定的主治医生对医生进行数据更新,即医生每登陆账号后台会实时更新医生的数据消息,医生也可在此查看个人数据和负责病人的病历单。

3. 操作过程

先建立一个空文件夹,用于后续的共享操作,在此文件夹中创建QT工程并在此编写代码,将编写后的代码使用ARM交叉编译,因为GEC6818开发板是基于ARM架构的,将编译生成的可执行文件通过网线传输到开发板上(NFS协议,通过mount命令进行挂载),即该文件夹为虚拟机与开发板的共享文件夹,然后将可执行文件在中间件Putty上进行运行。

其次再讲讲数据的采集,本项目用到的GY39光强度传感器、MQ2烟雾浓度传感器与射频识别器都是通过串口通信实现的,这里我以GY39为例介绍其是怎么采集数据的,首先打开该模块所使用到的串口文件并初始化串口,例如波特率为9600,8数据位,1停止位,0校验位等等,定义一个文件描述符用于接收,然后向该文件描述符内写入数据采集指令,例如write(fd,cmd,3);写入后再向该文件描述符内读取反馈数据,例如read(fd,&buf,1);其中cmd为传感器采集指令,buf为缓存数组,用于存储接收到的数值,最后对接收到的数据进行解析,具体解析需配合用户手册使用。

五、调试过程中出现的问题及相应解决办法

  1. 串口通信未能显示正确的数据信息或者显示乱码
    解决办法:修改串口通信波特率,使得收发双方波特率一致。

  2. 在进行病人信息登录时,卡片信息读取失败
    解决办法:查看硬件接线是否正确,在检查硬件接线正确后再进行卡片的识别和信息的读取。

  3. 服务器和客户端未能进行顺利通信
    解决办法:查看服务器端ip地址和端口号是否吻合,要利用正确的服务器ip地址和端口号才能和客户端进行绑定。

  4. GY39传感器模块没有输出
    解决办法:在多次查看代码后,认为是原程序中所给的延时不足,造成模块来不及响应,加上printf语句后相当于额外加了延时,抱着这个思路提高了延时时间,而后得到了正确的输出数据。

六、视频演示

GEC6818智能病房监控系统

七、程序设计

1. 数据库连接

连接成功后,先清除之前所创建的表

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>QSqlDatabase userDb;
userDb = QSqlDatabase::addDatabase("QSQLITE");
userDb.setDatabaseName("../Intel_Sickroom/user.db");
bool ok = userDb.open();
if(!ok)
{qDebug() << "Open userDb error:" << userDb.lastError().text();
}
QSqlQuery query(userDb);
QString deleteTable = QString{"drop table user;"};
if(!query.exec(deleteTable))
{qDebug() << "delete user table error:" << query.lastError().text();
}
else
{qDebug() << "delete user table success!" ;
}

2. Socket通信

#include<QTcpSocket>QTcpSocket *tcpsocket;
tcpsocket=new QTcpSocket(this);
QString IP="192.168.201.181";
quint16 Port=8080;
tcpsocket->connectToHost(IP,Port);
QString str="123";
tcpsocket->write(str.toUtf8().data());
connect(tcpsocket,&QTcpSocket::connected,[=](){qDebug()<<"TCP connect succes!";
});

3. 串口初始化

#include <unistd.h>
#include <termios.h>
#include <fcntl.h>
#include <errno.h>
int  Widget::uart_init(const char * uart_name,int baudrate)
{int   uart1_fd= open(uart_name, O_RDWR);if (uart1_fd == -1){perror("open error:");return -1;}struct termios myserial;memset(&myserial, 0, sizeof (myserial));myserial.c_cflag |= (CLOCAL | CREAD);myserial.c_cflag &= ~CSIZE;   myserial.c_cflag &= ~CRTSCTS; myserial.c_cflag |= CS8;     myserial.c_cflag &= ~CSTOPB;myserial.c_cflag &= ~PARENB;  if(baudrate == 9600){cfsetospeed(&myserial, B9600); cfsetispeed(&myserial, B9600);}else if(baudrate == 115200){cfsetospeed(&myserial, B115200); `在这里插入代码片`cfsetispeed(&myserial, B115200);}tcflush(uart1_fd, TCIFLUSH);tcsetattr(uart1_fd, TCSANOW, &myserial);return uart1_fd;
}

4. Label动、静态图

#include <QPixmap>
#include <QIcon>
#include <QMovie>
#include <QLabel>QPixmap pix1(":/images/card.jpg");
ui->label5->setPixmap(pix1);
ui->label5->setScaledContents(true);QMovie *mov = new QMovie{":/images/scan.gif"};
ui->label4->setMovie(mov);
ui->label4->setScaledContents(true); 
mov->start();

5. 定时器

#include <QTimer>QTimer *timer=new QTimer(this);
timer->start(500);   
connect(timer,&QTimer::timeout,[=](){......
});
timer->stop();

6. 蜂鸣器驱动

#include <sys/types.h>
#include <sys/stat.h>
#define BEEP_ON 1
#define BEEP_OFF 0fd_beep = open("/dev/pwm",O_WRONLY);
if(-1 == fd_beep)
{perror("open fd_beep error");
}
beep_cmd = BEEP_ON;
write(fd_beep,&beep_cmd,1);
beep_cmd = BEEP_OFF;
write(fd_beep,&beep_cmd,1);

若需完整工程文件可加下方wx联系👇👇👇

这篇关于基于GEC6818 Qt智能病房监控系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/186913

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi