IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【HNU小学期硬件实训】基于QT上位机的汽车监控警报系统 -> 正文阅读

[嵌入式]【HNU小学期硬件实训】基于QT上位机的汽车监控警报系统

测试视频已上传到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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:20:30  更:2021-09-18 10:20:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:34:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码