基于单片机的智能家居安防系统设计

目 录

摘 要 I
Abstract II
引 言 3
1 控制系统方案设计 6
1.1 设计要求 6
1.2 总控制方案设计 6
1.3 单片机方案设计及工作原理 6
1.4 GSM模块方案设计及工作原理 7
1.5 烟雾检测方案设计及工作原理 8
1.6 温度检测方案设计及工作原理 9
1.7人体探测方案设计及工作原理 9
2 硬件设计 11
2.1 主电路设计 11
2.2 GSM模块电路设计 11
2.3 烟雾检测电路设计 12
2.4 温度检测电路设计 13
3 软件设计 15
3.1 系统主程序设计 15
3.2 显示子程序设计 16
3.3 GSM模块子程序设计 16
4 系统调试 18
4.1 系统调试 18
4.2 调试过程 18
4.3 调试中遇到的问题 19
5 软件仿真 21
5.1软件仿真图 21
5.2软件仿真详解 21
结 论 24
参考文献 25
附录1 原理图 27
附录2 源程序清单 28
致 谢 44

摘 要

为了应对目前人们提出的对生活越来越智能的要求,在提高生活品质的同时降低意外事件发生对用户造成的经济损失或其他损失。针对日常生活中经常发生的火灾,失窃,电力资源浪费等生活问题,本设计正是在这种需求背景下展开研究。基于单片机的智能家居安防系统设计集成了防可燃气体烟雾泄露 、防外来人员入侵、防火、智能控制家电等功能,可实现自动检测、声光报警、远程查询、远程报警、远程控制等。
以STC89C52单片机为核心器件,再加上电阻,电容,晶体振荡器等器件,构成了单片机的最小系统。以及其它智能探测器组成的检测模块,在监测到灾情时只输出报警信号开关量,单片机处理器自动控制GSM接口电路。根据险情类别,自动向用户手机发送短信报警,当用户在家遇到灾情或其他情况时,亦可通过求救按钮向外界发出报警信息。
本设计具有成本较低,功能实用,灵活多样,简便有效等特点,有效的降低了用户住宅遇到和发生险情及其他意外事件的风险,有效的避免了因险情及其他意外事件造成的经济及其他损失,将居民损失降到最小,同时也将提高用户的生活品质水平。

关键词:安防系统; 智能家居; 单片机; GSM模块; 远程报警

Abstract

In response to the current demand for more and more intelligent living, while improving the quality of life, reduce the economic loss or other loss caused by accidents to users. In order to solve the daily problems such as fire, theft and waste of electricity, This design is in this kind of demand background to carry out the research. The design of intelligent home security system based on single chip microcomputer integrates the functions of preventing the leakage of combustible gas smoke and preventing the invasion of foreign personnel. It can realize the automatic detection of sound and light alarm, remote inquiry, remote alarm and remote control.
Using STC89C52 single chip microcomputer as the core device, with resistance and capacitance crystal vibration and other devices, constitute a single chip microcomputer minimum system. And other detection module composed of intelligent detector,only the alarm signal switch quantity is output when the disaster situation is detected, and the single chip processor automatically controls the GSM interface circuit. According to the type of dangerous situation, it will automatically send a text message to the user’s mobile phone to alarm. When the user encounters a disaster or other situations at home, he/she can also send an alarm message to the outside world through the distress button.
This design has lower cost, functional practical, flexible, simple and effective characteristics, effectively reduce the user home encounter and the risk of danger and other accidents, effectively avoid the because of the danger and other accidents caused by the economic and other losses, the inhabitants to minimize losses, at the same time, it will improve the level of the user’s quality of life.

Keywords: Security System; Home automation; Single chip microcomputer; GSM; Remote alarm;

引 言

如今,人们的生活水平越来越好,人们对自身安全和保护的认识也在不断提升,同时人们对生活质量的要求也在不断提高,这都对住宅的安全与智能提出了更高的要求。就传统住宅而言,人们仅关注居住舒适性和遮风挡雨,当下人们更希望住宅在一定程度上可以像手机一样智能,可以与用户互动,可以远程控制,甚至可以让住宅“自动”采取某些措施,使得用户的居住环境更加舒适,便捷和安全。
目前市场对于智能家居安防系统的期待值越来越高,安全问题从古至今一直被人们放在首位,是一个重中之重的话题,随着科技的进步不仅使得人们对智能生活产生了极大的渴望,也对安防问题产生了新的思考,人们希望享受到科技的进步为居家生活带来的优质体验的同时,也更加的安全,于是对智能家居安防系统也提出了极高的要求。
为了应对目前人们提出的对生活越来越智能的要求,在提高生活品质的同时降低意外事件发生对用户造成的经济损失或其他损失。针对日常生活中经常发生的火灾,失窃,电力资源浪费等生活问题,基于单片机的智能家居安防系统设计(下称本设计)正是在这种需求背景下展开研究。本设计将有效的解决这些问题,在处理完这些问题之后,不仅可为居民生活提供一层保障,更将使得人们的居家生活变得更加的便利。
1970年后,电子技术融入贯通了人类社会的各个领域,电子技术的发展也带动了生产力的进步,人均生产力的提升和科技的发展形成了突飞猛进的势态,电子科技产品的进步也日益明显。正是因为通信技术、计算机技术、网络技术、控制技术的迅猛发展与提高,促使家庭实现了生活现代化,居住环境舒适化、安全化[1]~[2]。本设计正是基于目前的这种形势,顺应人们的意愿而提出的。
当然通信手段也获得了巨大的进步,通信网络由最初的GPRS,经由科技的发展不断升级为2G、3G、4G甚至是目前逐渐普及的5G通信手段,由最初的有线控制也逐渐发展到无线Wi-Fi控制,物联网局域网控制,科技及通信手段的进步都造就了今天的智能家居技术的不断升级,5G基站的越来越多,5G手机的普及,更造就了无人超市甚至无人汽车,无疑的是,无论将这些科技手段贯彻融入到哪一领域,都将使该领域产生翻天覆地的变化。
针对目前国内外对智能家居安防系统研究的现状,可以总结出以下俩个方面:一、作为一个闭环系统,即仅可在系统内进行响应及反馈,无法将信息传递到外界,简单来说就是当检测到“灾情”或“盗情”时,虽然可以实现声光报警,但无法与外界取得联系,即使灵敏度再高,报警反馈做的再好,无法做到与外界的沟通,那么也将无济于事,就实用性来说这种系统是失败的。二、拥有较为完善的通讯功能,但是对于智能控制或报警的准确性做的不理想,由于某些不确定因素极其容易发出假“报警”,或者发生无信号无法发出报警信息的情况,这样的系统无疑也是一种失败的系统。
当我们准确的定位到这些“劣势”的时候,可以说我们的设计已经成功了一半,由此便抛出了本设计首要解决的问题。
本设计首要解决的问题就是通讯问题,通讯问题一旦得到妥善的解决,便可完成系统与用户之间的交互,包括系统通过温度传感器,烟雾传感器,人体红外传感器采集到的数据可通过SIM800L GSM模块来向用户传递信息,也可以实现用户通过该模块来传递指令到系统进行一些交互操作,例如获取温度信息,以及通过控制继电器的断开与闭合来间接实现对其他家电的控制;
要解决的第二件事是收集温度数据。温度传感器是收集温度数据温度测量电路中,为达到温度感测效果多数情况下采用热敏电阻之类的元器件,它的工作原理是利用到了其会随着温度的变化而改变的电路中的电压或电流的特性。根据感温效应,测得变化值,首先对其进行A / D信号转换,然后使用单片机对这些数据进行处理,最终在显示电路上显示测得的温度[3]。
其次是需对烟雾传感器进行选择,传感器的首要责任就是可以较为灵敏的检测可燃气体,因为日常生活使用,可燃气体会散播在室内空气中,如果灵敏度不够或报警参数设置过高可能会达不到报警的需求;当室内可燃气体浓度已足够大的时候已经为时已晚,同时也不能太过于灵敏或者报警参数设置的过低,因为空气内成分较为复杂,存在微量的可燃气体,太灵敏可能会导致误报警,造成预期之外的影响。
最后是对显示电路的设计以及人体红外感应模块电路的设计,显示电路在系统开机时应显示GSM模块的注册网络状态,正式进入系统后显示当前温度传感器采集到的数据以及设定的报警温度值,当按下“温度加”、“温度减”按键时可对报警温度阈值进行调节。人体红外感应模块电路的设计,在按动设防开关后,应该在一定合理范围内检测到人体时第一时间发出报警信号,既盗情灯和报警灯同时亮起,蜂鸣器上电发出报警声,并在发出时联动GSM模块向用户发出报警信息,完成这一系列的动作后关闭盗情灯和报警灯,蜂鸣器停止报警,再次检测到有人时应当重复完成以上动作。
得益于近年来,电子技术的如同洪水猛兽般的发展,使得单片机以及GSM模块对于本设计展现了其不可或缺的价值,本文列举了五个章节的内容来详细介绍“基于单片机的智能家居安防系统的设计”:
(1)第一章:控制方案设计;
(2)第二章:硬件设计;
(3)第三章:软件设计;
(4)第四章:系统调试;
(5)第五章:软件仿真
在本文的最后对本设计进行总结并向我的俩位指导老师致谢。

