基于Intel Galileo的仓库环境监测系统设计与实现
物联网工程 201110418 邱林生
指导教师 杜永文(副教授)
摘 要:本文首先具体地介绍了仓库环境监测系统使用的相关技术,然后从一个整体的角度概述了仓库环境监测系统的结构设计、功能设计以及实现功能所要用到的技术。接着将系统分成五个模块,分别是数据采集模块、数据传输模块、报警模块、前端显示模块和Galileo可移植模块,并详细描述了具体的模块设计过程,模块设计包括了上位机软件设计和下位机软件设计。最后,简单的介绍了系统的调试和出错时的解决办法。仓库环境监测系统最终实现了实时采集环境数据和视频图像数据,当环境数据异常时,能够及时准确地报警。系统提供了上位机软件,为用户提供了人机交互界面,使用户能够直观地了解仓库的实时环境信息。
关键词:仓库,环境监测,Galileo,Qt
1 绪论
1.1 课题研究背景
仓库的仓储作为物流系统的重要环节,承担着存储、管理、和调配等任务,要保证货物的安全就必须做到防火,防盗等。目前,仓库的环境参数较多的是采用人工监测,人工监测不仅耗费人力资源,同时由于人的疏忽,时常会出现差错。
因此,仓库的智能化监测就显得非常有必要了,使用Intel Galileo Gen2对仓库环境进行实时监测,及时准确地掌握仓库的环境,能为货物的仓储提供一个可靠地安全保证。
仓库的环境安全因素最主要是防火和防盗。2015年1月2日13时14分,位于黑龙江省哈尔滨市某大市场的三层仓库起火,失火面积1.1万平方米。发生火灾的仓库位于一栋总层高11层的居明楼,其中1-3层为仓库。火灾扑救过程中,起火建筑多次坍塌,造成5名消防员遇难、14人受伤。2014年12月13日,北京市公安局某分局接到一物流仓库报案,称被盗240部“苹果6”手机,估算价值约140万元。这两起关于仓库的案例警示人们仓库的防火和防盗至关重要,一旦发生事故,损失惨重。那么如何提高仓库的安全性,减少仓库事故的发生或者是降低事故造成的损失呢?这就是本课题研究的内容,将会在下一节里介绍。
1.2 课题研究内容
仓库做好防火防盗不仅需要加强安全管理,同时也要使用监测系统来实时获取仓库环境参数,当事故发生时以做出应急反应。基于英特尔Galileo Gen2的仓库环境监测系统能够实时监测仓库的温湿度、烟雾以及人体红外参数,当参数异常时,仓库管理人员回收到报警通知,当盗窃者闯入仓库时,摄像头会采集到盗窃者的图像信息,同时会通知管理员。
本文主要研究的内容是Intel Galileo的使用以及如何将其应用在仓库环境监测,Intel Galileo是一款比较新鲜的开发板,开发者要使用它做开发具有一定的难度。很大一方面是因为关于这一开发板的资料书籍少之又少,开发者只能从Intel官网和相关论坛找到相关资料。另一方面,Intel使用的一些新开发的技术是开发者以往没有学习过的,所以开发者需要进行相关学习才能做相应的开发。研究Intel Galileo是具有一定的创新性的,因为目前为止,还没有开发者应用这一开发板做仓库环境监测开发。使用这一开发板也具有一定优势,Galileo具有非常强大的兼容性,它不仅能运行Linux操作系统,同时还支持Windows和Mac OS,这一特性是其他类型的开发板无法比拟的。Galileo使用的Quark处理器是400MHz、32位的Intel奔腾处理器,它的计算和处理能力是非常强大的。
1.3 文章结构
本文总共分为六章,第一章为绪论。第二章将详细地介绍Intel Galileo,包括Galileo的硬件资源,Galileo的特性以及它的使用方法。第三章从一个总体的角度介绍仓库环境监测系统的设计,首先做了需求分析,接着描述了系统的结构,介绍了使用的技术,最后分析了系统的功能设计。第四章在第三章的基础上进一步详细介绍了系统的实现,将系统分成五大模块一一介绍。第五章主要是介绍系统出错时的故障分析以及解决办法。第六章是最后一章,这一章将总结在毕业设计过程中遇到的困难和解决过程,分享毕设的收获。
2 相关技术介绍
2.1 Intel Galileo
英特尔Galileo 第二代开发板是基于英特尔Quark SoC X1000应用处理器的微控制器板,它也是一个32位英特尔奔腾品牌的SoC。它是第一款基于英特尔架构的嵌入式开发板。嵌入式系统具有软硬件可裁剪,低功耗,低成本,体积小和可靠性高的特点,广泛应用在工业控制,通信领域,甚至国防等领域。
下面将结合作者学习Intel Galileo的总结介绍这款开发板。
2.1.1 Intel Galileo的发展
在嵌入式领域,基于英国ARM公司的ARM处理器架构基本上占领了整个市场,大部分嵌入式系统使用的处理器都是ARM架构的。ARM架构,也即精简指令集机器(Advanced RISC Machine),广泛地使用在嵌入式系统设计中。ARM处理器出现在各种电子产品上,例如手机、平板电脑、路由器等。X86架构是Intel公司的处理器架构,属于复杂指令集,基于X86架构的处理器多用于PC上,由于这种处理器的功耗比较大,不能满足嵌入式系统的要求,所以在嵌入式领域很少看见它的身影。Intel Galileo的出现大大方便了开发者,使得他们可以使用基于X86架构的处理器做嵌入式开发。Intel Galileo开发板支持Windows操作系统,这也给爱好Windows系统的开发者带来了福音。
目前,Intel Galileo已经出了第二代产品,该仓库环境监测系统使用的是最新的Gen2。Galileo Gen2与上一代相比拥有更大的尺寸,以及看起来更加复杂的电路实现。在第一代产品中,为了能够让Galileo连接外部设备,用户必须准备一条micro-usb转USB母座的线,也即USB OTG数据线来完成该功能。而在Gen2中,标准的USB母座直接设计在了PCB上,这给开发者带来了很大的便利。Gen1使用的是音频接口的RS232串口,在Gen2中,串口使用的是TTL电平规范,因此可以通过杜邦线与USB串口设备连接。表1.1对比了一代和二代产品之间的差别。
表1.1 Galileo Gen2与上一代产品之间的对比
项目 |
Galileo Gen2 |
上一代Galileo |
GPIO实现 |
从Quark处理器芯片直接引出 |
通过外部IO扩展芯片并经过I²C实现 |
PWM精度 |
12位,通过芯片PCA9685经过I²C实现 |
8位,通过外部IO扩展芯片CY8C9540A并经过I²C实现 |
以太网供电 |
支持 |
不支持 |
供电范围 |
7V至15V |
5V |
串口 |
调试串口可以通过软件在#2,#3Arduino接口接出 |
不支持 |
2.1.2 Galileo的硬件
Intel的Galileo开发板基于Quark SoC X1000应用处理器,是一款32位Intel奔腾级片上系统。这是第一款基于Intel架构的开发板。Galileo设计用于支持在3.3V或5V电压下工作的防护卡。Galileo的内核工作电压为3.3V。板上的跳线可将IO引脚处于的电压转换为5V。以下为其硬件特性:
•与指令集架构(ISA)兼容的400MHz、32位Intel奔腾处理器
•16KB片上缓存
•512KB片上嵌入式SRAM
•编程简单:单线程、单核、恒速
•支持ACPI兼容的CPU睡眠状态
•集成实时时钟(RTC)带有可选的3V纽扣电池,用于打开循环之间的操作
•10/100以太网连接器
•USB2.0主机连接器
•支持多达128个USB端点设备
•用于编程的USB器件连接器
•调试用10引脚标准JTAG接头
•可重启处理器的重启按钮
•可重置草图板和其他附加防护卡的重置按钮
•存储选项:默认传统8MB SPI闪存,主要用途是为了存储固件(Bootloader)和最新的草图。介于256KB与512KB之间专用于草图存储,无需操作便可自动从开发电脑上进行下载,除非需要对固件进行升级。默认512KB嵌入式SRAM,默认由固件启动。无需进行操作便可使用该功能。默认256MB DRAM,默认由固件启动。可选微型SD卡具有高达32GB的存储容量。USB存储配合可与USB2.0兼容的驱动器使用。可通过EEPROM库对11KB EEPROM编程。
2.1.3 Galileo的特性
Intel提供一个类似于Arduino的桌面IDE,在集成开发环境的开发板菜单中,我们可以看到在“Arduino X86”选项下面增加了“Galileo”。这个改进的集成开发环境同时还能升级开发板的固件。使用Galileo的以太网端口是非常简单的,我们不需要做任何更改就可以获得一个HTTP连接。大多数Linux开发板依靠网络连接来获得当前的日期和时间,但是Galileo上板载了RTC(实时时钟),所以我们能够查询和更新时间即使关闭了电源。我们需要做的只是给开发板装上一颗3V的纽扣电池。开发板的底部有一个使用外部控制器接口的扩展插槽,这意味着我们可以连接WIFI,蓝牙,GSM模块,甚至可以外接更大的存储器。当连接WIFI模块时,Galileo将调用Arduino的WIFI库。Galileo专用的USB活跃端口允许我们调用Arduino USB主机库为其他主机充当鼠标或键盘。如果我们想存储更多的数据,那么可以使用microSD卡,Galileo会自动调用Arduino的SD卡库。在Galileo的8MB闪存空间里已经有一个轻量级的Linux操作系统。如果我们想使用ALSA(音频工具),V4L2(视频输出工具),Python,SSH,node.js(网页开发),和openCV(计算机视觉工具)等工具,那么就需要使用Intel公司提供的SD卡启动镜像来启动Galileo。
2.1.4 Galileo的使用方法
仓库环境监测系统没有使用Galileo的裸机开发,在Galileo里面运行了一个轻量级的Linux操作系统。下面将介绍如何如何让Galileo运行Linux操作系统。
连线
1)准备一根USB to Serial Cable的数据线

