测试视频已上传到b站:

基于QT上位机的汽车监控警报系统

一、绪论

本次实验的选题是基于 QT 上位机的汽车行驶监控警报系统,灵感来源于本人在行驶电动车过程 中遇到的问题,为汽车模拟了不同的场景,外接步进电机模拟汽车行驶状态,调用传感器实时监控 汽车的振动、温度、光照等数据,并及时将数据反馈到上位机进行监控,更有喇叭、一键报警等功 能。

二、总体方案设计

根据不同情况为汽车设置了“锁定”、“日间行驶”、“夜间行驶”三个场景,外接步进电机 模拟汽车行驶状态,调用传感器实时监控汽车的振动(防盗)、温度(电动车锂电池防爆)、光照 (电动车夜间行驶车灯测距)等数据,通过串口通信与基于 QT 设计的上位机进行通讯,将实时数据 反馈到上位机进行监控,并能通过上位机发送指令控制单片机。

三、软件设计与实现

1、下位机设计

(1)使用的函数和库

包括:显示、按键、振动传感器、蜂鸣器、音乐、ADC 传感器、串口通信、步进电机模块。

(2)初始页面设计

打开单片机后,初始状态设为 3(汽车锁定),数码管显示文字“hello–”,设置音乐模块的 初始节拍值 beat=200,音调值为 E 调 tone=0XFE;步进电机速度 speed=10,转速 steps=10000,并 将步进电机的速度传给串口通信发送缓冲数组的第四位和第五位。

(3)辅助功能设计

① 、振动感应
如果有检测到振动,振动标志位 vibration 为 1。


② 、ADC 模拟量感应
获取 ADC 模拟量中的温度值和光照值,并将温度值模拟量转为摄氏度,当温度大于 30 度或光照 值大于 100 时温度报警标志 temprature 和光照报警标志 illuminate 为 1,并将并将实时模拟值传 给存到缓冲数组的第 0、1 位和第 2、3 位,用于传送给上位机进行实时监测并绘制动态图表。

③ 、喇叭功能
当按下导航左键时,通过 ADC 感应检测导航电压值,当电压值在左键的范围中时,蜂鸣器持续 响应,数码管显示“dddddddd”,模拟喇叭功能。

④、倒计时自动落锁
在 10ms 回调函数中设置倒计时 10s,LED 灯显示倒计时数字,时间满后锁定标志 lockflag 为 1, 转到锁定模式。

(4)主体结构设计

在 100ms 回调函数中设计下位机的主体结构,通过状态参数将下位机分为四种模式,0 表示响 铃状态,1 表示停止响铃状态,2 表示进入警戒模式,3 表示退出警戒模式。
① 、响铃状态:
播放音乐《黑猫警长》,数码管显示“CALL-110”,LED 灯全亮,在 switch 外使用标志位 flag 进行 400ms 的定时,在 case0 中每 400msLED 灯设置一次相反的状态,实现 LED 灯不断闪烁的效果。

② 、停止响铃状态
停止播放音乐,温度报警标志 temprature 、光照报警标志 illuminate 、震动报警标志 vibration 都设为 0,喇叭标志 trumpt 也设为 0,此时不能鸣笛。数码管显示“-PAUSE-”。

③ 、警报状态
通过标志位 lockdriveshift 将处于警报状态的汽车分为三个模式,分别是 a、锁定模式,b、 日间行驶模式,c、夜间行驶模式。
a、汽车锁定模式
数码管显示“–LOCK–”,停止播放音乐,调用喇叭功能,此时如果有振动,或者温度和光照 达到警报值,将转到 state=0 产生警报。

b、日间行驶模式
数码管显示“–drive–”,调用喇叭功能,以 speed 的速度值和 steps 的转速打开步进电机 1 号,模拟汽车行驶状态,在日间行驶模式中,只有温度达到警报值会产生警报,lockflag 是步进电 机自动锁定标志位,当检测到步进电机速度为 0 时,系统会倒计时 10s,然后转到 state2 中的汽车 锁定模式。