1 控制系统方案设计

1.1 设计要求
(1)进入系统后,液晶屏实时显示当前温度传感器所测温度值以及当前设置温度传感器报警阈值,通过“温度加”及“温度减”来对温度报警的阈值来进行调节。
(2)如所测温度值达到报警阈值后,系统启动声光报警,并发送英文报警短信到用户手机。
(3)用户开始设防之后,红外人体模块检测到有人时,系统启动声光报警,并发送英文报警短信到用户手机。
(4)如可燃气体/烟雾传感器检测到可燃气体/烟雾时,系统启动声光报警,并发送英文报警短信到用户手机。
(5)如用户需了解屋内当前温度值时,通过任意手机拨打电话,系统自动挂断电话,并回复屋内当前温度值。
(6)用户可通过手机编辑短信发送到手机模块的方式,控制继电器闭合与断开,利用LED灯的亮与灭,表示家用电器开启与关闭。
1.2 总控制方案设计
以STC89C52单片机作为系统的“心脏”,加上电阻、电容、晶振等器件的加持,组成最小系统[4]。以及其它智能探测器组成的检测模块,在监测到灾情时只输出报警信号开关量,单片机处理器自动控制GSM接口电路。根据险情类别,自动向用户手机发送短信报警,当用户在家遇到灾情或其他情况时,亦可通过求救按钮向外界发出报警信息。总控制框图如图1.1所示。
1.3 单片机方案设计及工作原理
方案一:采用32位的LPC2138作为控制CPU,LPC2138采用了PHILIPS公司基于ARM7TDMI-S核的ARM芯片,拥有RDI标准接口、同步Flash刷新技术以及影射寄存器窗口等三项国内ARM仿真器设计最领先的3种技术,内部PLL锁相环倍频可以得到更高的CPU处理速度,硬件自带的AD、DA、捕获、匹配以及同步与异步的通信方式更方便用户的编程设计,并且可以达到很高的实时性,但是价格较昂贵[5]。

在这里插入图片描述

图1.1系统总体框图
方案二:以最常见的STC89C52单片机作为主控电路核心,这种单片机转换速度快是其优势之一,正常使用可达到25万次每秒,并且有2路的PCA捕获/匹配是日常应用最多的一款单片机,对其的熟悉度很高,并且价格便宜,用途广泛,可以使用于各种仪器与工业控制[6]。
对比可得,如果使用第一种方案控制,则需将所有的接口进行电平转换,这种方案使硬件电路的复杂程度大大增加,可能导致预期之外的事情发生,考虑到功能一致,对比俩款单片机的性价比与设计的便利性,最终决定本系统选择方案二,以STC89C52作为CPU。
1.4 GSM模块方案设计及工作原理
GSM是全球移动通信系统(Global System for Mobile communications) 的简称,GSM 在全球的应用范围很广,同时拥有10亿用户,所有签署了“漫游协定”移动电话运营商的用户可以实现自由漫游[7]。
由于GSM网络不受用户和地区的限制,具有很健全的网络功能,无需再耗费财力用于网络覆盖的建设,首先客源和成本得到了基本保证,无疑将会剩下巨额的成本在基础设施的建设,其可行性和发展前景还是具有很强的竞争力的。
1.4.1 GSM模块的方案选择
GSM模块的选取有俩种方案:
方案一:西门子TC35
TC35是西门子公司生产的一款GSM模块。如今,GSM网络已变得越来越完善[8]。 TC35是西门子公司一致以来高品质设备的体现。该模块易于集成,可轻松利于到新产品的研发与制作之中,在多方面领域都有不错的表现,但是由于其体型较大,人们追逐的目标也从最初的功能渐渐的转向为外观和设计,于是他被淡出人们的视线。
方案二:SIM800L
SIM800L是目前最新的一款GSM模块,性能超过SIM900/M590,工作电压在3.7~4.2V之间,支持中国移动、中国联通,串口为TTL串口,可以与单片机直接链接,不需要MAX232[9]。它可以自动寻找网络,有一个小的LED灯来展示搜寻网络状态,可很直观的展示网络状态,最重要的是尺寸很小 ,目前暂时没有比此模块更小的GSM模块了。
综上所述,无论从性价比的角度或是性能适用的方面来看,SIM800L都是很不错的选择。所以选用此模块来完成短信发送的功能是最优的选择。
1.4.2 GSM模块的工作原理
本设计利用GSM的短信功能实现对家居系统的远程智能控制。通过GSM模块与单片机的协同控制手机收发送短信,单片机即可完成对继电器的断开及闭合进行控制,继而完成对家电的智能控制,完成整个系统的人机交互,其工作流程图如图1.2所示。

