毕业设计 《基于zigbee的智能路灯控制系统》-物联网通信-智能路灯系统

需要源码的童鞋私信我。

需求分析说明

1.1概述
近年来,城市建设规模不断扩大,城镇照明系统得到空前发展。 然而受人力、经济、技术等方面的影响,针对路灯照明的管理控制以 及维修养护等方面存在很多不足之处。在科技高速发展的背景下,在 路灯系统的设备配置、环境监测等环节实施先进的技术手段,使系统 功能大大增强,建设成本有效降低,进而提高路灯系统的智能性、实 用性、经济性和安全性。目前 zigbee 通讯技术在路灯的控制方面应用 较广,使路灯施工安装更加便捷,使用更加安全可靠,所以致力于探 索基于 zigbee 智能路灯控制系统的构建的具有较高的应用价值和研究 意义。
1.2场景描述
利用物联网实验箱中提供的协调器以及各终端节点,模拟路灯,具体描述如下:
Zigbee组好网后,光强采集模块全天候采集当前环境的光强,通过光强信息控制路灯的亮度,以使路灯的亮度保持在一个较为舒适的亮度。通道,电压电流采集模块实时检测路灯能耗;当夜晚降临,光强变弱,路灯亮起并保持常亮状态,凌晨时分,路上行人减少,路灯自动熄灭,由热释电模块感知是否有人经过,有人经过则亮灯。
2概要设计说明
2.1系统架构
系统结构图如下:
在这里插入图片描述
2.2 功能介绍
2.2.1 各传感器节点
采集相应的数据,并周期发送给协调器。
2.2.2 协调器节点
主要用来实现路段控制,负责区域zigbee网络的启动和配置,无线传感网络的建立,并实现信息的传递。它接收各传感器节点采集到的电、光、路灯状态等信号,并转发给网关;也将网关下达的指令通过无线传感网络传递给对应路灯,以实现智能控制的功能。
2.2.3 网关
本部分主要实现对路灯的一个监控功能,一方面将协调器发送的数据进行汇集以及可视化转化,为管理人员做出恰当的决策提供准确的依据;另一方面根据控制要求自动做出决策,通过串口通信将决策指令发给协调器。
同时通过socket连接服务器,进行tcp通信,实时将串口数据进行转发。
2.2.4 服务器
通过socket创建信道接受传感器信息,将信息写入数据库并利用聚类算法等进行数据分析并将信息写入数据库,最终通过websocket传送数据到远程监测面板进行动态显示 。
2.3 技术应用
2.3.1 Zigbee协议栈
帧头40作为网关截取一条消息的标志,消息长度保留,节点编号保留并扩展出多个同类型的节点,类型编号将用到的传感器从00到05重新编号,温湿度光照模块的数据域缩小,温湿度删去只保留光照,校验方法更改为异或校验,传感器检测发送的频率改为一秒一次。
2.3.2 串口通信
利用QT5中自带的QSerialPort类,进行串口数据的采集。设立handler函数,对串口数据进行解析,并分类跳转不同的处理函数。同时进行双向通信,通过串口即时将命令下发给协调器,控制各终端节点。
2.3.3 Scoket编程
在网关部分,通过socket与服务器建立连接,进行tcp通信,将串口数据实时发给服务器。服务器通过socket不断的接收网关发过来的数据,写进数据库。
2.3.4 Websocket
WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
2.3.5 数据库
主要实现对传感器数据的存储,方便对数据的处理。
2.4 说明
主要完成物联网三层架构中应用层的部分工作
1工作如下:
运用node.js建立服务器,通过socket创建信道接受传感器信息,将信息写入数据库并利用聚类算法等进行数据分析并将信息写入数据库,最终通过websocket传送数据到远程监测面板进行动态显示 。
主要完成物联网三层架构中网络传输层的部分工作
2工作如下:
应用QT软件以及相关的库函数,编写网关ui界面。实现接收串口数据并将数据进行可视化分析转化,并通过串口向下传输控制命令,控制路灯节点。同时将转化好后的数据通过socket连接服务器,实时传输。
主要完成物联网三层架构中感知识别层的部分工作
3工作如下:
针对本系统,进行相应的Zigbee协议栈修改和优化。

