1. 引言
2021年5月6日,杭州转塘疑似发现豹子事件的发生,直到2021年5月8日杭州动物园确认发生安全事件结束,金钱豹外逃的事实就已经确认。此次的事件所带来的社会恐慌是不小的,由此事件可以看出畜牧场、动物园等园区在面临着日益复杂的社会环境的情况下,通过使用传统的安全防护技术手段已经不足以实现安全防护的任务,并且传统的安全防护手段不仅需要大量的安全保卫力力量,防护效果也不尽如人意,金钱豹外逃事件就能够说明,传统的安防措施存在着反应速度慢、可靠性差等弊端。
近年来,在国外以Langworthy Adam D [1] 和Southwest Farm Press [2] 所发表和出版的文章为例,他们提出了一种电子围栏,这实际上是一种电力围栏,目的是为了限制和引导牧场中的动物在固定区域吃草,使其他区域的牧草正常生长,从而提升经济效益,其功能与本系统略有不同,本系统设立的目的是为了检测避开了其他安防手段的动物的动向,方便进行对动物的追踪。同样的,在国内以刘敬 [3] 和吴坤阳 [4] 等人所提出的虚拟电子围栏为例,其功能均与本系统的功能类似,但因应用领域不同,所以导致系统底层所采用的传感器也各不相同,刘敬的虚拟电子围栏基于摄像头进行,应用于工程施工现场或其他有可能坠落物体的区域,防止有人进入危险区域,而吴坤阳的虚拟电子围栏则是采用船舶AIS (船舶自动识别系统)以及海事VTS (船舶交通服务系统)等技术形成一种概念上的围栏,实现对船舶的安全监督工作。虽然在国内外暂未发现相同定位的设计方案,但这些定位于其他领域的类似应用仍然能够为本系统的设计提供一些参考意义。
基于当前社会对于畜牧场、动物园等园区的安全需求有待加强的考虑,文中提出并实现了一款虚拟电子围栏系统,可以从其根源上将其归类为智慧安防领域,这套系统能够检测避开了传统防护手段的动物,用于解决使用传统安全防护手段的畜牧场、动物园等园区所存在的无法实现24小时值守以及动物出逃后反应速度慢等问题,除此之外,本系统也可放置在家中,作为安防设备,对居室入侵进行预警和防范。
2. 系统总体设计
虚拟电子围栏系统以物联网系统四层架构中的下三层作为设计的总体框架,分别为感知层、传输层以及平台层,各层模块分布如表1系统各层模块分布表所示。
Table 1. System layer module distribution table
表1. 系统各层模块分布表
以表1中的系统总体框架为基础,本系统能够实现的功能为:
1) 实现对经过虚拟电子围栏物体的检测;
2) 在物体经过虚拟电子围栏时,使用蜂鸣器发出警报;
3) 当周围环境温度达到设置的阈值时,切换为雷达传感器进行检测;
4) 每间隔5s向云端上传一次节点数据;
5) 在数据上传成功后使蜂鸣器停止;
6) 云端实现对终端节点数据的接收、判别以及存储。
3. 系统硬件选型与设计
3.1. MCU选型
本系统定位于智慧安防领域,目的是为了在出现异常情况时,能够快速的将该情况上传至预警中心,做出一些防范措施。因此,在进行MCU的选型时,应当注意其功耗和体积等与应用场景密切相关的性能,以及其是否板载WIFI模块。
结合本系统MCU应当具有的性能要求,选出了两款MCU进行对比,分别是零知ESP32与零知ESP8266,其余品牌的ESP32与ESP8266因其性能大都相似并且体积也略大一些,故不作讨论。表2中结合零知官方公布的ESP32与ESP8266的相关参数进行了对比 [5]。
Table 2. ESP32 and ESP8266 related parameters comparison table
表2. ESP32与ESP8266相关参数对比表
结合表2所展示的参数,ESP32的大部分性能优于ESP8266,唯一的缺点是价格相比ESP8266略高一些,但是以本系统的应用场景来看,数据传输速度以及GPIO引脚数是系统所需要的,更多的GPIO引脚数能够支持更多的红外对射式开关传感器进行工作,而不需要重新设置一个模块。因此,本系统的MCU采用的是ESP32。
3.2. 红外传感器选型
本系统中红外传感器主要需要实现的功能就是能够检测到是否有物体经过,因此,红外对射式开关传感器更加适合本系统,其内部的主要器件为热释电红外传感器。这种传感器相比于其他类似功能的红外传感器,功能单一、结构简单、功耗低以及价格低廉,其感应距离能够达到1 m至1.2 m,工作电压的要求为直流4.5 V至5.5 V,价格在5元左右,但其唯一的缺点就是在距离固定的情况下容易受到光源以及热源的影响。红外对射式开关传感器外形结构如图1所示,它拥有一个发射端和一个接收端,由发射端发出红外光束,接收端接收到红外光束时,输出端输出低电平,当有物体经过,未接收到红外光束时,输出端输出高电平。
Figure 1. Infrared light switch sensor
图1. 红外对射式开关传感器
3.3. 温度传感器选型
在红外传感器选型中介绍了红外对射式开关 [6] 的主要器件是热释电红外传感器,但这种传感器容易受到光源、热源以及距离的影响。在光源较强的情况下,该传感器会失效,即使在理想光源以及固定距离的情况下,红外热释电传感器输出电压与温度呈线性关系 [7],环境温度与经过物体温度相似时,传感器会短暂失效。因此,需要考虑在特殊情况下红外对射式开关会失效的情况,所以系统在设计过程中加入了雷达传感器与温度传感器,保证系统能够在红外对射式开关失效的情况下使用雷达传感器继续工作。
温度传感器应当满足低功耗、高可靠性的特点,在这里选出了两款温度传感器并结合其公布的参数进行了对比,如表3所示,分别是DHT11以及LMT70两种常见温度传感器。
Table 3. DHT11 and LMT70 temperature sensor performance comparison
表3. DHT11与LMT70温度传感器性能对比
结合上面的参数对比,这两款温度传感器的参数比较上较为明显,但需要注意的是,DHT11温度传感器不能长时间暴露在太阳光下或强烈的紫外线辐射中,长时间的暴晒会使性能降低 [8],这一点缺点不符合本系统在动物园等园区的应用时的要求,而LMT70的限制则相对要小,因此在本系统中,温度传感器采用的是LMT70。
但LMT70温度传感器不具有DHT11所具有的数字输出功能,因此需要对LMT70温度传感器所输出的模拟电压值利用温度转换公式进行换算。
3.4. 雷达传感器选型
雷达传感器选用的是HLK-LD116-24G毫米波雷达传感器,这是一款定位于安防、智能家居等领域的小型化雷达传感器,它的工作频率为24G~24.25 GHz,在5 V供电的情况下,功耗为55 mA,并且其不受温度、噪声、光暗等影响,抗干扰性强,这些特性均能够满足系统的要求。其他的雷达模块价格相对较贵,并且大多数的雷达模块定位的应用领域于本系统所应用的领域不同,故不展开深入讨论。
雷达传感器的优点较为突出,它的扫描范围呈现以该模块为顶点的圆锥,在保证雷达模块的准确性的情况下,并且该圆锥可高达3 m,直径达6 m,但是其缺点也是明显的,首先雷达模块的安装必须要相对稳定,如果发生抖动,则扫描范围内的物体发生相对移动,容易使雷达模块产生误识别,其次,雷达模块对于其扫描范围内的运动物体也有要求,当物体与雷达扫描区域发生切向移动时,容易判断失灵,正向移动则正常,如图2所示。
Figure 2. Forward and tangential movement diagrams
图2. 正向移动与切向移动图示
因此,结合雷达传感器的特点,它只能作为本系统的备用计划存在,当红外对射式开关发生故障时,由雷达传感器代替检测。
3.5. 接线设计
本系统中需要使用的传感器过多,因此,为了防止过载的情况,本系统中加入了一个电源模块,该模块可以使用一块12 V的锂电池供电,并产生15路5 V以及3.3 V的输出。
在进行接线的过程中,需要考虑到ESP32引脚复用的问题,将蜂鸣器以及红外对射开关接在ESP32的普通GPIO引脚上,留出其他复用了ADC、串口、定时器等功能的引脚,方便其他复杂扩展模块的接入。
系统具体接线设计如图3所示。
4. 系统软件设计
4.1. 驱动程序设计
驱动的开发完全采用库函数进行,避免了大量的底层驱动的编写,大大缩短了功能开发的时间成本。
为了保证低功耗,应当在软件层面上在保证功能可靠的同时降低芯片对各个外设的读取频率,并控制数据上传的时间间隔 [9]。
对经过物体的检测使用红外传感器实现,此种传感器的数据引脚会有高低电平的变化,因此只需要读取相关GPIO口即可实现控制,但为了防止电流毛刺引起的高电平,程序中加入了防误触机制,只有在同一时刻连续触发5次以上,才会引起蜂鸣器的鸣叫,提示有异常情况的发生。
系统的预警功能通过蜂鸣器实现,具体的控制采用与其连接的GPIO引脚,当有异常情况时,会控制引脚输出高电平,发出预警,只有当数据发送函数将此次异常状态成功发送,才会将蜂鸣器复原。
数据发送函数使用软件定时器进行控制,时间间隔为5s,该函数在成功或者失败的发送了一次数据后,会更改数据发送状态变量的值,在该变量被置位的情况下,表示数据发送失败,预警功能中蜂鸣器的鸣叫由该变量进行控制。数据发送函数的定时器定义如下:
tickerSendMessage.attach_ms(5000, send_message,0);
LMT70的输出信号为模拟电压值,在使用ADC模块采集了模拟电压值之后,需要使用LMT70数据手册中给出的公式进行温度换算。在进行数据采集的实现过程中,采用了三阶温度换算公式:
其中,a = −1.809628E−09,b = −3.325395E−06,c = −1.814103E−01,d = 2.055894E+02。
对于LMT70温度传感器的数据采集为5s一次,其定时器的定义如下:
tickerCollectTemperature.attach_ms(5000,collect_temperature,0);
最终程序能够实现的功能如下
1) 能够检测是否有物体经过;
2) 读取LMT70输出的模拟电压,并转换为实际温度值;
3) 实现在不同温度下使用不同的传感器进行检测;
4) 每5s发送一次节点数据。
驱动程序流程图如图4所示。
4.2. 数据发送函数设计
数据发送函数作为系统的数据上报模块,应当保证采用的数据的格式充分的简单和清晰,并且方便提取数据,基于这一点考虑,在进行数据封装时采用了JSON格式,JSON格式是一种轻量级的数据交换格式,它的结构清晰,并且独立于编程语言,即使用其他的编程语言也能够进行数据的解析,这对于本系统的云端平台来说是必要的。
系统的通信协议选择的是TCP协议,在目前的阶段相较于MQTT协议更加简洁,方便设计初期的测试工作,如果采用大量的节点进行测试,可以使用MQTT协议。
函数中封装的数据结构如下:
typedef struct sensorData {
String UID; //设备编号
int STATUS; //电子围栏的入侵状态
int TEMPERATURE; //温度
}SensorData;
在进行具体的实现过程中,采用了第三方库ArduinoJson,能够直接实现将本地数据打包成JSON数据格式的过程。
本系统的应用场景中所存在的不确定因数较多,在数据发送的过程需要考虑到来自各种环境因数的影响,例如网络波动、断网等,因此在程序设计的过程中需要加入异常捕获机制,避免因为网络问题导致的系统崩溃。在数据进行发送前检测与服务器的连接状态,可以确保数据的成功发送,具体如下:
if(connect_status == 0){
if (!client.connect(host, Port)){
connect_status = 0;
return;
}
}
4.3. 基于Python与TCP协议的数据接收与存储云平台设计
该平台设计的核心是对来自终端节点的数据的接收、处理以及存储。
平台的实现采用了第三方库json以及pymysql,通过这两个库,能够实现对JSON数据的解码、键值对的提取以及MySQL数据库的访问。
在平台的设计过程中加入了数据接收的异常捕获机制、数据过滤模块、设备身份识别模块、数据存储模块等,实现了对数据的接收、过滤以及存储。
其中数据过滤模块的主要目的是为了防止非法数据的大量传入而导致大量的预警信息的产出,主要是通过UID所划分的范围以及UID中所携带的校验字段实现。
该平台基于Python进行开发,工作在Linux系统上,它最终能够实现的功能如下:
1) 实现对数据的接收;
2) 实现对JSON数据的解析,并将非法数据丢弃;
3) 提取JSON数据中相关数据并存入MySQL数据库。
因代码量较大,这里只对其工作流程进行展示,如图5所示。
4.4. 数据库设计
本系统的数据库编码采用UTF-8,排序规则采用utf8_general_ci。
为了保证终端节点在故障之后能够发现其故障时间,以及意外情况发生时的发生时间,在进行数据表的设计时,加入了日期和时间,方便对历史数据的查看。具体表结构如表4所示(UID为设备识别号)。
本系统在安装过程中,通常会在一个固定的位置,因此客户端可以在异常情况发生时,根据设备的UID号来判断异常发生的地点。
5. 系统测试
5.1. 正常测试
正常情况下,室温5℃,下午17点,正常亮度,红外光电开关间隔1 m。
在正常情况下,系统测试实验一共进行了30次,没有出现过误识别。表5中的数据是由30次实验结果中抽取的,图6为云端数据库中所接收到的数据,每5 s一次,其中第四列为入侵状态(0表示入侵,1表示正常),第五列为温度。
Figure 6. Data received in the cloud database
图6. 云端数据库中所接收的数据
5.2. 特殊情况测试
系统的应用场景所面对的主要变量为光照以及温度,因此在特殊情况中只对光照以及温度两个变量进行测试 [10]。
Table 6. Test results when changing the intensity of the light
表6. 改变光照强度时的测试结果
系统在光照改变的情况下进行了若干次实验,这里截取了如表6所示的结果。在第1次实验中,手电被置于系统上方1 m处,系统能够正常识别入侵。在第5次实验中,手电筒被贴在红外光电开关的发射端,此时发射端周边受光影响,全部变白,红外对射式开关发生误识别,但此种情况较为极端,多半为人的主观行为。
Table 7. Test results when the temperature is changed
表7. 改变温度时的测试结果
如表7所示,在改变温度的情况下(只是加热了温度传感器),截取了温度上升过程中的5次测试结果,在第1次实验中,温度为25℃,红外对射式开关能够正常识别入侵。在第4次实验中,温度为32℃,雷达模块能够正常识别入侵。
5.3. 测试总结
通过正常测试和特殊情况的测试结果来看:
1) 本系统在正常情况下具有良好的可靠性,在一些较为特殊的情况下也能够正常工作。
2) 当光照强度过高时,可以考虑加入光照传感器,设定阈值然后使用雷达传感器进行识别,但测试中所出现的极端情况在实际应用过程中出现几率较小。
3) 在温度测试中,虽然没有改变环境温度,但最终结果均是切换为雷达模块进行识别,从测试结果来看,在保证雷达模块位置固定的情况下,检测结果准确。
6. 结语
本系统采用ESP32作为主控芯片,使用红外对射式开关检测到是否有物体经过,并使用雷达传感器在红外对射式开关失效的情况下继续工作,保证系统的可靠性。整个系统的需求和功能均在文中做出了详尽的分析和规划,并对系统所需要的器件进行了对比选型。在完成整个系统的设计后,进行了完整的性能测试。经过实际验证,文中所设计的基于ESP32的虚拟电子围栏系统完成了最初的预期效果,能够在大多数情况下正常工作。针对系统中仍然存在的不足,在文中也提出了一些供参考的方案用来改进,使得系统能够适应各种应用场景。相信智慧安防的相关产品在未来会在各种可能出现的安全问题中起到重要的作用。
NOTES
*通讯作者。