在这里插入图片描述

图1.2 GSM模块工作流程图
1.5 烟雾检测方案设计及工作原理
方案一:金属氧化物半导体传感器
此款传感器可根据浓度转换公式检测可燃气体和烟雾。该传感器通过不同条件下的电导不同来达成检测可燃气体及烟雾的目的,在新鲜空气条件下,其电导很小,但一旦与易燃易爆气体接触,电导将增加。但其弊端是价格昂贵。
方案二 :MQ系列气体传感器
MQ-2对可燃气体的检测有很强灵敏度,并且几乎不响应乙醇蒸气和不燃性烟雾[10]。适用于家庭或工业中易燃易爆气体的检测装置。具有响应速度快,使用寿命长,稳定性可靠,价格便宜,驱动电路简单的特点。
综合以上所述,方案二更适合本设计。利用单片机通过对传感器的信号值的判断来进行检测,当发现数值过低时单片机发出可燃气体警告,与其他模块产生联动工作流程图如图1.3所示。

在这里插入图片描述

图1.3 烟雾检测流程图
1.6 温度检测方案设计及工作原理
本设计的测温系统采用芯片DS18B20,DS18B20是DALLAS公司的最新单线数字温度传感器,它的体积更小、适用电压更宽、更经济,DS18B20是世界上第一片支持“一线总线”接口的温度传感器,具有一线总线独特而且经济的特点。DS18B20可直接读出当前所测环境温度值,其成本很低,且应用简单。测温流程图如图1.4所示。

在这里插入图片描述

图1.4 测温流程图
1.7人体探测方案设计及工作原理
HC-SR501是一款基于红外线技术的自动控制模块,LHI778 探头作为德国原装进口的探头,为该模块的工作性能提供了保证,又因其灵敏度高,可靠性强,超低电压工作的模式,从而广泛应用于各类自动感应电器设备[11]。
当有人进入其感应范围则输出高电平,此时联动GSM模块,向用户发送“Someone in the house,please note!”短信,与此同时盗情灯与报警灯同时亮起,蜂鸣器报警电路开始工作,发出声光报警。当不在检测到有人时,则系统复位并停止报警。工作流程图如图1.5所示。

在这里插入图片描述

图1.5人体探测流程

2 硬件设计

2.1 主电路设计
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有60K 在系统可编程Flash 存储器器、中央处理器、程序存储器(Flash)、数据存储器(RAM)、EEPROM、定时/计数器、I/O接口、UART接口和中断系统、SPI接口、高速A/D转换模块、PWM(或捕捉/比较单元)以及硬件看门狗、电源监控、片内RC振荡器等模块[12]。
本系统设计主要应用的是A/D转换模块、SPI接口、定时/计数器、I/O接口等功能模块。具体原理图如图2.1所示。
在这里插入图片描述

图2.1单片机主电路原理图

2.2 GSM模块电路设计
用户和单片机的通讯功能的实现,依赖于SIM800L GSM模块自身配置的通讯接口。系统方案中的短信控制,接收报警短信,打电话查询当前温度值,只要保证网络信号畅通都可以轻松地实现。3.3~5.5V是SIM800L模块的工作电压,根据其工作频段的不同(900MHz和1800MHz),功耗也有所不同分别为2w(900M)和1w(1800M)[13]。
系统短信的发送与接收和自动挂断电话,利用到的是AT命令集接收口,当接到电话时将自动挂断电话并回复当前温度值得短信,仅通过40引脚的ZIF连接器,即可实现多项例如电源连接、控制信号的双向传输等复杂功能[14]。其原理图如图2.2所示。
在这里插入图片描述

图2.2 SIM800L GSM模块电路原理图
2.3 烟雾检测电路设计
上文已对MQ-2传感器进行了简介。MQ-传感器的结构和外形如图2.3所示,MQ-2传感器由于对不同种类,不同浓度的气体会有不同的电阻值,因此在使用该传感器时,要对灵敏度的进行调整[15]。其原理图如图2.4所示:
在这里插入图片描述

图2.3 MQ-2传感器内部结构图
在这里插入图片描述

图2.4 MQ-2气体传感器模块电路原理图
2.4 温度检测电路设计
DS18B20温度传感器简介:
其可在3.0 V~5.5V的电压范围内工作,其于单片机的连接很简单,单线即可实现功能。几乎不需要其他的外围元件,所有的传感器和转化电路都在一个酷似三极管的元件内集成,测温的范围也很广,最低可测零下55℃,最高可测125℃[16]。
DS18B20内部结构如图2.5所示,DS18B20的外形及管脚排列如图2.6和表2.1所示[17]。
在这里插入图片描述

图2.5 DS18B20的管脚排列
在这里插入图片描述

表2.1 DS18B20引脚定义

序号 名称 引脚功能描述
1 GND 地信号
2 DQ 数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源
3 VDD 可选择的VDD引脚。当工作于寄生电源时,次引脚必须接地

.

3 软件设计

3.1 系统主程序设计
本设计的软件部分是以单片机的程序作为核心,其他子程序依照主程序来进行设计,整个系统的运行是主程序与各子程序之间的相互配合来完成的。程序首先需要完成各部分的初始化,然后对是否需要对报警电话号码进行调整的判断,然后通过读取各传感器所采集数据来判断是否有报警,在然后根据判断发送报警,如果没有报警则返回[18]~[19]。流程图如图3.1所示。
在这里插入图片描述

图3.1主程序流程图
3.2 显示子程序设计
本设计除了实现防外来人员入侵、防可燃气/烟雾泄漏报警的功能、利用继电器控制家电的开关外,还要实现实时显示当前温度的功能及当前设定报警阈值。首先是显示屏参数的初始化,先进行A0的读取,判断是否为高电平,如果是即读取温度传感器数据并实时显示温度值,同时展示温度报警阈值,如果按动“温度加”、“温度减”,温度报警阈值也随之发生相应变化。如图3.2所示为LCD1602显示流程图。
在这里插入图片描述

在这里插入图片描述

图3.2显示电路设计流程图

3.3 GSM模块子程序设计
本设计的核心也是亮点就是GSM模块,所以通讯这一功能是软件极其重要的一环,首要任务是对单片机的串行口完成初始化,然后让单片机持续工作,接收信号,当有电话打入的情况下,则发送挂断电话的指令,并向指定号码发送当前温度值的信息。以上功能是根据手机的AT指令和它的通讯协议来完成的,具体程序流程图如图3.4所示。
在这里插入图片描述

图3.3 GSM模块软件流程图

4 系统调试