3详细设计说明
3.1网关设计流程框架
在这里插入图片描述
3.2 各功能模块设计说明
3.2.1 串口设计模块
在QT5中是自带QSerialPort这个类的,所以在使用时需要在pro文件里面添加一行:QT += serialport。然后直接引用头文件使用即可:
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
QSerialPort提供访问串口的功能,QSerialPortInfo提供系统中存在的串口消息。
通过foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())寻找系统中可用的串口资源,找到串口资源后需要对其一些属性进行配置,包括波特率等等。这些放在串口配置界面实现。
串口配置好后,就可以正常工作了。QSerialport中提供了readRead()信号,当有数据发来的时候就调用my_readuart()函数。这样就可以实现串口数据的读取了。
在my_readuart()函数中,因为协调器发送过来的是一串十六进制数,所以在这部分不需要转化,设立QByteArray变量,将串口的全部数据读取,然后调用handler()函数处理数据即可。
代码如下 :
在这里插入图片描述
在这里插入图片描述
3.2.2 串口数据处理模块
在handler函数中,首先进行数据的筛选,只提取0x40开头的有用数据,提取后,根据zigbee协议包第四位的节点类型,跳转对应的处理函数。
在不同类型的处理函数中,前半部分的设计思路是一样的,因为各传感器节点会定期发送心跳包,这些心跳包在handler函数中是正常跳转的,但是这些是我们不需要的。好在协议栈中规定了心跳包的标识,所以在处理函数中,判断协议的第五位数据即可。
对于光照、电流、电压等数据,需要进行可视化转化,即将原始的十六进制数据转化为十进制数。处理好后打印到网管界面的相应的位置,方便查看。
相关代码如下:
在这里插入图片描述
3.2.3灯光不同亮度设计模块
对于本系统中的路灯,需要根据光强,发出不同的亮度。实验箱中的pwm模块有不同的亮度调节开关,所以利用此模块来模拟路灯的智能调节。在网关界面,设置QSlider滑动条,来调节灯光的不同亮度。通过ui->lineSlider->value()来获取当前进度条的数值,取余后,调用open_light(int)函数。在open_light(int)函数中,根据int数值的不同,发送不同的命令通过串口发送不同的命令给协调器完成调节。
在这里插入图片描述
3.2.4连接服务器设计模块
使用QT的网络套接字需要.pro文件中加入一句:QT += network。主要流程如下:创建QTcpSocket套接字对象;使用这个对象连接服务器(ip和port根据实际输入来连接);使用write函数向服务器发送据;当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据。
在向服务器发送数据时,为了达到实时响应的目的,在每个处理函数中,在判断连接服务器好后,直接写入,并flush发送。
代码示例如下:
在这里插入图片描述
在这里插入图片描述

4算法设计与分析
4.1 十六进制转化
在串口接收数据时,接收的是QByteArray数组,需要进行一定的转化,转化为十进制数字,方便查看;向串口发送数据时,同时也需要十六进制命令,来完成执行。
在串口接收数据中,实现转化还是比较简单的,用unsigned char类型一转,即可完成。但是发送命令时,因为输入的是QString类型的字符串,无法直接完成转化,所以增设转换函数QString2Hex(QString str)函数完成转化,代码及相关注释如下:

为了方便转化,增加ConvertHexChar(char),功能为将1-9 a-f字符转化为对应的整数。
代码如下:
在这里插入图片描述
在这里插入图片描述
4.2 灯智能控制算法设计
总体思路是通过光强来进行智能的调节。但是考虑到一天时间人流量的变化,设计为凌晨的0点至早上6点进行关闭,通过PIR传感器,当感触到人时,进行打开。关键设计代码如下:

在这里插入图片描述
在这里插入图片描述
5系统实现
5.1初始化界面
在这里插入图片描述
5.2 串口设置界面
在此界面中,配置串口的一些数据,包括波特率、校验位、数据位和停止位。
在这里插入图片描述
5.3 串口正常工作界面
串口打开后,传感器采集的数据显示到对应的位置,显示如下:
在这里插入图片描述
通过滑动条来控制灯光的亮度,演示如下:
在这里插入图片描述
打开自动调节开关,后根据光强自动控制。
演示如下:
在这里插入图片描述
5.4 服务器连接界面
连接好服务器后,实时通过socket转发传感器数据。
演示如下:

在这里插入图片描述

发布了78 篇原创文章 · 获赞 3 · 访问量 6595

猜你喜欢

转载自blog.csdn.net/weixin_38023259/article/details/104190876
今日推荐