c、夜间行驶模式
数码管显示“–night–”,调用喇叭功能,以 speed 的速度值和 steps 的转速打开步进电机 1 号,在夜间行驶状态中,LED 等全亮模拟车灯,当温度和光照达到警报值会产生警报,lockflag 同 日间模式。

④、退出警报模式
即单片机开机后的初始等待界面,数码管显示作者名“-by-ACL-”,在每 400ms 的时间中 LED 灯显示相反的状态,由于初始状态 init()中 LED 灯为间隔亮起,所以此处达到 LED 等间隔闪烁的效 果。

(5)按键模块

① 、功能按键
按下 key2 进入系统,转入 state2 中的 lock 模式,设置初始报警标志位全为 0。在其他 state 中按下按键 2 同样转回 lock 界面。

按下 key1,如果处于 state0 响铃状态则转到 state1 停止响铃,反之亦然,达到播放/暂停报 警铃声的功能。

② 、导航按键
按下 Key3 键,串口通信发送标志 sendflag=1,此时可以通过串口向上位机实时发送监控数据; 再按一次 sendflag=0 时,可以接收从上位机发下的指令。

在 state2 中,按下导航左键,数码管显示“dddddddd”,调用喇叭函数,可以模拟按喇叭的效 果。

按下导航中键,可以解锁进入 state2 警报状态,并切换日间/夜间行驶模式。

按下导航的上、下键,如果步进电机在工作状态,则可以改变步进电机的速度,每次加 5 或者 减 5,LED 灯闪烁显示当前速度,并将实时速度值传给存到缓冲数组的第 4 位和第 5 位,用于传送给 上位机进行实时监测。同时,当前速度为 5 时,再按一次下键,系统检测到速度为 0,此时倒计时 标志 timeflag 为 1,启动倒计时 10s 自动锁定功能。

(6)串口通信模块

发送缓冲数组和接收缓冲数组定义,发送数组定义为 adcrxd[温度,温度,光照,光照,速度, 速度],接收缓冲数组帧头为 0xaa。

①、串口发送
在 100ms 回调函数中,当进入初始等待界面且发送标志为 1 时,可以向上位机不断发送实时数 据。

② 、串口接收
定义串口接收回调函数,当上位机发送“aa fx”时下位机产生对应的响应。f0 远程启动 f1 远程锁定,f2 远程报警,f3 远程关闭警报

2、上位机设计

(1) 登录界面


在登录按键上关联点击槽函数,当点击登录按键时,获取用户名编辑框 speedEdit 和密码编辑 框 stepsEdit 的字符串,当用户名为“LXN”且密码为“11111”时,当前登录界面关闭,新建 Widget 对象,并按当前页面大小打开 Widget 主页。

(2) 串口通信界面

连接单片机后,自动寻找串口。

“打开串口”按钮关联点击动作槽函数,在界面上的下拉框 CombBox 中为单片机匹配波特率、 校验位和停止位。



“关闭串口”按钮关联点击槽函数,如果关闭成功,由 QMessegebox 提示关闭成功,否则提示 关闭失败。

“发送”按钮关联点击槽函数,如果点击发送,将从发送框 LineEdit 中获取字符串,将 str 字 符串转换为 16 进制形式后存入字符数组 senddata 中,然后将 senddata 发送到串口传到下位机,同 时在接收框 recvEdit 中显示传输的字符串。

手动关联接收信号和接收槽,用 readAll()函数读取串口的所有数据,用流函数将字节数组 读入,在 while 循环中,当数据包没有到最后一个字节时,将十六进制数据转换为字符数据并不断 填充到字符串 mystr 中,接下来三行注释代码可以将接收数据显示在接收框 recvEdit 中,但是由于 两个 tab 同时接收数据会导致程序卡死,所以取消掉该功能,只在接收框上显示发送数据。