4.1 系统调试
最后一步需进行系统调试[20],所有的元器件及传感器依照原理图进行焊接之后进行通电测试,当然相对于不是很复杂的电路采用这种方式是最直接便捷的,但是不利于发现问题,如焊接错误需浪费更多的时间寻找,所以本设计采用的调试方法为在安装的过程中进行调试,就是把电路分成各个模块,以模块为单位进行安装和调试。调试成功的电路板图片如下图4.1所示。
在这里插入图片描述

图4.1电路板实物图
4.2 调试过程
(1)通电前检查
电路焊接完成后,不能为系统通电。首先,应根据原理图,仔细检查接线是否正确,是否有不良接触或电路错误,连接到主控制器上的引脚是否与电路图对应。检查时尽量用万用表测量,尽量直接测量零件的引脚部分,这样也可发现是否存在接触不良的零件,并完成整改。
(2)各单元电路通电测试
根据电路图电流导向完成单元模块的焊接之后,还应当在通电前对电路进行一下简单的复查,试通电查看一下电路是否存在异样,无异样即可以之前调试的模块的输出值作为当前模块的输入值作为调试依据进行通电测试,无问题后调试下一个模块。
(3)整体通电测试
当所有的模块都完成了通电测试后,将程序下载到单片机内,即可开始整个系统的通电测试,同样也需要进行试通电,确保电路板无异样后即可正式通电测试各项功能
该综合测试主要在系统调试正常的情况下,验证各项功能完成情况。
①首先调整DS18B20的灵敏度,调整报警温度为50℃并在LCD液晶屏上显示,通过一些特殊手段,改变环境的温度,看LCD液晶屏显示温度值是否会改变。
②通过测量当环境温度超过温度阈值时,系统发出声光报警和GSM发出英文短信到用户手机;
③当室内检测到可燃气体或烟雾时,GSM模块发出英文短信到用户手机;
④当室内有人入侵时,GSM模块发出英文短信报警;
⑤当拨打所插手机卡的号码时,GSM模块挂断电话并发出英文短信的当前温度值;
⑥当发送“#OPEN”或者“#CLOSE”短信到GSM时,继电器完成闭合或断开的动作,继而实现对智能家居的控制;
⑦当按下求救按钮时,系统GSM发出英文短信到用户手机。
各项功能均可正常实现即为调试成功。调试成功图如4.2所示。
4.3 调试中遇到的问题
(1)通电测试后烟雾传感器无法正常检测烟雾/可燃气体
解决方法:经查阅资料后得知,烟雾传感器需根据使用情况作出微调:
①调节COMP电位器,使用电压表测量U5第三脚(V+输入端),使其电压在1.8V左右;
②在完全没有烟雾/可燃气体的情况下,调节VALUE电位器,使用电压表测量U5第二脚(V-输入端),使其电压在0.6V左右;
③如果要提高灵敏度,可调节COMP电位器,适当降低电压,降低灵
敏度则适当提高电压,但不能低于第二脚电压。
在这里插入图片描述

图4.2调试功能完成情况
(2)各项功能电路部分正常,但无法与GSM模块实现联动
解决方法:经查阅资料,该情况可能为SIM800L GSM模块为检测到网络信号,导致无法成功完成网络注册,故无法实现功能,因技术受限,该模块暂不支持电信卡,故更换移动或联通手机卡,或者移动位置寻找一个信号网络强的地方即可完成网络注册,正常实现功能。

5 软件仿真

5.1软件仿真图
如图5.1所示为软件仿真图。
在这里插入图片描述

图5.1软件仿真图
5.2软件仿真详解
首先进行,系统上电,各电路初始化,SIM800L开始读取网络信息,读取完成后LCD显示当前温度值与预设报警温度阈值如图5.2所示。

在这里插入图片描述

图5.2 LCD屏显示
然后此时系统已进入正式运行状态,按动“温度加”、“温度减”按钮时,显示屏中预设温度值随其发生变化,如图5.3所示。按动“温度减”,温度阈值也会随之变小,类似于图5.3,这里不再做赘述。
在这里插入图片描述

图5.3按动温度加仿真	

当改变当前温度,并超过所设温度阈值“50℃”时,灾情灯亮起,同时蜂鸣器也发出报警声,如图5.4所示。
在这里插入图片描述

图5.4温度报警仿真
当检测到可燃气体或烟雾时,灾情灯亮起,同时蜂鸣器也发出报警声,如图5.5所示。
当人体红外模块检测到有人时,盗情灯亮起,同时蜂鸣器也发出报警声,如图5.6所示。

在这里插入图片描述

图5.5可燃气体报警仿真
在这里插入图片描述

图5.6人体红外检测报警仿真
由于仿真无法加入SIM800L模块无法进行与用户交互功能的展示,以上所有“盗情”及“险情”无法进行仿真,同样也无法进行继电器在收到短信后的“断电”与“闭合”的仿真,无法演示其对家电的控制。

结 论

本文从整体到部分详细介绍了智能家居报警控制器的设计。通过查阅大量资料,本文提出了几种可行性方案,对硬件电路的实现方案进行了分析对比,并最终选择了基于GSM模块的实现方案。在比较重要的部分进行了详细的论述,并且给出了程序及说明,其可靠性和稳定性都达到了很好的效果。本设计已经完成了对智能住宅盗情、火情、煤气泄漏等进行自动监测并实现了自动报警功能。经测试,人体电红外传感器的感应范围为6.3m左右;在外界温度超过报警温度值时,DS18B20温度传感器能够准确感应,并发出报警,基本实现预期目的,同时系统还能够辨别不同险情,进行不同的报警,方便主人正确处理险情,使设计跟家智能化、人性化。
本设计中使用的芯片只是当前电子科技发展的一般产物,随着科技的不断发展,更高密度,更高精度的芯片将会取代现有的产品。在现代电子科技的高速发展过程中,微型化、集成化、高密度化以及设备的高精度化已经成为一种长期的趋势,这就要求我们力求使用更精确的设备。
本设计从具有成本较低,功能实用,灵活多样,简便有效等特点,有效的降低了用户住宅遇到和发生险情及其他意外事件的风险,有效的避免了因险情及其他意外事件造成的经济及其他损失,将居民损失降到最小,同时也将提高用户的生活品质水平。

参考文献