图2.1 USB to Serial Cable数据线
连接数据线和电源线

图2.2 Galileo的连接
2)准备要启动的镜像
启动开发板上的镜像
如果不插入SD卡则启动开发板SPI Flash上自带的Linux系统镜像。自带的镜像支持的驱动少,也不带有OpenCV,Python和node.js。
启动SD卡上的镜像
从链接地址http://downloadmirror.intel.com/24355/eng/SDCard.1.0.4.tar.bz2?_ga=1.186448874.2112206936.1387397931下载官方的Linux镜像。然后解压镜像,解压的内容在“image-full-galileo”文件夹里。文件如图2.3所示:
图2.3 解压内容
将这些文件复制到SD卡的根目录。然后插入SD卡,开发板启动时会先检测SD卡。
3)使用串口登录操作系统
用putty工具进入Linux,波特率选择115200。
图2.4 putty登录系统
点击open后弹出系统登录界面:
图2.5 系统登入界面
输入用户名root,进入系统。
4)用网络登录操作系统
首先把网线插入网口。开发板本身的Linux系统虽然可以联网,但是没有安装SSH,所以不能用SSH登入。而SD卡的Linux系统可以自动联网并安装了SSH,所以可以用SSH登入。·
要使用SSH登录系统必须获得开发板的IP地址,下面介绍三种获取IP地址的方法。
从串口终端得到IP地址
#ifconfig
图2.6 终端获取IP地址
在Linux下用nmap得到IP地址
nmap可以探测局域网中其他主机的IP地址
#nmap -sP 192.168.0.1-154
图2.7 nmap获取IP地址
从结果中可以看出Galileo的IP地址是192.168.0.109。
在Windows环境下用PortScan得到IP地址
图2.8 用PortScan获取IP地址
5)配置SSH
在串口终端中配置:
#vi /etc/ssh/ssh_config
确保下列行前面没有#号:
Host *
ForwardAgent yes
ForwardX11 yes
Port 22
Protocol 2,1
PermitRootLogin yes
#vi /etc/ssh/sshd_config
确保下列行前面没有#号:
Port 22
Protocol 2
PermitRootLogin yes
PermitEmptyPasswords yes
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePrivilegeSeparation yes
Compression no
ClientAliveInterval 15
ClientAliveCountMax 4
Subsystem sftp /usr/lib/openssh/sftp-server
6)用SSH登录
图2.9 用SSH登录系统
点击open后弹出登录界面:

