物联网智能家居系统

2023-11-13

源码部分可以找我我给你的哦。
l3O6l4O8O52 扣扣

1.需求分析、原理/基础准备

1.1实验目的

利用qt以及c++语言数据结构等相关知识后,在windows开发环境下,以cc2530芯片为控制核心,利用Zigbee和串口通信技术,温湿度、电机、烟雾、红外等传感器为环境信息采集源,以串口控制为辅助,来制作一个物联网智能家居系统。
基本要求如下:
(1)界面友好,易与操作。采用菜单或其它人机交互方式进行选择。
(2)能实现数据的采集与处理,通过智能的软硬件处理方式,使用简单的方式,能够在PC端解决一些生活中常见的问题。

1.2基本功能

(1)在IAR环境下编写传感器模块程序,并利用烧写器将实现各传感器模块功能的程序烧进传感器内,使传感器实现功能。
(2)通过Qt编写可运行程序并利用超级终端加载到网关,在网关上实现对各模块反馈的信息显示以及控制。
(3)利用Zigbee通信技术实现各模块之间的通信,并与串口相连,以交换信息。

1.3模块功能描述

在这里插入图片描述

1.3.1主功能函数模块

本模块在windows系统环境下利用Qt Creator编写可执行程序,来实现各种功能。本模块的主要功能是通过鼠标点击操作界面可以实现串口的打开和关闭,电机的正转.停止操作,LED灯的打开和关闭,实时更新显示当前环境下温度、湿度以及光照强度,显示当前烟雾反应情况和当前的系统时间,并且通过操作程序中的一个窗口来显示操作信息。

1.3.2串口通信模块

通信模块主要是以CC2530芯片的Zigbee结点和串口通信模块实现了收集各个传感器模块的信息,并连接到网关进行信息反馈,再将网关的控制信息反馈到各个模块。

1.3.3电机模块

本模块的主要功能是用户在网关的程序中通过按键,实现对电机的正转、反转、停转的操作,以此来模拟智能家居中的风扇开关或窗帘的拉起落下等。电机模块的LED灯则是模拟智能家居中的分布于各个房间的电灯,通过操作界面选择某个灯可以控制LED灯的打开和关闭。

1.3.4时间获取模块

本模块的主要功能是在操作界面上显示当前系统的时间,通过串口与PC机连接获取时间信息,用来模拟智能家居中的时钟等设施。

1.3.5温湿度光电模块

本模块的主要功能是通过温湿度光照传感器模块收集当前环境下的温度、湿度以及光照强度,并通过通信模块将信息反馈到操作界面中显示,并实时更新。用来模拟温度计湿度计等智能家居中的环境采集器,使人们能生活在舒服的环境中。

1.3.6烟雾模块

本模块的主要功能是利用烟雾传感器来判断当前环境中是否存在过量烟雾,当烟雾过大时,就会将信息反馈到网关中的程序,提示有烟雾,开启蜂鸣器。以此来模拟智能家居中的火警报警器,当有烟雾反应时即刻反馈信息并报警。

1.3.7 PWM调光模块

本模块的主要功能是通过操作界面程序中的调光灯模块的滑块来控制灯光(光照强度)的大小,以此来模拟家居中的柔光强光等各种情况分别适宜的光线。

1.3.8 灯泡模块

本模块的主要功能是通过操作界面程序中的自动化调节模块下环境变化以及阈值来控制灯光的亮灭,以此来模拟家居中的自动开光灯提供适宜的光线。

2.概要设计说明

2.1模块调用图

在这里插入图片描述
在这里插入图片描述

3.详细设计说明(各部分成员分工部分)

3.1主程序模块

— 主程序在windows系统环境下,利用Qt来编写的可执行程序,分别调用了串口、电机、温湿度光电等传感器模块,在mainwindow.h和mainwindow.cpp文件调用,使其可执行。在这里插入图片描述

3.2通信模块

该模块主要包括ZigBee结点通信和串口通信模块。ZigBee协议栈中定义了通信协议,利用IAR程序和烧写器将协调器程序烧写到串口模块,从而收发传感器和网关信息。

3.3串口模块