[1]冯娟,曾立华.基于GSM的住宅智能报警系统的设计[J].微计算机信息,2008.24:100-101
[2]韩斌杰.GSM原理及其网络优化[M].机械工业出版社,2001
[3]卢宪友.智能远程家电控制及安防系统的研究[D].曲阜师范大学,2010
[4]郭天祥.新概念51单片机C语言教程[M],电子工业出版社,2010.3
[5]高放,杜云,冯建武等.基于GSM 网络短消息的汽车防盗报警系统设计[J].河北工业科技,2009,26:182-184
[6]张洪润.传感器技术大全(上册)[M].北京航空航天大学出版社,2008
[7]赵冲.基于GSM的防盗报警系统设计[D].西安科技大学,2007
[8]TC35i Hardware Interface Description, Version:03.01, DocId:TC35i_ HD_ v03.01, September 09,2005
[9]谢崇明.GSM 汽车防盗报警系统设计[J].装备制造技术,2008.1:105-107
[10]张援朝.防火探测器及气体传感器[J].家用电器.消费,2000.5:80-83
[11]林雪梅.热释电红外传感器及其应用[J].甘肃科技纵横,2005.1:4-6
[12] 姚福安.电子电路设计与实践[M].山东:山东科学技术出版社,2002: 105~118.
[13]李晓思.基于无线GSM网络的智能型住宅自动控制系统[J].传感器世界,2010.7:75-76
[14]梅创社.基于GSM手机模块在车载防盗系统中的应用研究[J].计算机应用与软件,2007(05):124-125+130
[15]郭玲,杨佳宁,李挥,吴晔,谢亨骏.一种GSM手机发射机数字模块的设计[J].通信技术,2010,43(08):97-99+102
[16]崔浩斌,刘伟.基于STM32单片机的智能家居控制系统设计研究[J].微处理机,2020,41(01):61-64
[17]童名文.一种新型报警器的研制[J].高校电子学报,2003.5:45-59
[18]Introduction to the SMS in PDU mode Vi.00,Januaty.2000
[19]GTS GSM 07.07 Version 5. 0. 0. Digital cellular telecommunications system(Phase 2+); AT command set for GSM Mobile Equipment(ME)(GSM07.07)[S],SMG 4.1996.7.1
[20]徐博. 基于ZigBee的社区安防系统设计与研究[D].河北工业大学,2013

附录1 原理图

在这里插入图片描述

附录2 源程序清单

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
bit Alarm_flag; //温度发送短信标志位,=1表示已经发送,=0表示没有发送
bit Smoke_Alarm; //烟雾发送短信标志位,=1表示已经发送,=0表示没有发送
bit Steal_Alarm; //防盗发送短信标志位,=1表示已经发送,=0表示没有发送
bit NEW_SMS; //短消息提示标志位
bit READ_SMS; //读取短消息标志位
bit ATH; //挂机标志位
uchar xdata UART0_Data[256]; //存放手机模块的数组
uchar UART0_Len=0; //定义长度
uchar Len=0; //定义长度

uchar code Command_AT[]=“AT\r\n”; //发送AT,建立连接
uchar code Command_AT_CMGF[]=“AT+CMGF=1\r\n”; //把格式设置为text格式

uchar code Command_AT_CMGS[]=“AT+CMGS=”; //发送到指定号码指令
uchar code Command_AT_YIN[]={0x22}; //发送指定号码双引号
uchar code Command_AT_ENTER[]=“\r\n”; //发送指定号码双引号
uchar code Command_AT_NUM[]=“17640148362”; //发送到指定号码
uchar code Command_AT_IPR[]=“AT+IPR=9600\r\n”; //设置波特率
uchar Command_AT_CMGR[]=“AT+CMGR= \r\n”; //读第几条短信
uchar Command_AT_CMGD[]=“AT+CMGD= \r\n”; //删除第几条短信
uchar code Command_AT_CMGD1[]=“AT+CMGD=01\r\n”; //删除第1条短信
uchar code Command_AT_CNMI[]=“AT+CNMI=1,1,2\r\n”; //设置短消息提示
uchar code Command_AT_CLIP[]=“AT+CLIP=1\r\n”; //来电显示
uchar code Command_AT_CRC[]=“AT+CRC=0\r\n”; //设置来电开头为RING,有电话打入收到RING提醒
uchar code Command_ATH[]=“ATH\r\n”; //挂电话
uchar code Command_ATE[]=“ATE1\r\n”; //设置回显
uchar code Command_AT_End[]={0x1A}; //发送短信内容结束符
uchar code Command_NUM[]=“0123456789±”; //短信里温度值提取的数字
uchar Command_AT_Tem[42]=" C,Temperature exceed limit,please note!“; //温度超过界限,请注意!
uchar code Command_Someone[33]=“Someone in the house,please note!”; //有人在屋里,请注意!
uchar code Command_Smoke[37]=“Combustible gas or smoke,please note!”; //烟雾或可燃性气体,请注意!
uchar code Command_Help[35]=“Someone call for help, please note!”; //有人求救,请注意!
uchar code Command_Opened[13]=“It is opened!”; //打开
uchar code Command_Closed[13]=“It is closed!”; //关闭
uchar code OPEN[]=”#OPEN#“; //开启
uchar code CLOSE[]=”#CLOSE#"; //关闭
sbit rs=P1^0; //LCD1602位定义
sbit rw=P1^1; //LCD1602位定义
sbit e=P1^2; //LCD1602位定义

uchar code table1[]=“NOW Temper: C”; //液晶屏显示内容
uchar code table2[]=“SET Temper: C”; //液晶屏显示内容
uchar code table3[]=" “; //清屏内容
uchar code table4[]=” GSM Module! "; //初始化显示内容
uchar code table5[]=“SIM Initialize!!”; //初始化显示内容

sbit UP =P1^6; //加键
sbit DOWN =P1^7; //减键
sbit HELP =P2^0; //求救键
sbit BEEP =P1^4; //蜂鸣器接口
sbit SMOKE=P3^6; //烟雾接口
sbit STEAL=P3^5; //防盗接口
sbit DQ=P3^7; //温度数据口
sbit JDQ=P1^3; //继电器接口,低有效
int temperature; //全局变量 温度
int Set_temp=50; //设置温度,默认是50度
uchar Timer_Counter; //定时器中断计数
void Send_Message(void); //函数声明
void Send_Command(uchar Value[],uchar Len); //函数声明
void Send_Message(void);
void Send_Message1(void);
void Send_Message2(void);
void Send_Message3(void);
void Send_Message4(void);
void Send_Message5(void);
/LCD1602********************/
void delay_lcd(uint z) //显示屏延时0.2ms函数
{
uint x,y;
for(x=z;x>0;x–)
for(y=20;y>0;y–);
}
void delay1(uint z) //GSM短信延时1ms函数
{
uint x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}
void write_com(uchar com) //LCD1602写指令函数
{
rw=0;
delay_lcd(5);
rs=0;
delay_lcd(5);
e=1;
delay_lcd(5);
P0=com;
delay_lcd(5);
e=0;
delay_lcd(5);
}

void write_date(uchar date) //LCD1602写数据函数
{
rw=0;
delay_lcd(5);
rs=1;
delay_lcd(5);
e=1;
delay_lcd(5);
P0=date;
delay_lcd(5);
e=0;
delay_lcd(5);
}

void init() //LCD1602初始化函数
{
uchar num;
e=0; // 时序表e初始为0
write_com(0x38); //设置162显示,57点阵,8位数据接口
write_com(0x0c); //设置光标
write_com(0x06); //光标自动加1,光标输入方式
write_com(0x01); //清屏
write_com(0x80); //设置初始显示位置
for(num=0;num<16;num++)
{
write_date(table4[num]); //显示数组table1的内容
delay_lcd(1);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table5[num]); //显示数组table2的内容
delay_lcd(1);
}
}