图2.10 登录界面
7)计算机与Galileo开发板的文件传输
在计算机上安装TFTP服务器
在终端上输入:yum install xinetd tftp tftp-server
配置TFTP
在终端上分别输入:
mkdir /tftpboot
chmod 777 -R /tftpboot/
配置文件
在终端上输入:vi /etc/xinetd.d/tftp
内容如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
重新启动服务
在终端上输入:service xinetd restart
在串口终端上把计算机文件下载到Galileo开发板上
把要下载到Galileo开发板的文件放在/tftpboot目录上。
在串口终端上输入下列格式的命令:
tftp -g -l [文件名] [计算机IP地址]
如:
tftp -g -l Hello.c 192.168.0.102
2.2 Qt
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP。
Qt提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能,而且很容易扩展,并且允许真正地组件编程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。
Qt具有以下的优点:
1)优良的跨平台特性
Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。
2)面向对象
Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。
3)丰富的 API
Qt 包括多达 250 个以上的 C++ 类,还提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。支持 2D/3D 图形渲染,支持 OpenGL大量的开发文档XML 支持。
3 仓库环境监测系统总体设计
本章分为四节,首先分析了仓库环境监测系统的需求,包括功能需求、硬件需求和软件需求。接着概括地阐述了系统的整体结构,并分析了其技术实现,最后描述了系统的功能设计。
3.1 仓库环境监测系统的需求
该小节讲述了仓库环境监测系统的功能需求、硬件需求和软件需求。
3.1.1 仓库环境监测系统的功能需求
传统的仓库环境监测,一般依赖于一个非自动化的、以人力为基础的系统来监测仓库环境,因此效率极其低下。
随着计算机的应用普及,目前大多数仓库的环境监测开始采用计算机辅助监测,但是其可移植性和便携性不高,这给仓库环境监测系统的普及带来了不便。
随着嵌入式技术的不断发展,计算机的功能被集成到更小的模块中,这些模块不仅能完成计算机所能完成的任务,同时又体积小,功耗低,成本低,所以说,使用嵌入式开发仓库环境监测系统是一个不错的选择。
仓库最容易发生的事故就是火灾或盗窃,这两类事故都会带来巨大的经济损失,仓库管理者一方面要加强仓库管理,防患于未然,另一方面也要制订应急措施,防微杜渐。做到防患于未然,就需要时刻监测那些会引起事故的因素。对于仓库而言,易燃的化学制剂和可燃气体是火灾发生的因素,所以仓库环境监测系统需要重点监测。仓库发生盗窃事故,最主要就是因为仓库的安防措施做得不到位,如果仓库能实时采集到现场的图像,并且当有人擅自闯入时能够截取其图像信息,那么仓库的管理人员就可以迅速采取措施,避免造成损失。要做到防微杜渐,就要求仓库管理人员能够迅速对事故采集紧急措施。当事故已经发生时,损失已经无法避免,但可以采取措施将损失降低至最低。一方面,需要有及时的报警系统,另一方面管理人员接到报警后要作出应急措施。作为仓库环境监测系统,最主要的就是要提供实时数据采集和及时报警功能。
3.1.2 仓库环境监测系统的硬件需求
前面已经提到,仓库环境监测系统要提供实时数据采集和及时报警功能。要监测火灾,如前面所说,可燃气体是火灾发生的因素,所以需要有传感器去采集可燃气体的浓度。MQ-2是使用较多的测量可燃气体浓度的传感器,可用于家庭和工厂的气体泄漏监测装置,适宜于液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等的探测。MQ-2具有广泛地探测范围,高灵敏度,快速响应恢复,优异的稳定性,寿命长,简单的驱动电路等特点。
只依靠MQ-2来预警火灾还是不够的,DHT11是一种测量温湿度的传感器。它应用专用的数字模块采集技术和温湿度传感技术,具有极高的可靠性与卓越的长期稳定性,超小的体积和极低的功耗使其成为各类应用甚至最为苛刻的应用场合的最佳选择。
预警盗窃事故需要一种能够感知是否有人靠近的传感器,热释电人体红外传感器就是这样一种传感器,它能自动感应,当有人进入其感应范围则输入高电平,人离开感应范围则自动延时关闭高电平,输出低电平。这种传感器常和其他元器件构成热释电红外开关,这种开关能自动快速开启各类白炽灯、荧光灯、蜂鸣器、自动门、电风扇等装置,是一种高技产品。特别适用于安全区域的自动灯光、照明和报警系统。在仓库环境监测系统中,人体红外传感器是和摄像头配合工作的,当传感器感知到有人靠近时,摄像头会采集到闯入者的图像信息。
考虑到系统数据的实时性,当采集完数据后需要及时传输和处理,由此系统使用ZigBee套件作为数据传输模块。ZigBee是基于IEEE802.15.4标准的低功耗局域网协议。ZigBee技术是一种短距离、低功耗的无线通信技术。其特点是近距离、低复杂度、自组织、低功耗、低数据率。主要适合用于自动控制和远程控制领域。
当事故发生时,应当及时的报警,报警方式应该是一种容易被接收者察觉的,当下,几乎人手一部移动终端,也就是人们熟悉的手机,采用短信或者电话报警不仅容易被接收者察觉,同时可以实现远程报警。SIM900是一种能接受发短信,能拨打和接听电话的通信模块,将SIM卡插入SIM900模块,然后通上电就能实现短信和通话的功能,另外,通过AT指令编程控制SIM900通信也是比较成熟的技术,在仓库环境监测系统中使用SIM900作为报警模块是一个不错的选择。系统的设计是在PC机上完成的,当调试完成后就能够移植到Galileo模块上,第二章已经对Galileo进行了比较详细的介绍,这里就不再赘述了。
3.1.3 仓库环境监测系统的软件需求
嵌入式技术要求软硬结合,不仅需要有硬件设计,同时还要有软件设计。硬件和软件是一个完整计算机系统相互依存的两大部分,它们之间存在着紧密的联系。硬件和软件是相互依存的,硬件是软件工作的物质基础,软件的正常运行是硬件发挥作用的体现。计算机系统需要完善的软件系统才能正常工作,其硬件才能发挥作用。硬件和软件并无严格的界线,因为随着计算机的发展,很多时候,计算机的某些功能可以通过硬件实现,也可以由软件来实现。所以说,软件和硬件从某种程度上说是没有严格的界线。计算机软件的发展跟随着硬件技术的发展而发展,软件的不断发展和完善同时又促进硬件的更新,两者相互影响,缺一不可。仓库环境监测系统的软件设计是为了体现硬件的功能,系统的传感器采集的数据需要直观地呈现给用户。
传感器采集的原始数据有的并没有经过处理,用户不能直接读懂数据的含义,处理数据的任务既可以交给硬件本身也可以通过自己编写程序处理。例如烟雾传感器采集的原始数据是模拟量,要让用户理解数据就需要进行AD转换。有的MQ-2传感器集成了AD转换模块,并且有数字量数据输出引脚,所以输出的数据就可以直接打包发送了。
仓库的环境数据是实时更新的,所以数据会出现波动,为了更好的体现仓库环境的变化,在软件设计中将环境数据以折线图形式显示会更加直观。为了便于管理员远程查看仓库的实时现场图像,软件UI要能够接收摄像头模块采集的数据,还要同步的显示在UI部件里。在底层实现里就要求不断地读取摄像头串口的数据,关于底层实现的内容将在下一章详细介绍。当有人闯入仓库时,系统要求能够采集到闯入者的图像信息,采集到的信息将存储在本地,用来为盗窃事故的侦破提供可靠的线索。所以,软件UI上需要设计显示闯入者图像的部件。为了更好地提醒管理者仓库发生了异常,UI上将设计一个模拟的报警灯,当发生异常时报警灯会被点亮,同时显示一句异常的提醒消息。当一切正常时,报警灯保持熄灭状态,并显示一句正常的提醒消息。
作为一个监测系统,为了完善其软件功能,在软件设计上考虑了添加管理员登录验证界面。软件开发者一般会将用户的登录信息存储在服务器的数据库里,这样登录信息就不容易被网络攻击者窃取。由于仓库环境监测系统是基于嵌入式的,一般而言,在嵌入式系统里用的比较多的数据库是SQLITE,因为嵌入式系统的资源不如PC机多,所以就需要使用像SQLITE这样轻量的数据库。系统使用数据库仅仅是存储了用户的登录信息,并没有充分利用数据库的存储、查询等功能,当然也是出于安全的考虑才这样设计,在软件的设计过程中也提供了选择,用户也可以不使用数据库,用户的登录信息存储在程序源码中,这样做的好处就是使程序更加轻量以及相应更加快速,缺点是用户不能轻易的修改登录信息,安全性也大大削弱。在这一小节里大致地分析了仓库环境监测系统的需求,从功能需求出发,又引出了硬件和软件的需求设计,在描述硬件和软件需求设计时还稍微谈及了一些技术实现,虽然只是蜻蜓点水般的轻描淡写,却也是抛砖引玉,更加详细具体的技术实现将在下一章节出现。
3.2 仓库环境监测系统的总体结构
仓库环境监测系统共分为数据采集、数据传输、前端显示、报警和Galileo可移植五个模块。数据采集模块由单片机和传感器组成,其中单片机是集成在了ZigBee上,传感器和单片机的连接简化成只需要将传感器插入ZigBee套件的相应接口。将传感器接入ZigBee的终端节点上接口,传感器采集到数据后将数据打包发送给ZigBee的协调器。Galileo可移植模块读取ZigBee传来的数据,经过处理分析后交由前端显示和报警模块报警。系统的结构图如图3.1所示。

