基于ZigBee技术的智能防火检测与门禁一体预警系统-大作业 挑战杯 互联网+ 大创

本文描述了一个智能家居系统的设计,该系统通过温湿度、烟雾和光照传感器监测火情和室内环境,使用Zigbee网络传输数据到协调器,进一步连接到PC/网关设备。在火警情况下,系统能自动控制喷水、门禁和通风设备,并通过微信通知用户。数据库用于记录正常情况下的环境数据,而服务器端则负责判断异常并触发报警机制。
摘要由CSDN通过智能技术生成
  • 需求分析

在不发生火灾时对室内湿度进行记录,与RFID读写记录等一同存入云端。

在发生火灾时进行相应灭火、阻止火势传播的操作,解除门控方便救火,并通过微信通知用户。

  • 设备选择

光照传感器,温湿度传感,烟雾传感器,RFID读写器,电机,zigbee模块,网关设备。

  • 设计方案

 

2b20740c370b423c8d291c139b1b0eb9.png

 

 

图 1  总体设计

该系统主要分为3大部分,分别是火情/温度检测,喷水控制部分、门禁控制部分、通风控制部分、数据处理部分。

 

  1. 工作原理

(1)、火情/温度检测部分:喷水控制部分由相应电机控制,温湿度传感器,光照传感器和烟雾传感器组成,同时这几台设备的将配备有相应的zigbee模块,并且都作为终端(Zigbee

Enddevice)来进行信息传输。信息将通过zigbee网络传输

(2)、门禁控制部分:由门禁控制装置(电机控制)、RFID接收器组成两者都将使用相应的zigbee模块,并且都作为终端(ZigbeeEnddevice)来进行信息传输。信息同样将通过zigbee网络传输

(3)、通风控制部分:由多个控制通风的电机模块组成,相应的设备同样配备zigbee模块,并且都作为终端(ZigbeeEnddevice)来进行信息传输。信息将通过zigbee网络传输

(4)、Zigbee网络部分:以上的部分的模块都有相应的zigbee终端模块,为了保证相关信息传输的安全性,和可行性,在zigbee网络中各部分向协调器(Zigbee Coordinator)发送信息的路径上可添加路由器Zigbee Router(可选)以保证信号可传达至后端。最终,所有的zigbee终端都将连入协调器并组成一个网络。协调器将通过串口通信连入PC/网关设备。

相应的串口通信代码如下

import serial



import serial.tools.list_ports as serials

import sys

import glob

#这个函数用于检测串口

def serial_ports():

    if sys.platform.startswith('win'):

        ports = ['COM%s' % (i + 1) for i in range(256)]

    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):

        # this excludes your current terminal "/dev/tty"

        ports = glob.glob('/dev/tty[A-Za-z]*')

    elif sys.platform.startswith('darwin'):

        ports = glob.glob('/dev/tty.*')

    else:

        raise EnvironmentError('Unsupported platform')

    result = []

    for port in ports:

        try:

            s = serial.Serial(port)

            s.close()

            result.append(port)

        except (OSError, serial.SerialException):

            pass

    return result

def connect(*args):  

    print(serial_ports())

    # 打开串口

    #serialPort="COM"+input("请输入串口号")

    serialPort = "COM6"  # 串口号

    baudRate = 9600  # 波特率

    ser = serial.Serial(serialPort, baudRate, timeout=0.5)

    print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))  # 输出串口号和波特率

    # 收发数据

    if(len(args)==1):

        ser.write((args[0] + '\n').encode())

        return

    #temp = ser.read(8)

    #temp = 'EECC0A0101000002A57D00000FFEE'

    if temp == b'':

        temp="0000000000000000000000000000"

    return temp  # 可以接收中文

    ser.close()

PC/网关设备通过程序相应的connect函数接收到串口信息后再由相应的客户端程序发送至服务器

程序如下:

from socket import *

from 串口通信 import connect

import time



HOST = '127.0.0.1'

PORT = 21567

BUFSIZ = 1024

ADDR=(HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)

tcpCliSock.connect(ADDR)

while True:

    time.sleep(1)

    data = connect()

    tcpCliSock.send(bytes(data,'utf-8'))

    data = tcpCliSock.recv(BUFSIZ)

    print(data.decode('utf-8'))

#tcpCliSock.close()

 

  1. 、服务器端部分。服务器端接收客户端发送的串口通信信息,经由相应的判断程序处理之后选择是否触发火灾异常,如有异常,通过第三方发送信息至微信通知用户紧急情况。如无异常存入数据库。

相应的代码如下:

服务端程序:

from socket import *

from time import ctime

# PORT can be changed as you need, but it should be notified to client

HOST ='127.0.0.1'

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST,PORT)

tcpSvrSock = socket(AF_INET,SOCK_STREAM)

tcpSvrSock.bind(ADDR)

tcpSvrSock.listen(5)

while True:

    print("Waiting for connection...")

    tcpCliSock,addr = tcpSvrSock.accept()

    print("...connected from", addr)

    while True:

        data = tcpCliSock.recv(BUFSIZ)

        if not data:

            break

        data = data.decode('utf-8')

        print(data)

        respMsg = "[%s] %s"% (ctime(), data)

        tcpCliSock.send(bytes(respMsg,'utf-8'))

    tcpCliSock.close()



tcpSvrSock.close()





数据库程序:

import mysql.connector

def mysql_insert(temper):

    # 建立连接

    cnx = mysql.connector.connect(user='root',

                                password='11248',

                                database = "IOT")



    # 创建游标

    cursor = cnx.cursor()

    # 执行插入

    query = f'insert temper(temper)value({temper})'

    cursor.execute(query)

    # 提交数据

    cnx.commit()

    # 关闭游标和连接

    cursor.close()

    cnx.close()

 

 

传入微信程序:

import requests



def sent_to_sever():

    keyurl = "https://sctapi.ftqq.com/SCT180092TVjQLw3FfQa3MTs4lEyNl2wfE.send"

    payload  = {'text':"发生火灾","desp":"","channel":9}

print(requests.post(keyurl,params=payload))
  1. 工作流程

d022fc087769404681180938e3d12fac.png

 

I、火情/温度检测部分无异常现象,相应的通风系统正常工作,门禁系统正常工作。温度检测数据通过zigbee网络传入网关再进入服务器进行记录,相应的RFID正常工作信息记录同样通过网络进行备份和处理。无通行权限的人无法进出。

II、火情/温度检测部分异常。经由判断程序判断相应的通风系统停止工作,门禁系统转变工作模式。温度检测数据通过zigbee网络传入网关再进入服务器进行记录,相应的RFID信息继续通过网络进行备份和处理。但是通行权限开放,方便他人逃生及进入火场救火。服务器端发送报警微信信息向用户警告。

 

 

 

 

 

 

六、验证方案

 

0fd35450f4f74c4ab9b914b2120425a6.png

 

 

图 2 验证方案

情况I、火情/温度检测部分无异常现象

模拟串口通信识别读取

 

将温度设为正常值

 

经由客户端发送

 

服务端接收成功

 

 

模拟服务器端将数据插入数据库中

 

成功插入

II、火情/温度检测部分异常。

模拟串口通信识别读取

 

将温度设为异常值

 

发送数据

 

接收数据

 

 

使用步进电机模拟

通过串口发送指令给相应的设备

 

发送微信通知

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值