void LCD_Display_String(unsigned char line,unsigned char *string)
{ //液晶屏显示内容,把要显示的内容写到对应的位置
unsigned char i;
unsigned char address=0;
if(line1)
{
address=0x80; //0X80是第1行的第1个位置 ,0x81第2位
}
else if(line
2)
{
address=0x80+0x40; //0X80+0x40是第2行的第1个位置 ,0X80+0x40+1是第2行第2位
}

for(i=0;i<16;i++)
{
	write_com(address);
	write_date(string[i]);
	address++;
} 

}
void temperature_dispaly(char add,char dat) //温度显示函数:第一个:参数的地址,第二个:参数的内容
{
uchar shi,ge;
shi=dat/10; //把温度的十位提取出来
ge=dat%10; //把温度的个位提取出来
write_com(0x80+add); //要写的地址
write_date(0x30+shi); //十位的内容 1602字符库
write_date(0x30+ge); //个位的内容 1602字符库
if((temperature>0)&(temperature<100)) //温度在正常范围内转换
{
Command_AT_Tem[1]=Command_NUM[temperature/10]; //把十位的数字存到Command_AT_Tem[1]
Command_AT_Tem[2]=Command_NUM[temperature%10]; //把个位的数字存到Command_AT_Tem[2]
}
}
/DS18B20**************/
/*void delay(uint y) //DS18B20延时函数25us左右(仿真用、实际调试、需要的延时时间不同)
{
while(y–);
}
*/

void delay(uint z) //DS18B20延时函数34us左右(仿真用、实际调试、需要的延时时间不同)
{
uint x,y;
for(x=z;x>0;x–)
for(y=1;y>0;y–);
}

void write_byte(uint dat) //写一个字节
{
uchar i;
for(i=0;i<8;i++) //循环八次 共有八位
{
DQ=0; //写零
DQ=dat&0x01; //向总线写位数据,从最低位写起
delay(4);
DQ=1; //写一
dat>>=1; //下次写作准备,移位数据
}
delay(4);
}

uchar read_byte(void) //读一个字节,返回值
{
uchar i;
uint value;
for(i=0;i<8;i++) //循环八次 共有八位
{
DQ=0;
value>>=1;
DQ=1; //释放总线
if(DQ)
value|=0x80; //DQ=1,value取1
delay(4);
}
return value;
}

void ds18b20_init() //初始化函数
{
uint n;
DQ=1;
delay(8);
DQ=0;
delay(80); //低电平480——960us
DQ=1; //总线释放
delay(8); //等待50——100us
n=DQ; //读取复位状态
delay(4);
}

int readtemperature() //读整数部分
{
int a,b; //高八位,低八位
ds18b20_init();
write_byte(0xcc); //跳过rom匹配,跳过读序列号的操作,可节省操作时间
write_byte(0x44); //启动温度检测
delay(300); //测温度
ds18b20_init(); //开始操作前需要复位
write_byte(0xcc); //跳过rom匹配
write_byte(0xbe); //写读寄存器中温度值的命令
a=read_byte(); //low 低位开始读取
b=read_byte(); //high 高位开始读取
b<<=8; //把高位左移八位
b=b|a; //高八位与第八位进行或运算,得到总和
if(b>=0) //如果温度大于等于0
{
b=b0.0625; //直接乘以0.0625
write_com(0x80+12); //在LCD1602对应的位置不写内容
write_date(0x20);
if((b>0)&(b<100))
Command_AT_Tem[0]=Command_NUM[10];//Command_AT_Tem[0]为+,表示温度大于或等于0
}
else //温度小于0
{
b=~b+1; //取反码再加一
b=b
0.0625; //再运算
write_com(0x80+12); //在LCD1602对应的位置写一个负号
write_date(0x2d);
if((b>0)&(b<100))
Command_AT_Tem[0]=Command_NUM[11];//Command_AT_Tem[0]为-,表示温度小于0
}
return b; //返回b,此时以表示温度
}
/按键***********************/

void KEY(void)
{
if(HELP0) //求救按键按下
{
delay1(2); //延时消抖
if(HELP
0) //按键确实按下
{
BEEP=1; //开蜂鸣器
Send_Message5(); //发送短信
while(!HELP); //等待按键释放
}
}
if(UP0) //按键按下
{
delay1(2); //延时消抖
if(UP
0) //按键确实按下
{
while(!UP); //等待按键释放
Set_temp++; //设置的温度值加一
if(Set_temp100) //温度值到达100
{
Set_temp=0; //清零
}
}
}
if(DOWN
0) //按键按下
{
delay1(2); //延时消抖
if(DOWN==0) //按键确实按下
{
while(!DOWN); //等待按键释放
Set_temp–; //设置的温度值减一
if(Set_temp<0) //温度值小于0
{
Set_temp=99; //变为最大值
}
}
}
temperature_dispaly(0x40+13,Set_temp); //显示设置值到LCD
}
/检测各部分是否异常***********************/

void Check(void)
{
if(temperature>Set_temp) //如果实际温度值大于设置值
{
if((temperature>0)&(temperature<100)) //温度在正常范围内才报警
{
BEEP=1; //启动蜂鸣器
if(Alarm_flag==0) //警报标志位为1时发送温度报警信息
{
Send_Message3(); //发送温度过高报警短信
}
Alarm_flag=1; //标志位置一,表示短信已经发送,避免重复发送短信
}
}
if(temperature<=Set_temp) //正常情况
{
Alarm_flag=0; //清除标志位,下次温度超过继续发送短信一次
}

if(STEAL==0)				    //检测到人体
{
	BEEP=1;						//启动蜂鸣器
	if(Steal_Alarm==0)			//警报标志位为1时发送防盗报警信息
	{
		Send_Message2();
	}
	Steal_Alarm=1;				//标志位置一,表示短信已经发送,避免重复发送短信
}
if(STEAL==1)					//正常情况
{
	Steal_Alarm=0;				 //清除标志位,下次继续发送短信一次
}

if(SMOKE==0)				    //检测到可燃性气体
{
	BEEP=1;						//启动蜂鸣器
	if(Smoke_Alarm==0)			//警报标志位为1时发送烟雾报警信息
	{
		Send_Message1();
	}
	Smoke_Alarm=1;				//标志位置一,表示短信已经发送,避免重复发送短信
}
if(SMOKE==1)					//正常情况
{
	Smoke_Alarm=0;				 //清除标志位,下次温度超过继续发送短信一次
}

if((SMOKE==1)&&(temperature<=Set_temp)&&(STEAL==1)&&(HELP=1))
{
	BEEP=0;						 //关闭蜂鸣器
}

}
/GSM***********************/
void Sys_Init(void)
{
TMOD=0x21; //设置定时器1的工作方式为方式2
TH1=0xfd;
TL1=0xfd; //设置串行口波特率为9600
TR1=1; //开启定时器1
SCON=0x50; //设置串行口的工作方式为方式一,允许接收
PCON=0x00;
ES=1; //开串行口中断
EA=1; //开总中断
JDQ=1; //关闭继电器
BEEP=0; //关闭蜂鸣器
}
void Delay_0_5s(uint y) //延时1s
{
uint a;
for(a=0;a<10*y;a++) //20为1s
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(!TF0);
TF0=0;
}
}