图3.1 仓库环境监测系统结构图
数据采集模块里包括了单片机和传感器,单片机控制传感器采集数据首先需要先了解传感器采集数据的原理,MQ-2、DHT11和人体红外传感器都是比较常见的传感器,通过编程使用传感器的难度不大。ZigBee的终端节点将单片机采集的数据发送给ZigBee的协调器,协调器和Galileo相连接。Galileo接收ZigBee协调器的数据需要读取串口,串口通信技术已经非常成熟了,使用Qt中的串口类方法可以很方便的读取串口数据。传统的读取串口方法是使用C语言,编程时需要首先设置波特率、数据位、停止位等相关参数,然后就是打开串口文件,接着读取内容,读取完毕后必须关闭串口文件,整个串口读取操作比较繁琐,Qt中的QSerialPort类方法封装了设置参数和打开文件的方法,开发者可以直接调用,这个特性是在Qt5.0及以上版本新添加的,极大地方便了开发者。视频采集的数据量比较大,Galileo读取视频数据会占用比较多的CPU资源,如果使用单线程开发,那么程序的效率就会非常低,甚至会出现崩溃死机的现象。报警模块使用了SIM900,SIM900支持AT指令。AT指令主要用于终端设备与PC应用之间的连接和通信。每条AT指令都以AT作为首部,中间是响应数据包,结尾是结束字符,每个指令执行成功与否都有相应的返回。AT指令的发送需要串口通信,可以使用和读取传感器数据相同的方法。前端显示作为系统的重要模块,不仅需要显示硬件采集的数据,同时还要和用户交互。前端显示模块的设计要同时兼顾底层接口和软件设计,从开发角度来说,这一模块应该是难度最大的。
整个系统的连接并不复杂,图3.2给出了系统的实物连接图。
图3.2 仓库环境监测系统连接图
从连接图里可以看到,传感器直接接在了ZigBee终端节点上,因为ZigBee套件上集成了单片机。ZigBee上只有一个串口,供电和通信共用一个串口。因为报警模块,视频采集,传感器模块以及前端显示都需要使用串口,Galileo开发板只提供了两个USB接口,其中有一个还是mini口,在硬件资源不够的情况下,不得不使用USB HUB来扩展。前端显示依靠一个目前唯一支持Galileo的USB显示器,这个显示器尺寸比较小,所以显示效果也并不是太理想。当Galileo运行Linux系统时,我们可以看到一个拥有图形界面的精简版Debian。如图3.3所示:
图3.3 精简版Debian
因为屏幕小,对触摸屏的操作不是很方便。为了解决这个问题,可以为Galileo添加键盘鼠标等外设,但是Galileo 的Linux系统镜像并不支持。要使用这些外设需要自己添加相应的驱动并重新编译内核,这里的编译内核和以往的编译适用于ARM开发板的内核是不一样的,由于Galileo使用的是Intel X86架构的处理器,编译内核需要使用YOCTO技术,把想要的驱动添加进去,然后编译出自己想要的内核。这一过程是非常耗时间的。
3.3 仓库环境监测系统的实现技术
传感器是能感受规定的被测量件并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成。中国物联网校企联盟认为,传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。传感器技术已经广泛地应用在了工业生产、海洋探测、环境保护、医学诊断、生物工程、甚至文物保护等领域。仓库环境监测系统需要获取环境信息,借助于人的感觉器官也能获取外界信息,但是在生产活动中,单靠人们自身的感觉器官已经远远不够了,为了适应这种情况,就需要使用传感器技术。
有线数据传输速率快,而且稳定,但是在很多情况下,由于地理环境的限制,给有线传输的线缆布线带来了不便,而且有线传输需要占据布线空间,成本也比较高。无线数据传输虽然传输速率和稳定性不及有线传输,但是其可以摆脱线缆的束缚,另外可扩展性好,安装方便。ZigBee是一种短距离、低速率的无线通信技术,多用于近距离无线连接。ZigBee有自己的无线电标准,它能协调传感器并使它们互相通信,并且通信效率非常高,这种无线技术将来会广泛地应用在工业控制、传感器网络、家庭监控、安全系统等领域。仓库环境监测系统采用ZigBee作为数据传输模块,一方面节约成本,另一方面利用其可扩展性好的特点,系统使用的ZigBee集成了单片机,传感器可以直接接在ZigBee的终端节点接口上。
SIM900是SIMCom推出的一款新型无线模块,属于四频GSM/GPRS模块。SIM900采用工业标准接口,工作频率为GSM/GPRS 850/900/1800/1900MHz,可以低功耗实现语音、SMS、数据和传真信息的传输。SIM900的尺寸较小,能用于M2M应用中的各类设计中。SIM900的性能稳定、外观小巧,性价比高,是一款很实用的通信模块。仓库环境监测系统采用了SIM900作为报警模块,SIM900模块比TC35的稳定性好,SIM900连接网络的速度快,也不容易断网。SIM900的使用比较简单,通过在程序中使用AT指令就能控制SIM900发短信、打电话。另外,SIM900能自适应串口的波特率,在编程过程中不需要指定其波特率参数。
系统的软件设计使用的是Qt。Qt是一个跨平台的C++图形用户界面应用程序开发框架。它不仅可以开发GUI程序,也可以开发控制台工具和服务器。Qt具有优良的跨平台特性,支持Windows、Linux、Unix、QNX等平台。Qt使用的是C++编程语言,所以具有面向对象的特性,Qt具有良好的封装机制,这使得其模块化程度非常高,可重用性比较好,对开发者来说是非常方便的。Qt有一种独特的信号/槽机制,类似于Android的事件监听机制。信号/槽机制是一种安全的类型,替代了回调函数机制,其好处是各个部件之间的协同工作变得十分简单。另外,Qt拥有丰富的API,包括了超过250个C++类。在Qt Creator里查阅方法的使用说明非常简单,只需要选中需要查询的那个关键字,然后按下“F1”就能学习它的使用方法。Qt Creator是一个用于Qt开发的的轻量级跨平台集成开发环境,里面包含了一套用于创建和测试基于Qt应用程序的高效工具,包括一个高级的C++代码编辑器,上下文感知帮组系统,可视化调试器,源代码管理器,项目和构建管理工具。仓库环境监测系统使用Qt框架开发不仅提高了软件的可移植性和兼容性,同时Qt Creator的易用性也大大缩短了软件开发周期。
3.4 仓库环境监测系统的功能设计
根据前文描述的仓库环境监测系统的功能需求,需要对系统的功能进行设计。功能设计分为两大块:硬件功能设计和软件功能设计。
硬件方面,系统要能够完成仓库环境数据采集、传输、处理分析和报警功能。环境数据的采集依靠的是传感器,控制传感器可以使用最简单的单片机。单片机是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等电路集成到一片集成电路芯片上形成的微型计算机,简称单片机。单片机属于微型计算机的一种,它集成了微型计算机中的大部分功能部件,工作的基本原理一样,但具体结构和处理方法不同。数据的传输使用目前被广泛应用的ZigBee技术。ZigBee是基于IEEE802.15.4标准的低功耗局域网协议,它是一种短距离、低功耗的无线通信技术。其特点是近距离、低复杂度、自组织、低功耗、低数据率,主要适合用于自动控制和远程控制领域。数据采集完成后将数据按照提前规定的格式,打包后由ZigBee的终端节点发送到协调器节点,协调器接收到数据后交由数据处理分析功能模块。数据处理是由Galileo可移植模块完成的,数据处理对处理器的要求比较高,因为需要读取摄像头采集的视频数据,传感器采集的数据,以及和报警模块通信,这些操作需要占用大量的CPU资源和时间,Galileo的CPU是Intel公司生产的奔腾级处理器,能够胜任这些请求。SIM900是一款能够发生短信,拨打电话的通信模块,使用它作为报警模块既经济又简单。
软件方面,系统要能够实现显示视频图像,查看采集到的图像,报警以及控制硬件的打开和关闭。整个软件使用Qt Creator IDE开发,Qt Creator是一个基于Qt开发框架的集成开发环境。Qt包含了丰富的API,封装了大量的库,开发者可以避开很多底层实现的细节,直接调用封装好的方法,大大缩短了软件的开发周期。实现显示功能就是要将从串口读取到的数据经过处理后显示在相应的部件上,Qt Creator允许开发者在IDE中设计软件的GUI,开发者可以拖拽自己想要的部件到GUI上,经过简单的布局设计,一个漂亮的软件界面就完成了,软件的具体功能还需要开发者编程实现。软件的查看功能要能够打开存放图像信息的文件夹,实现这一功能就要学习文件操作的相关知识。报警功能模拟的是LED报警灯的效果,在编程实现上,其原理就是在需要报警时加载一张LED报警灯的图片。控制功能主要是控制视频采集模块的打开和关闭,底层实现的原理是I/O的打开和关闭。
4 仓库环境监测系统模块详细设计
在上一章中大致地描述了系统的总体设计,在这一章中将系统分成了五个模块 ,分别是数据采集模块、数据传输模块、报警模块、前端显示模块和Galileo可移植模块,并且详细的描述了模块的设计。
4.1 数据采集模块
数据采集模块是系统的核心,仓库环境的监测依靠数据采集模块获得环境数据。实现数据采集需要传感器,在本小节中将会详细介绍系统使用到的传感器以及它们的使用方法。
4.1.1 DHT11
DHT11温湿度传感器是一种含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,具有极高的可靠性和稳定性。传感器由一个电阻式感湿元件和一个NTC测湿元件,并与一个高性能8位单片机相连接。DHT11传感器是单线制串行接口,体积小,功耗低,信号传输距离可达20米以上,因此被应用在多种场合。图4.1为DHT11传感器。
图4.1 DHT11传感器
DHT11的供电电压为3-5.5V,它有三个引脚,VCC、GND和DATA。DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分。一次完整的数据传输为40bit,高位先出。其数据格式为8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据”所得结果的末8位。用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,发出40bit的数据,并触发一次信号采集,用户可选择读取部分数据,从模式下,DHT11不会主动进行温湿度采集,采集数据后会转换到低速模式。DATA空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据。每一bit数据都以50us低电平时隙开始,高电平的持续时间长短决定了数据位是0还是1。
DHT11规定26us-28us持续的高电平代表数字0信号,70us的高电平代表数字1信号。结合上述的DHT11工作原理,就能轻易理解其编程代码了。
4.1.2 MQ-2
MQ-2是一种能够测量气体浓度的传感器,广泛用于家庭和工厂的气体泄漏监测,对液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等有很高的灵敏度。MQ-2烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。当处于200~300℃时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒会受到该烟雾的调制而变化,就会引起表面电导率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾浓度越大,电导率越大输出电阻越低。因为烟雾浓度的测量值会受环境温度影响,所以通电时测量的数据是不准确的,MQ-2内置了加热电路,通电一段时间后传感器温度会升高,这时测出的数据是比较准确的。MQ-2输出的是模拟电压,所以要获得烟雾浓度数据还需要进行AD转换。
图4.2是MQ-2烟雾传感器。
图4.2 MQ-2烟雾传感器
MQ-2气敏元件有六只针状管脚,其中4个用于信号取出,2个用来提供加热电流。封装好的模块引出了4只管脚,分别是VCC、GND、模拟电压输出和TTL高低电平输出。
4.1.3 人体红外
人体红外传感器由红外探头和菲涅耳透镜组成。人体都有恒定的体温,一般在37℃左右,所以会发出特定波长10UM左右的红外线,被动式红外探头就是靠探测人体发射的10UM左右的红外线而进行工作的。人体发射的红外线通过菲涅耳滤光片增强后聚集到红外感应源上。红外感应源通常采用热释电元件,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经过检验处理后就能产生报警信号。热释电效应指的是:当一些晶体受热时,在晶体两端将会产生数量相等而符号相反的电荷,这种由于热变化而产生的电极化现象称为热释电效应。菲涅耳透镜是根据菲涅耳原理制成,菲涅耳透镜分为折射式和反射式两种,其一方面是聚焦作用,将热释的红外信号折射或反射在红外探头上。另一个作用是将检测区内分为若干个明区和暗区,使进入检测区的移动物体能以温度变化的形式在探头上产生变化的热释电红外信号,这样探头就能产生变化的电信号。菲涅耳透镜使得人体红外传感器的灵敏度大大增加。图4.3是人体红外传感器。
图4.3 人体红外传感器
电路板上圆柱形的就是红外探头,右边半球状的就是菲涅耳透镜。传感器上只有三只引脚,分别是VCC、GND和OUT信号输出。当有人靠近传感器,OUT输出引脚会输出1,远离传感器则输出0。
4.1.4 摄像头
摄像头主要采集仓库的视频数据,使用的是V4L2接口。V4L2是Linux操作系统下用于采集图片、视频和音频数据的API接口。V4L2接口定义了通用API元素,图像的格式,输入输出方法和Linux内核驱动处理视频信息的一系列接口,这些接口包括视频采集接口、视频输出接口、视频覆盖预览接口、视频输出覆盖接口和编解码接口。
使用V4L2接口采集视频数据总共有五个步骤:
第一,打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;
第二,申请若干视频采集的帧缓冲区,一般大于3个并将这些帧缓冲区从内核空间映射到用户空间,供应用程序读取和处理视频数据;
第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;
第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复地采集视频数据。
第五,关闭视频设备文件,停止视频采集。
V4L2采集视频操作包括打开视频设备、设置视频格式、启动视频采集、循环处理视频数据、停止视频采集,关闭视频设备,程序设计的流程图如图4.4所示。

