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

news2024/11/24 7:07:11

文章目录

  • 一、项目设备及平台
  • 二、项目功能说明
    • 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 0

fd_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联系👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于电容电流前馈与电网电压全前馈的单相LCL并网逆变器谐波抑制MATLAB仿真(电压比例反馈及一二次微分反馈)

基于电容电流前馈与电网电压全前馈的单相LCL并网逆变器谐波抑制MATLAB仿真&#xff08;电压比例反馈及一二次微分反馈&#xff09;资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87941037模型简介&#xff1a; 参考阮新波教授【LCL型并网逆变器的控制技术…

scrapy的数据保存到数据库

将数据保存到数据库 mysql数据库 下载链接数据库的依赖 Conda/pip install pymysql在piplines.py 文件中 重写open_spider方法 ​ 连接到mysql数据库 def open_spider(self, spider):self.conn pymysql.Connect(hostlocalhost,port3306,userroot,password20020115,dbscrap…

go系列-读取文件

1 概述 2 整个文件读入内存 直接将数据直接读取入内存&#xff0c;是效率最高的一种方式&#xff0c;但此种方式&#xff0c;仅适用于小文件&#xff0c;对于大文件&#xff0c;则不适合&#xff0c;因为比较浪费内存。 2.1 直接指定文化名读取 在 Go 1.16 开始&#xff0c;i…

chatgpt赋能python:Python编程语言制作的著名游戏

Python编程语言制作的著名游戏 Python是一种广泛使用的编程语言&#xff0c;其简单易读的语法让其成为许多游戏开发者的首选。本文将介绍利用Python编程语言制作的几个著名游戏&#xff0c;并将着重标记加粗它们的标题&#xff0c;以便于读者更容易了解。 1. 游戏&#xff1a…

【Python】python入门篇

概述 官网 https://www.python.org/ Python 是一种脚本语言&#xff08;scripting language&#xff09;。 与编译型语言&#xff08;如 C 和 C&#xff09;不同&#xff0c;Python 的程序代码不需要进行显式的编译&#xff0c;在执行时会动态地解释执行代码。 Python 的脚本执…

FFmpeg 解码 AAC 格式的音频

FFmpeg 默认是可以解码 AAC 格式的音频&#xff0c;但是如果需要获取 PCM16 此类数据则需要经过音频转码。首先要打开解码器&#xff0c;然后向解码器发送 AAC 音频帧&#xff08;不带 ADTS&#xff09;&#xff0c;然后从解码器获取解码后的音频帧&#xff0c;数据是 float 类…

【软考网络管理员】2023年软考网管初级常见知识考点(12)-应用层协议

涉及知识点 应用层协议详解&#xff0c;DNS的概念&#xff0c;FTP的概念&#xff0c;DHCP的概念&#xff0c;Telnet的概念&#xff0c;电子邮件协议 软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主…

我的内网渗透-代理转发(2)

目录 ssh telnet与SSH的区别 安装环境 常用参数 本地端口转发 远程端口转发 动态端口转发 Socks 使用方法 msf端口转发 常用参数 使用方法 创建监听 MSF读取文件命令&#xff08;开启msf的时候直接读取文件就自动设置好监听的各种配置&#xff09; 获取会话后 …

NCI Core Control Messages

NCI 版本参数应编码为 8 位字段&#xff0c;由两个 4 位无符号值组成&#xff0c;表示本规范的主要和次要版本级别。 最高有效 4 位应表示主要版本级别。 最低有效 4 位应表示本规范的次要版本级别。 如果 DH 支持 NFCC 报告的主要版本&#xff0c;则 DH 应继续通信&#xff0…

同比增长超300%,「手势识别」前装赛道借势多模态座舱交互

在座舱多模态交互系统中&#xff0c;手势识别功能正在成为主流的配置之一。高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车前装标配手势识别功能交付37.39万辆&#xff1b;今年1-4月交付23.90万辆&#xff0c;同比增长超过…

Linux下的free、uname、uptime、netstat、dmesg指令

文章目录 1 查看内存的使用情况&#xff1a;free2 查看系统与内核相关信息&#xff1a;uname3 查看系统运行时间和负载&#xff08;uptime&#xff09;4 查看端口监听&#xff1a;netstat5 分析内核产生的信息&#xff1a;dmesg 1 查看内存的使用情况&#xff1a;free free -m…

C++进阶—二叉搜索树

目录 0. 前言 1. 二叉搜索树概念 2. 二叉搜索树操作 3. 二叉搜索树的实现 3.1 非递归实现插入操作Insert 3.2 二叉搜索树中序遍历递归实现&#xff08;排序&#xff09; 3.3 非递归实现查找操作Find 3.4 非递归实现删除操作Erase 3.5 递归实现插入操作InsertR 3.5 递…

c++读取文件之---yaml-cpp使用

实际项目总会遇到有很多超参数的情况&#xff0c;用常规的结构体等无法有效的涵盖所有&#xff0c;为了方便用户进行配置使用&#xff0c;因此使用yaml的方式进行编辑配置&#xff0c;因此去调研使用了yaml-cpp的使用方法。 1、yaml-cpp下载和编译 下载方式很简单&#xff0c…

openfeign实现远程调用

一 openfeign简介 Feign 是声明性(注解)web 服务客户端它使编写 web 服务客户端更加容易请创建一个接口并对其进行注解.它具有可插入注解支持&#xff0c;包括Feign注解和JAXRS注解Feign 还支持可插拔编码器和解码器。Spring cloud 添加了对Spring MVC注解的支持&#xff0c;并…

chatgpt赋能python:Python编译成SO文件和反编译的介绍

Python编译成SO文件和反编译的介绍 什么是SO文件&#xff1f; SO文件&#xff0c;也称为共享对象文件&#xff0c;是一种二进制文件格式&#xff0c;用于在多个应用程序之间共享代码和数据。在Unix和类Unix系统中&#xff0c;它们通常是共享库文件的形式。因此&#xff0c;SO…

chatgpt赋能python:Python编译成可执行文件:让你的代码更加优雅高效

Python编译成可执行文件&#xff1a;让你的代码更加优雅高效 Python作为世界上最受欢迎的编程语言之一&#xff0c;拥有着丰富的库、面向对象的语法和简单易懂的语法结构。然而&#xff0c;在开发Python应用程序时&#xff0c;受限于Python的解释性&#xff0c;导致程序的效率…

Qt实现自定义控件能够以插件的方式加载到Qt设计师

目录 1、自定义部件/控件2、改进法3、插件法3.1、创建工程3.2、工程目录3.3、修改插件类的代码3.3.1、HexSpinBox类的头文件3.3.2、HexSpinBox类的源文件3.3.3、HexSpinBox类的UI文件3.3.4 需要的注意的事项 3.4、生成动态库 4、测试插件能否正常使用4.1、测试Qt设计师能否识别…

认识@Validated 和 @Valid

对于web应用来说&#xff0c;对方法参数的校验是十分重要的&#xff0c;参数校验的是否全面&#xff0c;直接决定整个方法的健壮性。 除了使用麻烦的if判断校验参数&#xff0c;还可以使用Validated 和 Valid注解来进行优雅地参数校验&#xff0c;让参数校验和写诗一样优雅。 …

手机移动 APP测试流程及测试点

1 APP测试基本流程 1.1 流程图 1.2 测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c; 一般测试时间为两三 周(即 15 个工作日)&#xff0c;根据项目情况以及版本质量可适当缩短或延长 测试时间。正式测试前先向主管确认项目排期。 1.3 测试资源 测试任务开始…

移动云智能算力调度平台,谱写算力互联互通新篇章

中国移动算力网络建设取得新进展&#xff01;移动云智能算力调度平台验证了多云服务商间异构算力的统一调度能力&#xff0c;联动国家级超算中心、智算中心&#xff0c;促进东部业务灵活使用西部算力&#xff0c;作为未来算力互联网的统一调度平台将持续开展技术攻关与应用创新…