void Send_Command(uchar Value[],uchar Len) //发送指令,Value[]表示发送哪个数组,Len表示发送该数组里的几位
{
uchar i;
for(i=0;i<Len;i++)
{
SBUF=Value[i];
while(!TI);
TI=0;
}
}

void GSM_Init(void) //GSM模块初始化
{
Send_Command(Command_ATE,5); //设置回显
delay1(1000);
Send_Command(Command_AT,3); //建立连接
delay1(10);
Send_Command(Command_AT_CMGF,10); //设置为text格式
delay1(2000);
Send_Command(Command_AT_CNMI,14); //设置为设置为中断方式接收短信,即接收短信后向下位机串口发送 +CMTI: “SM”,1 。
delay1(3000);
Send_Command(Command_AT_CLIP,10); //设置来电提示 RING +CLIP:
delay1(1000);
Send_Command(Command_AT_CRC,9); //设置来电提示 RING +CLIP:
delay1(1000);
Send_Command(Command_AT_IPR,12); //设置波特率=9600
delay1(1000);
}

void Read_Message(void)
{
if(NEW_SMS==1) //有新消息
{
if((UART0_Data[Len+13]>=0x30)&&(UART0_Data[Len+13]<=0x39)) //短信数第二位有数据,表示有二位数或三位数
{
if((UART0_Data[Len+14]>=0x30)&&(UART0_Data[Len+14]<=0x39)) //三位数 暂不处理
{

		}
		if((UART0_Data[Len+14]<0x30)||(UART0_Data[Len+14]>0x39))														//二位数 
		{		
			Command_AT_CMGR[8]=UART0_Data[Len+12];					//第一位为短信数十位
			delay1(10);
			Command_AT_CMGR[9]=UART0_Data[Len+13];					//第二位为短信数个位
			delay1(10);
			Command_AT_CMGD[8]=UART0_Data[Len+12];					//第一位为短信数十位
			delay1(10);
			Command_AT_CMGD[9]=UART0_Data[Len+13];					//第一位为短信数个位
			delay1(10);
		}
	}
	if((UART0_Data[Len+13]<0x30)||(UART0_Data[Len+13]>0x39))										   					//短信数第二位无数据,表示只有一位数
	{
		Command_AT_CMGR[8]=0x30;									//第一位为0
		delay1(10);
		Command_AT_CMGR[9]=UART0_Data[Len+12];						//第二位为短信数
		delay1(10);
		Command_AT_CMGD[8]=0x30;									//第一位为0
		delay1(10);
		Command_AT_CMGD[9]=UART0_Data[Len+12];						//第二位为短信数
		delay1(10);
	}		  
	Send_Command(Command_AT_CMGR,11);					//发送"AT+CMGR=?",读取第几条短信
	delay1(1000);			   							//延时
	UART0_Data[Len+13]=0x40;UART0_Data[Len+14]=0x40;
	UART0_Len=0;
	NEW_SMS=0;											//清除新消息提示标志
}														   
if(READ_SMS==1)											//读取消息
{
	if(((UART0_Data[Len+6]==OPEN[0])&&(UART0_Data[Len+7]==OPEN[1])&&(UART0_Data[Len+8]==OPEN[2])&&(UART0_Data[Len+9]==OPEN[3])&&(UART0_Data[Len+10]==OPEN[4])&&(UART0_Data[Len+11]==OPEN[5]))//移动
	  ||(UART0_Data[Len+3]==OPEN[0])&&(UART0_Data[Len+4]==OPEN[1])&&(UART0_Data[Len+5]==OPEN[2])&&(UART0_Data[Len+6]==OPEN[3])&&(UART0_Data[Len+7]==OPEN[4])&&(UART0_Data[Len+8]==OPEN[5]))//联通
	{	
		JDQ=0;								  	  //开启继电器
		Send_Command(Command_AT_CMGD,11);	  	  //删除短信
		delay1(1000);
		Send_Message();							  //发送到指定号码
		delay1(1000);							  //等待回复输入符号							  
		Send_Command(Command_Opened,13);		  //发送消息
		delay1(1000);
		Send_Command(Command_AT_End,1);			  //发送短信结束符
		delay1(2000);
	}
	if(((UART0_Data[Len+6]==CLOSE[0])&&(UART0_Data[Len+7]==CLOSE[1])&&(UART0_Data[Len+8]==CLOSE[2])&&(UART0_Data[Len+9]==CLOSE[3])&&(UART0_Data[Len+10]==CLOSE[4])&&(UART0_Data[Len+11]==CLOSE[5])&&(UART0_Data[Len+12]==CLOSE[6]))//移动
	  ||(UART0_Data[Len+3]==CLOSE[0])&&(UART0_Data[Len+4]==CLOSE[1])&&(UART0_Data[Len+5]==CLOSE[2])&&(UART0_Data[Len+6]==CLOSE[3])&&(UART0_Data[Len+7]==CLOSE[4])&&(UART0_Data[Len+8]==CLOSE[5])&&(UART0_Data[Len+9]==CLOSE[6]))//联通
	{
		JDQ=1;								  	  //关闭继电器
		Send_Command(Command_AT_CMGD,11);	  	  //删除短信
		delay1(1000);
		Send_Message();							  //发送到指定号码
		delay1(1000);							  //等待回复输入符号
		Send_Command(Command_Closed,13);		  //发送消息
		delay1(1000);
		Send_Command(Command_AT_End,1);			  //发送短信结束符
		delay1(2000);
	}
	UART0_Data[Len+13]=0x40;UART0_Data[Len+14]=0x40;
	UART0_Len=0;
	READ_SMS=0;
}
if(ATH==1)												//电话打入,需要判断是否为注册号码拨打,是则挂机和结束报警,否则直接挂机
{
	Send_Command(Command_ATH,4);						//发送挂机命令
	delay1(1000);
	Send_Message4();								    //发送当前温度
	ATH=0;
	UART0_Len=0;										//标志
}

}

void Send_Message(void) //发送到指定号码
{
Send_Command(Command_AT_CMGS,8); //发送指令
delay1(500);
Send_Command(Command_AT_YIN,1); //发送引号
delay1(100);
Send_Command(Command_AT_NUM,11); //发送号码
delay1(100);
Send_Command(Command_AT_YIN,1); //发送引号
delay1(100);
Send_Command(Command_AT_ENTER,1); //发送回车
delay1(100);
}
void Send_Message1(void) //发送警报浓度
{
Send_Message(); //发送到指定号码
delay1(1000); //等待回复输入符号
Send_Command(Command_Smoke,37); //发送烟雾报警信息
delay1(1000);
Send_Command(Command_AT_End,1); //发送短信结束符
delay1(100);
}