图4.4 视频采集程序流程图
上面的程序流程包含了视频设备采集连续的视频数据的逻辑关系,但在实际运用中,还需要对视频数据进行处理,比如压缩编码,因为视频流数据量非常大,需要很大的存储空间和传输带宽。
4.2 数据传输模块
数据传输模块是一对ZigBee,一个作为终端节点,另一个作为协调器节点。ZigBee组件中的CC2530MCU里面封装了ZigBee的协议栈。CC2530是一个片上系统解决方案,用于2.4GHz IEEE 802.15.4、ZigBee和RF4CE。下面将介绍CC2530开发套件的使用。首先安装IAR810,按照软件的提示获取License,然后完成安装。接着安装ZigBee协议栈--zstack-251a,一路点击next即可完成安装。
最后安装仿真器驱动和USB转串口驱动。系统使用的CC2530开发套件上集成了传感器的接口,在协议栈的源代码里也留出了接口。开发者只需要在函数接口GenericApp_SendTheMessage(void)里添加传感器采集数据的实现就可以了。在程序设计里,设计了temp[3],humidity[3],theYanWuData[3],GasLevel,theEnvData[17]来存储温度、湿度、烟雾浓度等环境数据。数据采集完后,所以的数据都以字符串的形式存储在字符数组theEnvData里,最后调用封装函数AF_DataRequest()就能将数据发送给ZigBee的协调器节点。
4.3 报警模块
SIM900使用AT指令和其他设备通信,AT指令必须以“AT”或“at”开头,以回车(<CR>)结尾。模块的响应通常紧随其后,格式为:<回车><换行><响应内容><回车><换行>,如图4.5所示。
图4.5 AT指令格式
下面简单介绍一些AT命令,AT+CMGD 删除短消息,AT+CMGF 选择短消息格式,AT+CMGR 读取短消息,AT+CMGS 发送短消息。SIM900支持PDU和TEXT模式的短信,AT+CMGF=0设置短信模式为PDU模式,AT+CMGF=1设置短信模式为TEXT模式。PDU模式的短信发送比较繁琐,这里不做介绍,系统使用的是TEXT模式。在发送纯英文短信的时候,发送AT+CSCS=“GSM”,设置为缺省字符集即可。在发送中英文短信的时候,需要发送AT+CSCS=“UCS2”,设置为16位通用8字节倍数编码字符集。
通过AT指令拨打电话非常简单,首先发送“AT\r\n”,“\r\n”表示Enter换行,返回OK后,再发送“ATD 10086;”,这里拨打了10086,过一会就接通了。发送英文短信和中文短信有一些区别,发送英文短信的过程如下:首先发送“AT\r\n”,返回OK后发送“AT+CSCS=GSM\r\n”选择GSM字符集。接着发送“AT+CMGF=1\r\n”选择text模式,然后发送“AT+CMGS=182XXXX6536\r\n”指定短信接收者,最后输入短信内容,发送即可。发送中文短信过程如下:首先发送“AT\r\n”,再发送“AT+CSCS=UCS2\r\n”设置为UCS2字符集。接着发送“AT+CMGF=1\r\n”设置为text模式,然后发送“AT+CSMP=17,167,2,25”设置文本模式参数。通信号码需要通过Unicode编码转换工具转换成Unicode编码,然后发送“AT+CMGS=Unicode编码\r\n”设置通信号码,最后还需要将短信内容转换为Unicode编码再发送,这样一条中文短信就发送出去了。报警的过程其实就是SIM900模块发送AT指令的过程,在编程的时候按照上面的介绍向SIM900的串口写入AT指令字符串就能实现发短信,拨打电话的操作。由于SIM900能够自适应串口波特率,所以不需要编码设置波特率。需要注意的是在发送完每条指令后都需要一个很短的延时。在发送中文短信时常常会犯一个错误,在输入完中文短信内容后还要发送0x1a,表示短信内容结束,如果缺少了这个结束符,则短信不能发送。
4.4 前端显示模块
前端显示模块是一个RoboPeak Mini USB显示器,它可以与各种设备和平台进行连接,进而成为它们的人机接口。目前支持Galileo开发板的USB显示器很少,RoboPeak Mini USB是其中的一种。前端显示的软件首先在PC上位机上开发,然后移植到Galileo模块。
软件要实现以下功能:显示实时监控视频,查询采集的图像信息,实时动态显示数据采集模块的数据,模拟报警。从功能分析,软件UI分为四块区域。使用Qt Creator IDE,在主窗口里拖入四个Label部件,使用Grid Layout布局设置好部件的位置。在需要Button的位置拖入Button控件,选择Button发射的信号类型,一般是Click点击信号,然后进入相应的槽函数进行编码,编码实现的就是点击按钮后的功能。对于显示监控视频区域需要“打开”和“关闭”按钮,在槽函数里实现打开和关闭摄像头其实就是打开文件和关闭文件。在Linux系统里一切设备皆文件,每个设备都有相应的编号,打开设备后会相应的设置一个文件描述符,这个描述符表示的就是当前打开的设备,使用这个描述符可以对设备进行读写操作。查看采集到的图像数据的编码实现可以方便的调用Qt方法,首先声明一个QString对象用来存储图像数据的文件夹路径,然后用一个QFileDialog的对象调用方法setDirectory()设置显示路径,最后调用show()方法。在槽函数里编码完后就实现了查看功能。动态地显示传感器采集的数据,这里使用了第三方库,因为Qt是开源的,所以我们能够使用开源开发者开发的第三方库。这里使用的是qcustomplot库,里面包含了十几种图表样式,系统使用的是实时数据折线图。如图4.6所示。
图4.6 环境数据折线图
向函数接口传入数据就能看到动态的数据变化,横坐标是时间轴,每隔3秒数据刷新一次,纵坐标是测量值范围,测量范围会根据传入值的大小自动扩展。模拟报警使用了Qt的QPixmap类方法,当环境数据超过预设值,则加载报警图片在相应的部件上,恢复正常时加载不报警图片。
4.5 Galileo可移植模块
在PC上位机写好的软件理论上是可以移植到Galileo上的,将Qt的运行库移植到Galileo上,就能运行在PC上用Qt写好的程序。Qt程序在Linux下的运行库不容易找到,一种办法是让程序运行在Galileo上的Linux系统下,根据错误提示找到缺少的运行库,并一个一个添加进去就行了。由于Intel提供的Galileo系统镜像是经过简化的,很多驱动没有被编译进内核,系统需要使用串口驱动,摄像头驱动,这些驱动都要自己手动添加进去,完成这些操作需要使用Yoctoc Project工具。Yocto Project是一个开源的软件,它提供模板、工具和方法帮助开发者创建基于Linux内核的定制系统,支持ARM,PPC,MIPS,X86硬件体系架构。使用这个工具就不用再从头裁剪一个完整的Linux发布版本,极大地简化了开发过程。使用Yocto工具定制自己的Linux系统步骤比较繁琐,需要下载的镜像达30G,所以这个过程是比较困难的。
5 测试与调试分析
在这一章里将通过几个测试案例来测试系统,然后分析了系统发生故障的可能原因。系统的运行要求一台安装了Linux系统的主机,该主机必须有Qt运行库或者已经安装了Qt,Qt版本要求5.0及以上。在启动系统前,确定各模块都已连接好。点击可执行程序,运行程序后,将会弹出登录对话框,登录界面如图5.1所示。
图5.1 登录界面
输入用户名和密码后,程序进入主界面,如图5.2所示。
图5.2 程序主界面
主界面左上角是监控视频区域,右上角是图像数据区域,左下角是传感器数据区域,右下角是报警区域。点击“打开”按钮,则打开摄像头,“关闭”则是关闭设像头。“查看文件夹”是查看图像存储所在的文件夹,“关闭显示”是关闭在界面上显示的图像。
首先测试温湿度数据采集,当程序运行前,先使用一块小纸片遮挡住人体红外传感器,防止人体红外传感器因为人的靠近而发送异常数据。然后运行程序,使用打火机加热温湿度传感器周围空气的温度,当温度超过了程序预设值时,主界面的报警区域将亮起“红灯”,可以看到传感器数据区域的温湿度数据发生了变化,然后,手机将会接收到一条报警短信,短信内容为“警告:发生火灾!”。如果未收到短信,则可能是SIM900A模块通信异常,需要重新启动。
接着测试烟雾浓度数据采集,继续遮挡住人体红外传感器,运行程序,将打火机的燃气出口对准烟雾传感器,按下燃气阀门,释放燃气,传感器数据区域的烟雾数据将会发生变化,当浓度超过了预设值,报警区域将亮起“红灯”,然后,手机将会接收到一条报警短信,短信内容为“警告:发生火灾!”。如果未收到短信,则可能是SIM900A模块通信异常,或者是ZigBee未接收到数据。
接着测试人体红外数据采集,取下小纸片,此时人靠近了该传感器,传感器将发送数据‘1’,表示有人靠近。主界面的报警区域将亮起“红灯”,接着手机将会接收到一条短信,短信内容为“警告:发生盗窃!”。如果未收到报警信息,则可能是ZigBee协调器节点未收到数据,此时需要重启ZigBee模块。
当程序弹出如图5.3所示的对话框,则出现故障的原因是ZigBee协调器的串口未连接主机或者是串口设备号不正确,导致打开串口失败。