“清空”按钮和“退出”按钮,清空接收区信息框,退出该界面。

(3) 实时数据监测界面


将转换成字符串的接收数据按照协议截取并转换成十进制,分别由不同的的 lineEdit 文本框接 收,并将数据转换成 float 类型用于接下来的图表处理。

调用 Qcustomplot 函数包绘制实时动态曲线,获取当前系统时间作为横坐标,并将温度和光照 值添加作为曲线绘制。

在 setupPlot 函数中设置图表的外观、曲线颜色等等,此处直接参考的博客上的配色模板[1]

至此,本实验软件设计部分全部结束。

四、实验过程与测试

首先,单片机上电,显示欢迎界面和作者名字(左),按 key2 进入系统,转到汽车锁定模式(右)。


按导航中键可以进入行驶状态并切换日间行驶(左)和夜间行驶(右),夜间行驶时 LED 灯全 亮模拟车灯,此时右侧步进电机开启,右侧 SM 接口 LED 灯闪烁。


按导航上下键可以调整步进电机速度,按上键速度每次加 5,下键速度每次减 5,LED 灯显示当 前速度。当速度为 0 时,系统倒计时 10s 自动锁定,LED 灯显示倒计时。

导航左键可以模拟喇叭鸣笛功能。

启动上位机,使用用户名“LXN”,密码“11111”登录系统(区分大小写),若密码不对,会 提示“User name or password is invalid. ”


进入界面后,系统自动搜索串口,可手动设置默认波特率和数据、标志位,点击“打开串口” 连接下位机,若打开成功(左)提示“Opening the serial port successfully”,如果因为串口 不存在或被占用打开失败(右),会提示“The serial port does not exist or is occupied.”


打开串口后点击“实时数据”界面,在单片机上按 key3 开启/暂停数据传输,左侧数据栏中会 显示实时速度、光照和温度值,右侧图表栏会绘制实时动态曲线,蓝色曲线代表当前光照,红色曲 线代表当前温度。


在锁定状态下,振动、光照或温度三个因素都会影响产生警报,在日间行驶状态,只有温度异 常会产生警报,在夜间行驶状态下,温度和光照异常会产生警报。
警报状态下,单片机数码管显示“CALL-110”,并响起音乐《黑猫警长》,按 key1 键可以暂停 (右)/启动(左)警报。


在单片机上按 key3,暂停实时数据传输后,点击“串口通讯”界面,可以按照下方提示输入“aa” 加对应的指令“fx”,由上位机发送给单片机,控制单片机的操作。

软件功能测试结束。

五、设计总结与心得