void Send_Message2(void) //发送入室盗贼短信息
{
Send_Message(); //发送到指定号码
delay1(1000); //等待回复输入符号
Send_Command(Command_Someone,33); //发送警报消息
delay1(1000);
Send_Command(Command_AT_End,1); //发送短信结束符
delay1(100);
}
void Send_Message3(void) //发送警报温度
{
Send_Message(); //发送到指定号码
delay1(1000); //等待回复输入符号
Send_Command(Command_AT_Tem,42); //发送温度
delay1(1000);
Send_Command(Command_AT_End,1); //发送短信结束符
delay1(100);
}
void Send_Message4(void) //发送当前温度
{
Send_Message(); //发送到指定号码
delay1(1000); //等待回复输入符号
Send_Command(Command_AT_Tem,4); //发送温度
delay1(500);
Send_Command(Command_AT_End,1); //发送短信结束符
delay1(100);
}
void Send_Message5(void) //发送求救信号
{
Send_Message(); //发送到指定号码
delay1(1000); //等待回复输入符号
Send_Command(Command_Help,35); //发送求救信息
delay1(1000);
Send_Command(Command_AT_End,1); //发送短信结束符
delay1(100);
}
/主程序***********************/

void main()
{
Sys_Init(); //单片机系统初始化
init(); //液晶屏初始化
Delay_0_5s(50); //等待模块初始化
temperature=readtemperature(); //读取实时温度
GSM_Init(); //模块初始化
Send_Command(Command_AT_CMGD1,11); //删除短信第一条短信息,腾出空间接收短信
delay1(500);
TH0=(65536-50000)/256; //50MS定时
TL0=(65536-50000)%256;
ET0=1; //允许T0中断
TR0=1; //开启定时器
LCD_Display_String(1,table1); //显示内容
LCD_Display_String(2,table2); //显示内容
Timer_Counter=50; //第一次直接进入温度读取
while(1)
{
if(Timer_Counter>=20) //每1s读取一次温度 20*50ms=1s
{
Timer_Counter=0; //清除
temperature=readtemperature(); //读取实时温度
}
temperature_dispaly(13,temperature); //显示温度到LCD1602
KEY(); //扫描按键程序
Check(); //检测传感器情况
Read_Message(); //读取短信内容
}
}
/定时器中断服务子程序 无需调用************************/

void Timer0() interrupt 1 //定时器T0中断函数
{
TH0=(65536-50000)/256; //赋初值=50ms
TL0=(65536-50000)%256; //TH0=3C,TL0=B0
Timer_Counter++;
}
/串口中断服务子程序 无需调用 有数据就直接进入************************/
void Serial() interrupt 4
{
RI=0; //接收完毕
UART0_Data[UART0_Len] = SBUF; //存入到对应数组

if(SBUF==0x2B)								//+号 表示有短信或者电话打入
{
	Len=UART0_Len;							//记录序号 
}
if((UART0_Data[Len+1]==0x43)&&(UART0_Data[Len+2]==0x4D)&&(UART0_Data[Len+3]==0x54)&&(UART0_Data[Len+4]==0x49))
{										    //接收到的内容是短信提示UART0_Data【】="+CMTI",比较前五位
	NEW_SMS=1;								//短信标志位置一
}
if((UART0_Data[Len+1]==0x43)&&(UART0_Data[Len+2]==0x4D)&&(UART0_Data[Len+3]==0x47)&&(UART0_Data[Len+4]==0x52))
{										    //接收到的内容是读取短信提示UART0_Data【】="+CMGR",比较前五位
	READ_SMS=1;								//读取短信标志位置一
}
if((UART0_Data[Len+1]==0x43)&&(UART0_Data[Len+2]==0x4C)&&(UART0_Data[Len+3]==0x49)&&(UART0_Data[Len+4]==0x50)&&(UART0_Data[Len+5]==0x3A))
{											//接收到的内容是电话提示UART0_Data【】="+CLIP:",比较前6位
	ATH=1;									//挂机标志位置一
}
				
UART0_Len++;								//序号递增	 

}

致 谢

为期几个月的毕业设计结束了,在这段时间的设计和学习过程中,我得到了很多人的帮助,学到了很多东西。
在此首先我要感谢谢莹老师以及冯雅丽老师,是你们的细心指导和关怀,使我能够顺利的完成毕业设计及论文。在我的学业和论文的研究工作中无不倾注着老师们辛勤的汗水和心血。老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的导师谢莹老师以及冯雅丽老师致以最衷心的感谢和深深地敬意。
在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法使得我们对所学知识有了更深层的理解,所以在这里非常感谢帮助我的同学。
最后感谢我的系主任和我的导员以及我的学院,是你们给了我这次学以致用的机会,将大学所学知识集中的体现在毕业设计中,我的毕业设计正是依靠于各位老师领导以及学校共同支撑的平台,才有了本次展示自我的机会,感谢老师,感谢智能工程学院,感谢沈阳城市学院。

  • 53
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于单片机STM32和ESP8266的智能家居安防OneNet物联网设计的运行环境可以分为硬件环境和软件环境两个方面。 硬件环境: 1. STM32单片机:作为主控芯片,负责控制和管理整个系统。 2. ESP8266模块:作为无线通信模块,提供与OneNet平台进行通信的能力。 3. 传感器:智能家居安防系统需要使用各种传感器来感知环境,比如温湿度传感器、光照传感器、烟雾传感器等。 4. 执行器:智能家居安防系统需要使用执行器来实现各种功能,比如门锁驱动器、电机驱动器等。 5. 电源供应:智能家居安防系统需要提供稳定的电源供应,可以使用电池或外部电源适配器等。 软件环境: 1. 嵌入式操作系统:可以选择适合的嵌入式操作系统,如FreeRTOS、uC/OS等,用于管理任务、调度和资源。 2. 开发工具链:使用STM32和ESP8266进行开发时,可以选择相应的开发工具链,如Keil MDK、IAR Embedded Workbench等。 3. 驱动程序:需要编写相应的驱动程序,与STM32单片机和ESP8266模块进行通信和控制。 4. 物联网协议:可以选择OneNet平台支持的物联网协议,如MQTT或HTTP等,用于与OneNet平台进行数据交互。 5. 应用程序:智能家居安防系统需要编写应用程序,实现各种功能,如传感器数据采集、执行器控制、数据上传到OneNet平台等。 以上是基于单片机STM32和ESP8266的智能家居安防OneNet物联网设计的一般运行环境,具体的运行环境还需要根据实际需求和系统设计来确定。同时,需要注意硬件和软件的兼容性与稳定性,确保系统能够正常运行和可靠性地与OneNet平台进行通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值