该模块的主要要求部分是在对数据的16进制读取和发送的处理下,实现对接受的数据包的处理。
QByteArray QString2Hex(QString str)
{
QByteArray senddata;
int hexdata,lowhexdata;
int hexdatalen = 0;
int len = str.length();
senddata.resize(len/2);
char lstr,hstr;
for(int i=0; i<len; )
{
hstr=str[i].toLatin1();
if(hstr == ’ ')
{
i++;
continue;
}
i++;
if(i >= len)
break;
lstr = str[i].toLatin1();//qt内置函数
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
if((hexdata == 16) || (lowhexdata == 16))
break;
else
hexdata = hexdata*16+lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
return senddata;
}

3.4 PWM调光模块

在这里插入图片描述
本模块利用IAR程序和烧写器将PWM调光程序烧写到pwm传感器模块上,通过网关程序中的调光灯模块的滑块来控制灯光的大小,以此来模拟家居中的灯光大小。
ui->horizontalSlider->setRange(0, 2);
ui->horizontalSlider->setTickPosition(QSlider::TicksRight);
ui->horizontalSlider->setPageStep(1);
ui->horizontalSlider_2->setRange(0, 2);
ui->horizontalSlider_2->setTickPosition(QSlider::TicksRight);
ui->horizontalSlider_2->setPageStep(1);
//将ui部分的滑动部分提前进行初始化,设置不同的档位,发现pwm灯泡的变化幅度00-09本身的亮度强度变化并不会相差很大,故把亮暗设置为3档

void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt )
{
uint8 num1,num2=0;
static UART_Format_Control *receiveData;
static UART_Format_End1 Rsp;
Rsp.Header = ‘@’;
Rsp.Len = 0x07;
Rsp.NodeSeq = 0x01;
Rsp.NodeID = LED_PWM;
Rsp.Command = MSG_RSP;
switch ( pkt->clusterId )
{
case SERIALAPP_CLUSTERID1: //处理各个传感器节数据
receiveData = (UART_Format_Control )(pkt->cmd.Data);
HalLedBlink(HAL_LED_1,1,50,200);
num1 = CheckSum((uint8
)receiveData,receiveData->Len);
if((receiveData->Header0x40)&&(receiveData->Verifynum1)) //校验包头包尾
{
if(receiveData->NodeID == LED_PWM) //地址
{
//占空比调节
if(receiveData->Command != MSG_RSC)
{
DutyRatio = receiveData->Command; //根据指令设置占空比
if( DutyRatio != receiveData->Command)
{
DutyRatio = receiveData->Command; //如果设置不成功再次根据指令设置占空比
}
Rsp.Data[0]= DutyRatio;//返回当前占空比
}
if(receiveData->Command == MSG_RSC)
{
Rsp.Data[0]= DutyRatio;//返回当前占空比
}
}
num2 = CheckSum(&Rsp.Header,Rsp.Len);
Rsp.Verify = num2;
SerialApp_OTAData(&SerialApp_TxAddr, SERIALAPP_CLUSTERID1, &Rsp, sizeof(UART_Format_End1));
FLASHLED(4);
}
break;
case SERIALAPP_CLUSTERID2:
break;
default:
break;
}
}
//处理接收到的RF消息
void MainWindow::on_horizontalSlider_2_valueChanged(int value)
{
if (value == 0)
{
QString str = “400602090051”;
serial->write(QString2Hex(str));
str1+=“控制调节灯2灭\n”;
ui->textEdit->setText(str1);
}
if (value == 1)
{
QString str = “400602090556”;
serial->write(QString2Hex(str));
str1+=“控制调节灯2打到1档\n”;
ui->textEdit->setText(str1);
}
if (value == 2)
{
QString str = “40060209095a”;
serial->write(QString2Hex(str));
str1+=“控制调节灯2打到2档\n”;
ui->textEdit->setText(str1);
}
}
//处理发送的不同档位灯泡亮度部分代码

3.5 烟雾模块

在这里插入图片描述
烟雾模块实现对室内环境的防火防空实时监控系统,实现自动化预警警报反馈,具体的实现检测手段囿于现实原因无法在实验室进行检验,以下为部分实现代码。
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(environment()));
//设定一个environment函数,再添加一个定时器timer对变量及时的捕捉,
void MainWindow::ReadData()
{
QByteArray buf;
buf = serial->readAll();
if(!buf.isEmpty())
{
if(0x04== buf[3])
{
if(0x00buf[5])
smoke = 0;
else if(0x01
buf[5])
smoke=1;
}
}
buf.clear();
}
//对读到的数据包进行解析,简单的对类型buf进行判断
void MainWindow::environment()
{
if (smoke == 1)
ui->textBrowser->setStyleSheet(“background-color: rgb(255, 0, 0)”);
else if (smoke == 0)
ui->textBrowser->setStyleSheet(“background-color: rgb(0, 255, 0)”);
}
//对烟雾是否存在的判断