本次实验我一共做了十天左右,上位机和下位机加起来一共有八百多行代码,整个小学期除了 吃饭睡觉就是在敲代码查资料,第一次一个人完成这么大的工程量,写到现在我的肩膀都痛得不行, 所以本次实验对我来说意义还是蛮重大的。
一开始想到这个选题是因为我这个学期新买了一辆电动车,在骑车的过程中我发现了很多有趣 又实用的小功能,比如振动报警,所以最初我只花了两天做了一个简易版的振动声光报警器,振动 是为了锁车时防盗,温度是用于监测锂电池温度防爆,光照是夜间行驶时监测身后是否有其他车辆, 方便避让或拉开车距,当然这个功能也可以通过雷达测距模块实现,雷达的功能也更全面,日间行 驶也可以使用。
初版功能完成后我又思考有没有什么可以拓展的功能,于是干脆想能不能用单片机模拟电动车 行驶状态并监控数据,于是改进了代码模式架构,并加入了喇叭、车灯、加减速、刹车后自动落锁 等功能。
单片机功能做好后还有一个周的时间,当时我的设计虽然完成了,但是整体都比较简单,也没 有很大的代码技术难度,而且因为单片机空间有限,我监控的温度、光照和速度都不能显示,单片 机放在一边经常突然响起警报很吓人,所以我就想做一个可以在电脑上监控数据的上位机。
因为以前完全没有学习过硬件知识,所以我查了两天的资料也不知道到底该用什么做上位机, 最后我决定参考学习通的案例,用基于 C++的 QT 实现上位机的制作。整个周末我都在工训中心看 QT 的学习视频,并跟着教程做了一个很简单的登录界面。不得不说平时写代码 debug 虽然让我很烦躁, 但是当一个具体的东西通过我手下的代码呈现在我面前时,那种成就感绝对是远远大于学习时的挫 败和疲惫的。
接下来我又继续搭建好了上位机的三个界面,但是就在验收前两天,我还卡在串口通讯的数据 类型转换这个点,虽然最后发现只需要用一个很简单的函数就能解决问题,但是这个问题足足困扰 了我一天半,我还害怕最后我的项目不能如期完成,这期间我在博客上查阅了无数的资料,伟大的 网络时代,真的非常非常感激各位详细认真写博客教程的大牛,让我不至于为了一个函数头秃。
整个实验在验收前一天全部结束,我的单片机已经可以和上位机完成简单的通讯,整个设计我 个人还是比较满意的,但也有一些想法没有能实现。
比如串口通信,我想在上位机界面实现用按键直接控制下位机硬件的功能,但是查询资料需要 在加入一些底层的硬件工程文件,因为是 BSP 所以也无法实现;然后我又想通过按键触发槽函数向 下位机发送指令信息,但可能因为串口会被发送框的 senddata 占用,还是其他什么原因,总之我尝 试了很久也无法成功发送指令,只能放弃这个功能。
至此我的小学期可以说正式忙完了,说实话很长一段时间因为写代码陷入了瓶颈,我一度觉得 可能自己不适合学习这个专业,但是在这次集训当中我却有了新的体验,不断学习新的知识,不断 用编译器修正自己的逻辑,用代码构筑自己脑中所思所想,这真的是一件让人很有成就感的事,也 是我选择学习计算机的初心,今后的日子,更加坚持,更加努力,更加热爱。

六、参考文献

(1)、CSDN 博主「taxingdianzi」:手把手教你制作一个温湿度上位机(串口通信) 原文链接:https://blog.csdn.net/qq_39542860/article/details/108291462 (2)、【北京迅为】嵌入式学习之 QT 学习篇 视频链接:https://www.bilibili.com/video/BV1tp4y1i7EJ?share_source=copy_web
(3)、【传智教育】最新 QT 从入门到实战完整版|传智教育 视频链接:https://www.bilibili.com/video/BV1g4411H78N?share_source=copy_web