图5.3 程序错误
当点击“打开”,程序闪退,出现这个故障的原因是摄像头读取失败,一方面可能是因为串口未连接主机或者识别出错,另一方面是因为设备号出错,导致读取失败。一般来说,摄像头的设备号为video0,其它的USB串口设备的设备号都是以ttyUSB开头。在程序设计时,读取摄像头数据时首先会检测摄像头文件是否存在,当文件不存在时,直接调用exit()退出程序,所以看到闪退的现象。
6 总结与展望
本文根据仓库的实际需求设计了仓库环境监测系统,实现了仓库环境监测,能够对火灾和盗窃事故做到快速的预警,能够减小事故的损失。
论文首先具体的介绍了Intel Galileo开发板,先具体介绍了Galileo的硬件资源,然后再结合自己学习Galileo的过程介绍了它的使用方法,对于没有接触过Intel Galileo的开发者也具有一定的参考价值。
本文将整个仓库环境监测系统分成数据采集模块,数据传输模块,报警模块,前端显示模块和Galileo可移植模块,并且在第四章中花了很大的篇幅详细地描述了其具体实现,包括传感器的工作原理,如何读取传感器数据,SIM900的工作原理和编程控制其发短信拨打电话,控制摄像头采集监控数据,Qt编写软件UI和移植软件到Galileo开发板。
在论文的后半部分,系统运行与调试分析里展示了系统软件的详情。先以图文的方式介绍了如何使用软件,然后结合软件运行中出现的问题介绍如何解决软件运行过程中出现的问题。
展望仓库环境监测系统,仍然还有很多不足和有待改进的地方。
1)由于成本问题,视频采集使用的是普通的有线摄像头,如果使用网络摄像头,不仅可以本地快速地访问数据,而且能够远程访问,可以大大增强了系统的实用性。
2)用户不能使用移动终端访问系统数据,这块功能由于时间有限,不能够学习Android来开发手机客户端程序,如果开发了手机客户端,用户可以使用手机查看仓库的环境信息,而且可以在线观看仓库的监控录像。
3)系统功能不够完善,系统只实现了监测和预警功能,当环境数据超过预设值时,系统不能够自动采取措施调节。如果当火灾发生时,系统能够开启排气扇将仓库内的烟雾排出,那么可以方便消防人员成功求火,又或是将可燃气体排出,以减小火情。
4)摄像头拍摄的视频角度是固定的,如果摄像头带有舵机,那么可以开发相应的功能来操控摄像头,使得可以通过遥控摄像头来拍摄不同角度的监控录像。
5)传感器节点过少,系统中只有协调器节点和终端节点,因此环境数据采集的区域有限,另外,当其中一个节点出现故障时,因为节点数少,将会导致系统瘫痪,无法正常工作。
致谢
本课题的提出和开展是在我的导师和我的研究生师兄的指导下完成的,他们对我的课题的研究方向和思路都倾注了大量的时间和精力。非常感谢他们对我的课题提出了宝贵的意见。他们严谨的治学态度,精益求精和不断进取的精神一直影响着我,他们渊博的知识一直激励着我要向他们学习,我要向他们致以崇高的敬意。
在课题研究的过程中,我遇到了一系列的技术问题,一直都是我的同学不厌其烦地为我解释其中的技术原理。他博学多才,专注,积极探索,是我学习的榜样。我对他的帮助表示深深地感谢。
在电信学院学习和生活的四年里,各位老师给予了我悉心的教导和关心,无私地传授知识并教会我如何为人处世,让我在学识和做人方面都有了很大地提高。在此,我致以诚挚的谢意。
特别感谢我的班主任,大学四年里您像姐姐一样给予了我照顾和关心,您年轻活跃,不仅深深地感染了我,同时也活跃了整个班级的氛围。感谢物联网1101班的全体同学,四年里,你们给了很多帮助和关心。感谢406的三位室友,四年地相处,在你们身上我学到了很多,也让我改变了很多,谢谢你们的关心和帮助。
最后,我要感谢我的家人,是家人的支持和鼓励使我顺利地完成学业。
最后再向审阅本文的专家、教授致敬,您们辛苦了。
参考文献
[1] 程姚根,苗德行,嵌入式操作系统.,北京人民邮电出版社,2013.
[2] 曾宏安,冯利美,嵌入式应用程序设计综合教程.,北京:人民邮电出版社,2013.
[3] 杨胜利,刘洪涛,ARM嵌入式体系结构与接口技术,北京:人民邮电出版社,2013.
[4] 霍亚飞,Qt及Qt Quick开发实战精解,北京:北京航空航天大学出版社,2012.
[5] 霍亚飞,Qt Creator快速入门,北京:北京航空航天大学出版社,2012.
[6] Stanley B.Lippman等, C++ Primer中文版.北京:人民邮电出版社,2008.
[7] Andrei Alexandrescu,C++设计新思想.武汉:华中科技大学出版社,2003.
[8] Daniel P.Bovet,Marco Cesati.深入理解LINUX内核.北京:中国电力出版社,2007.
[9] 马维华,白延敏.嵌入式系统原理及应用.北京:北京邮电大学出版社,2010.
[10] 唐朔飞,计算机组成原理.北京:高等教育出版社,2008.
[11] Jean J.Labrosse,嵌入式实时操作系统μC/OS-||.北京:北京航空航天大学出版社,2003.
[12] 谢维成,杨加国,董秀成.单片机原理与应用及C51程序设计.北京:清华大学出版社,2009.
[13] 尹宝林, C程序设计思想与方法.北京:机械工业出版社,2009.
[14] 汤小丹,梁红兵,哲凤屏,汤子瀛.西安:西安电子科技大学出版社,2007.
[15] 曹先彬,陈香兰.操作系统原理与设计.北京:机械工业出版社,2009.
[16] 俞甲子,石凡,潘爱民.程序员的自我修养--链接,装载与库.北京:电子工业出版社,2009.
The design and realization of warehouse environment monitoring system based on Intel Galileo
The internet of things 201110418 Qiu Linsheng
Instractor Du Yongwen(associate professor)
Abstract:This article primarily introduces the relevant techniques for the Environment Monitoring System Of Storage in detail,then it describes the structure,function design and used techniques of the system from an overall perspective.After that, it divides the system into five modules,they are data collection,data transfer,alarm,front- end display and portable Galileo modules,and it also describes the specific design process,and module design includes PC software design and slave computer software design..Finally,it gives a simple introduction about debugging and solution when errors occur.The system can collect the environmental and video data,when datas are abnormal,it will give a alarm immediately.The system provides PC software for user to interact with hardware,and it makes user intuitively to know the environmental data of storage.
Key words:Warehouse,Environment monitor,Galileo,Qt