4.调试以及问题分析

  • 问题一:在对协议传入串口,对传感器进行调控(开光灯,开光风扇)时候发现,在关闭系统后风扇和灯并不会随着系统的关闭而关闭,这个问题在自动化部分也有做相应的处理,在对关闭系统的同时,传入对应的指令对调节灯进行关闭和电机的关闭(电机原本打开和调节灯原本第三档)时发现,只能把电机关闭或者调节灯关闭,无法做到对两个设备的同时关闭
    解决:
    ① 方案1:对串口的处理
    serial->clear();
    在对两个不同的指令控制传入到串口中间,加入clear(),但是发现只能传送一个指令,此方案行不通。
    ② 方案2:在两部分同个时间段发送的指令添加延迟
    添加sleep函数对定时器的定时开关,但是实现的实验效果并不是很理想,还是只能接收一个指令
    ③ 方案3:
    QTimer *tm = new QTimer(this);
    connect(tm,SIGNAL(timeout()),this,SLOT(showTime()));
    对待不同的指令所代表的不同模块进行分组,添加不同时间间隔触发的定时器,虽然此方法在准确的时间点上并不是严谨的,但是基本上可以实现两个指令在同个时间段发送可以多线程操作(如在关闭系统的同时,灯灭,电机停止)
  • 问题二:两个相同类型传感器的控制
    问题与解决:
    在学习了指令的内容后,发现两个灯在同一时间亮的解决办法是改正节点ID加以区分,但是实验后发现没有成功实现两个灯的独立开关、温度调控,后来排查了串口发送的指令,传感器硬件本身等各部分原因后,对烧入传感器的协议进行了处理,发现节点的ID和地址的判断部分代码有与传感器不相对应的问题后,修改了ID以及地址,重新把代码运行烧入传感器后,实现两个调节灯的独立运行。

在这里插入图片描述
在这里插入图片描述
问题三:传感器烧写后无法使用
解决:
各个问题排查后的处理方法:
① 对应的协调器和终端网关的id保持一致
② 硬件本身的性能问题
③ 串口线的更换,协调器模块的更换,或者计算机驱动的更新后解决的兼容问题。

5.用户使用演示:

在这里插入图片描述
打开智能监控系统后,点击按钮打开大厅灯,可以从屏幕上看到“开启系统”和“大厅灯开启”等的提醒反馈。
在这里插入图片描述
这是PWM调光灯模块,滑块向右滑动,灯的亮度会增加;滑块向左滑动,灯的亮度会降低。

实验现象如上图5-2所示,对室内灯的调控。
在这里插入图片描述在这里插入图片描述
这是烟雾报警器,当出现烟雾时,蜂鸣器会启动,图中文本显示框内容由绿色变为红色;反之,没有烟雾时,文本框会一直保持绿色

6.结论:

