基于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

相关文章

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用