【HNU小学期硬件实训】基于QT上位机的汽车监控警报系统相关推荐

  1. hnu小学期软件实训-拳王阿里

    [问题描述] 阿里是上个世纪美国最著名的拳击手,阿里在20年的时间里多次获得重量级拳王称号.不过不幸的是,他在之后患上了帕金森氏病.他参加了许多比赛,多到连自己都数不清了.     有这么一段时间,他 ...

  2. 7.9小学期 校外实训报告

    一.背景 由于我们是信息学院大类招生入学,小学期(第三学期专业分流),总体来说大一一年学的主要是通识课,同学们对计算机类这一个块大的领域可能不是很了解,校外实训提供了这样一个机会:走向社会.接触社会. ...

  3. 小学期前端实训笔记(2)-css【菜狗级】

    CSS css基本语法 选择器{属性:值属性:值 } 选择器:选中页面中的标签. 属性:设置标签的特性,特征. 值:与属性相对应的值. 三种形式 行内样式 在HTML标签上,使用style的属性设置c ...

  4. 小学期web实训笔记(1)-html【菜狗级】

    HTML 相关知识 HTML不具有运算功能 html以标签的形式组织页面的内容,只能用默认的枯燥格式. css(层叠样式表)决定怎样表示内容(颜色,字体,图片大小),更丰富多彩. <标签名 属性 ...

  5. HNU小学期计算机系统设计与创新基础训练——基于STC学习板的加密信息存储与游戏操作系统(第一部分设计思路+基础原理)

    HNU小学期计算机系统设计与创新基础训练--加密信息存储与游戏操作系统 一. 选题名称 二. 选题背景 三. 实现功能 1. 主要功能 2. 细节设计 四. 设计思路 五. 基本原理 1. 数码管与发 ...

  6. 2022-2023第一学期微信小程序期末实训报告

    2022-2023第一学期微信小程序期末实训报告 微信小程序小程实训报告 2022-2023第一学期微信小程序期末实训报告 前言 一.微信小程序简介 二.微信小程序布局 三.微信小程序实现,分页面展示 ...

  7. 计算机网络实验第一周,新学期计算机网络实训报告范文

    新学期计算机网络实训报告范文 开学第一周我们就迎来了计算机网络实训,这门课程与上学期所学的计算机网络相对应,给了我们一个更深刻理解和掌握所学知识的机会告. 实训的内容包括了网线的压制,虚拟机的使用,服 ...

  8. 计算机网络如何促进幼儿教师专业发展,新学期计算机网络实训报告范文与新幼儿教师的述职报告合集.doc...

    新学期计算机网络实训报告范文与新幼儿教师的述职报告合集.doc 新学期计算机网络实训报告范文与新幼儿教师的述职报告合集 新学期计算机网络实训报告范文 开学第一周我们就迎来了计算机网络实训,这门课程与上 ...

  9. qt串口采用队列_基于STM32的RGB调色器——STM32程序和Qt上位机全开源

    前言 uFUN开发板1.0版本评测时,基于Qt写了个小上位机,可以通过串口来控制板子上的RGB灯,通过控制,可以混合出任意的颜色,今天整理了一下,开源这个Qt上位机和STM32代码. 项目介绍 基于u ...

最新文章

  1. 搜索进程内存地址_Linux编程 6 (查看进程 ps 及输出风格)
  2. 面试官给我挖坑:URI中的 “//” 有什么用?
  3. spring源码 — 一、IoC容器初始化
  4. jquery datatable设置垂直滚动后,表头(th)错位问题
  5. easyui,layui和 vuejs 有什么区别
  6. python系统性能模块笔记
  7. C++ 使用VS2010创建MFC ActiveX工程项目
  8. python 二维列表从小到大_给Python开发者准备的110道面试题
  9. java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...
  10. json文件使用tips
  11. 西门子/软件/S7-300.400/simatic step 7 v5.5 sp4 chinese
  12. java Vector 在多线程使用中需要注意的问题
  13. 无根树的Prufer序列
  14. Linux tc QOS 详解
  15. MSDB数据库置疑的解决方法
  16. HTML 前端设置浏览器页签图标设置
  17. python求txt文件内平均值_如何使用python计算几个.dat文件的平均值?
  18. 友价实现一键Nofollow(数据库替换)
  19. java魔剑天使_大天使之剑大神教你打造牛逼魔剑士
  20. vue-生成二维码【生成、点击输入框内叉号移除生成的二维码、输入框聚焦】

热门文章

  1. Excel 2010 VBA 入门 103 利用VBA批量插入图片
  2. 盒子模型(插入图片,外边距,内边距)
  3. 【定位问题】基于matlab chan+taylor算法移动基站无源定位【含Matlab源码 2089期】
  4. 习题1-1输入三个整数,输出它们的平均值,保留3位小数
  5. AlphaFold2/docker/run_docker.py阅读理解
  6. 三菱机械手CR751的控制用法
  7. onlyoffice mysql_onlyOffice安装与使用
  8. 天河超算bscc-a超算中心使用笔记
  9. Python3爬虫进阶JS逆向学习(三)
  10. android打不开ios分享微博,iOS集成新浪微博登录分享遇到的一些问题