本次课程设计为时两周,首先熟悉了实验箱的各个模块,实现了简单的协调器和终端的单向通信、双向通信、串口通信。了解了ZigBee通信的方法和原理。为后面的实训打下了基础。一开始上网找了一个串口的源码,并不能调通。后来又继续从网上翻阅资料,学会了如何在QT界面获取串口的信息,按照自己的需求进行了修改。这段时间提高了自己的动手能力——这是第一次和硬件打交道。发现小小的板子里有很多门道,并不不简单。也深刻认识到自己动手能力的欠缺。这些都需要在以后好好加强。这次实验的每一个过程都让我们受益匪浅,让我们体会到完成每一项步骤都是需要队友们认真全力的投入其中,这样才能有质量的完成任务,才能免得自己功亏一篑。难题是设计整个智能系统的框架,如何在现有的硬件资源以及已知的知识下最大程度地设计一个可实现智能化居家系统,时间方面也比较紧张,加上本身个人的能力有限,没有完美的实现自己的一些想法,也是比较遗憾的地方,发现小小的板子里有很多门道,并不不简单。也深刻认识到自己动手能力的欠缺。这些都需要在以后好好加强。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

物联网智能家居系统 的相关文章

  • hashmap为什么8转成红黑树_深入分析HashMap的红黑树实现方式

    在分析jdk1 8的HashMap实现原理之前 咱们先可以了解一下红黑树的设计 相比jdk1 7的HashMap而言 jdk1 8最重要的就是引入了红黑树的设计 当冲突的链表长度超过8个的时候 链表结构就会转为红黑树结构 01 故事的起因
  • Mysql——压缩包方式安装教程

    一 Mysql压缩包下载方式 zip版 5 7及8 0 的下载需到官方网站下载 不同版本对应能安装在不同的操作系统下 本次介绍的是mysql 8 0 30 winx64在win10下的安装方式 下载网址 MySQL Download MyS
  • android模拟器与宿主机通讯

    android模拟器与PC的端口映射 一 概述 Android系统为实现通信将PC电脑IP设置为10 0 2 2 自身设置为127 0 0 1 而PC并没有为Android模拟器系统指定IP 所以PC电脑不能通过IP来直接访问Android
  • Mysql增强半同步模式_MySQL增强半同步的搭建实验,和一些参数的个人理解

    环境信息 role ip port hostname master 192 168 188 101 4306 mysqlvm1 slave 192 168 188 201 4306 mysqlvm1 1 5306 6306 7306 MyS
  • eclipse搜索类快捷键

    习惯的编辑器可以提高编程效率 熟悉的快捷键可以提高工作效率 本文更新eclipse中常用的搜索快捷键 打开资源快捷键 Ctrl Shift R 通过在搜索框中输入名字可以很方便的在项目或工作空间中找某个文件 支持模糊查询功能 例如输入文件的

随机推荐

  • Linux防火墙

    关于linux系统防火墙 centos5 centos6 redhat6系统自带的是iptables防火墙 centos7 redhat7自带firewall防火墙 ubuntu系统使用的是ufw防火墙 必要操作 linux系统防火墙开放相
  • AOP之5种增强方法应用范例

    林炳文Evankaka原创作品 转载请注明出处http blog csdn net evankaka Spring AOP 提供了 5 种类型的通知 它们分别是 Before Advice 前置通知 After Returning Advi
  • PyTorch 手把手搭建神经网络 (MNIST)

    推荐下我自己建的Python学习群 856833272 群里都是学Python的 如果你想学或者正在学习Python 欢迎你加入 大家都是软件开发党 不定期分享干货 还有免费直播课程领取 包括我自己整理的一份2021最新的Python进阶资
  • python写入文件后换行_python写入文件自动换行问题的方法

    现在需要一个写文件方法 将selenium的脚本运行结果写入test result log文件中 首先创建写入方法 def write result str writeresult file r D eclipse4 4 1 script
  • 一些文件头

    由这些文件头即使文件后缀被乱改也可以通过查看二进制文件查出文件的匹配格式 当然这就是一些播放器识别文件的方法 1 从Ultra edit 32中提取出来的 JPEG jpg 文件头 FFD8FF PNG png 文件头 89504E47 G
  • 浅析进程与线程之间的区别

    文章目录 浅析进程与线程之间的区别 从最普遍的答案出发 什么是计算机资源 计算资源 存储资源 I O设备资源 什么是进程 线程 操作系统怎样给进程分配资源的 操作系统怎样调度进 线程的 进程的上下文切换 为什么需要线程 参考链接 浅析进程与
  • mybatis generator

    文章目录 generatorConfig xml GeneratorSqlmap java log4j properties lib maven pom generatorConfig xml
  • 【deep_thoughts】30_PyTorch LSTM和LSTMP的原理及其手写复现

    文章目录 LSTM API 手写 lstm forward 函数 LSTMP 修改 lstm forward 函数 视频链接 30 PyTorch LSTM和LSTMP的原理及其手写复现 哔哩哔哩 bilibili PyTorch LSTM
  • Ubuntu 下安装 OpenSSH Server

    Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情 需要的命令只有一条 sudo apt get install openssh server 查看返回的结果 如果没有出错 则用putty SecureCRT SSH
  • Deprecated usages detected, please refer to the el-pagination documentation for more details

    遇到这个问题 说明你用el pagination分页器参数传递不正确 在这里插入图片描述 https img blog csdnimg cn 5952bad428654dda8d956181f45183d5 png 我的是由于total没有
  • 在tinymce富文本中插入本地视频解决方案

    前言 最近在改一个别人的项目时候 遇到一个需求 要在tinymce富文本中添加本地视频 tinymce富文本本身是不具备添加本地视频的功能的 需要使用一些其他手段来添加本地视频 小demo截图 方法 1 在富文本的外面写一个添加视频的按钮
  • 第二十九章 Unity关节Joint

    关节组件将刚体连接到另一个刚体或空间中的固定点 关节施加使刚体移动的力 而关节限制功能可以限制该移动 Unity 提供的以下关节可以对刚体组件施加不同的力和限制 从而使这些刚体具有不同的运动 Hinge Joint铰链关节 使两个刚体像被连
  • 软件工程——结构化设计

    一 结构化软件设计的任务 在结构化设计方法中 概要设计阶段将软件需求转化为数据结构和软件的系统结构 概要设计阶段要完成体系结构设计 数据设计及接口设计 详细设计阶段要完成过程设计 二 结构化设计与结构化分析的关系 结构化设计方法的实施要点
  • android 旋转屏幕导致Activity重建解决方法

    横竖屏切换时候activity的生命周期 1 不设置Activity的android configChanges时 切屏会重新调用各个生命周期 切横屏时会执行一次 切竖屏时会执行两次 2 设置Activity的android configC
  • python 根据当前时间创建文件

    在当前目录中批量创建文件 文件名为 Y m d H M S格式的当前时间 精确到秒 为防止出现重名文件 在每创建一个文件后 让线程休眠一秒 import time def create global name localTime time
  • vue-router 源码:前端路由

    前言 在学习 vue router 的代码之前 先来简单了解一下前端路由 前端路由主要有两种实现方法 Hash 路由 History 路由 先来看看这两种方法的实现原理 接着我们将用它们来简单实现一个自己的前端路由 前端路由 Hash 路由
  • 开关电源电感电压波形过冲和下冲原理以及处理办法

    以一个同步降压电路例子来讲解 测量电感左端的电压波形如图所示 很明显可以看到电压尖刺 那么为什么会产生这个尖刺 从电路原理中我们知道 实际上电路是有很多寄生参数的 从图中可以知道实际电路可以等效一个RCL电路 过冲和下冲原理是一样的 这里以
  • Linux带宽限速———针对网卡与进程操作限速

    使用 Wondershaper 限制网络带宽 yum y install wondershaper Wondershaper 可以用于限制特定网络接口 如 eth0 wlan0 的下载和上传速度 使用 Wondershaper 来限制接口的
  • 概要设计的必要性及写法

    1 1 文档的重要性 很多小伙伴在需求 开发 测试阶段不注重文档 认为这耽误时间 画蛇添足 实际上文档对于软件行业是十分重要的 软件的定义 软件是包括程序 数据及其相关文档的完整集合 从这个定义中我们能够体会到文档的重要性 很多小伙伴常说要
  • 物联网智能家居系统

    源码部分可以找我我给你的哦 l3O6l4O8O52 扣扣 物联网智能家居系统 18年07 19 实训项目 1 需求分析 原理 基础准备 1 1实验目的 1 2基本功能 1 3模块功能描述 1 3 1主功能函数模块 1 3 2串口通信模块 1