1. 引言
21世纪科学技术飞速发展,生产生活设备逐步信息化,大棚也获得了长足的发展,大棚科技含量和规模化程度不断提高,近年来我国大棚控制系统自动化取得了较大进步,但是我国农业现代化还处于初级阶段,技术水平与规模化程序距发达国家还有较大差距,控制系统稳定性,配套设施的完善程度及产业化水平还有待提高,大棚投入产出比较大。
随着大规模集成电路技术的发展,嵌入式设备集成度越来越高,设备性能越来超强,功耗越来越低,体积越来越小,模块化程序越来越高,可扩展性越来越强。嵌入式系统在物联网行业中起来越重要。假如把物联网拟人化,那么物联网中传感器就是人的感觉器官如肌肤、眼睛等,网络就类似于人的神经,嵌入式系统则是人的大脑,负责从传感器接收信息并对接收到的信息进行加工处理 [2] 。近年来物联网技术在我们生活领域几不可缺,嵌入式系统已成为物联网行业的基础。总体看来,嵌入式系统具有性价比高、性能稳定、实时性高、功耗低、体积小、嵌入性强、可靠性高等特点,在目前的家电、工业控制系统甚至生活用品中广泛使用。
2. 系统方案设计
2.1. 系统层次结构
本系统采用分层的方案,系统分层结构如图1所示,各部分完成不同的功能。最低层由Arduino Uno控制,Arduino Uno完成最低层最基础的功能,如温湿度采集、光照强度获取、步进机控制、施水、通风。中间层由Raspberry Pi完成,Raspberry Pi获取Arduino Uno上传的数据,然后将这些数据存储至数据库服务器,Raspberry Pi根据接收的各项数据进行分析和处理,然后做出相应的反馈,向Arduino Uno发送对应的指令,进而再对底层设备进行对应的操控,完成施水、通风等相应的操作。另一方面,用户也可以获取传感器收集的各项数据和抓取的视频流,也可以主动的去发送指令人工控制设备进行大棚的相应管理工作。其中Raspberry Pi和Arduino Uno通过串口连接 [3] 。
2.2. 服务层控制
Raspberry Pi通过串口获取温度、湿度数据,将数据存储在数据库中以备用户查询,Raspberry Pi监

Figure 1. Hierarchical structure diagram of system
图1. 系统分层结构图
控大棚数据,可以通过给定的阈值来触发步进电机控制遮光板,控制水泵施水,控制风机通风 [4] 。
Raspberry Pi的工作流程如图2所示,Raspberry Pi定期扫描串口接收温度、湿度数据和光敏模块数据,将读取的数据存入数据库以备用户查看,同时检查读取数据是否在设定的阈值内,若超过了阈值则启动相应的设备,如温度超过35度则启动风机降温。另一方面,Raspberry Pi处理Web终端请求,将实时图片和视频展示给用户,并接受Web终端发来的命令,将命令发送给Arduino Uno。Raspberry Pi和Arduino Uno通过Socket 通信。
2.3. 底层设计
Arduino Uno工作在低层,通过串口和Raspberry Pi通信,负责温度、湿度数据获取和校验,将正确的DHT11数据上传给Raspberry Pi,控制步进机转动和停止,微型水泵的启动和停止,风机启动和停止。
Arduino Uno工作流程如图3所示,Arduino Uno定时读取DHT11传感器数据,获得温度、湿度数据和光线强度状态,验证获得的数据是否正确,若正确,将数据发送至串口待Raspberry Pi读取。定时读取光敏电阻模块状态,将状态发送至Raspberry Pi。循环读取串口数据,若有数据,根据不同的数据控制不同的设备,如关闭遮光板,打开通风设备等。
3. 系统设计
3.1. 温湿度获取流程图
Arduino Uno采集温度、湿度流程图4所示,Arduino Uno启动后定期激活DHT11模块,读取DHT11模块40位数字数据,取前第一个8位转换为整形湿度数据,第三个8位转换为整形温度数据,最后一个8位为校验数据,另外两个8位为保留数据,校验正确后将温度、湿度数据发送给Raspberry Pi [5] 。
3.2. 步进电机的控制
步进电机通过Arduino驱动控制,步进电机除电源接线外,通过四根信号线驱动转动。将步进电机ULN2003驱动板上的1N1、2N2、3N3、4N4分别接入Arduino上digital列的11、10、9、8接口,在Arduino 1.6.1环境中编写步进电机正向驱动函数如下以备调用,反向函数时序与此函数相反 [6] 。
步进电机部分封装了两个控制步进函数,以上代码为正向转动,反向转动与此时序相反。步进电动机的步进角是5.625度,因为这个是带减速齿轮的,所以最后在输出轴上的步进角是5.625/64 = 0.08789

Figure 2. The work flow chart of Raspberry Pi
图2. Raspberry Pi工作流程图

Figure 3. The work flow chart of Arduino Uno
图3. Arduino Uno工作流程图
度,减速比是1/64。对于电机,是64个脉冲为一圈。对于输出轴,是4096个脉冲为一圈(64 × 64)。电机转64圈,输出轴转1圈 [7] 。
4. 系统实现
4.1. 数据库的设计
sudo apt-get install apache2 mysql-server php5 php5-mysql
安装好数据库后创建数据库dht,然后运行如下命令即可创建温度、湿度表如图5所示。

Figure 4. Diagram of Arduino Uno collecting temperature and humidity
图4. Arduino Uno采集温度、湿度流程图

Figure 5. Temperature and humidity chart
图5. 温度、湿度图
4.2. 获取温湿度数据
在Raspberry Pi上调用该脚本一次即可获得调用该函数时的时间、温度、湿度数据,并将据写入到mysql数据库中,Raspberry Pi上读取数据如图6所示。
4.3. 数据显示
Web页面是最终呈现给用户的友好界面,无论用户使用手机、平板还是电脑,只要用户可以连接互联网用户就可以使用浏览器查看Web管理终端。本文Web管理终端使用LAMP模式。其中Linux为Debian 7.0,Apache为Apache/2.2.22,Mysql为5.5.41,PHP为PHP5.4.39。Web页面如图7所示。

Figure 6. Temperature and humidity data chart
图6. 获取温度湿度数据图
5. 系统测试
图8这个页面是个测试页面,Web服务器需要查看图片时只需访问地址: http://raspberry_pi_ip:8080/?action=snapshot即可获取一张实时的静态图片,若要查看实时视频只需调用http:///raspberry_pi_ip:8080/?action=stream即可获得实时的视频。
Arduino Uno编程语言是以C/C++基础的,用户可以使用C语言为Arduino Uno编写库文件。官方库文件代码修改后为两个文件dht.cpp和dht.h,将此两个文件放入Arduino库文件目录中,在Arduino开发环境中包含dht.h文件即可使用编写好的类和库函数。再将其封装到函数中,以备调用。Arduino定期读取DHT11数据并将数据写出到串口线上,Raspberry Pi只要定期读取与Arduino连接的串口线上的数据即可定期获得温度和湿度数据 [8] 。
Arduino集成开发环境自带串口调试工具,程序编译后烧录到Arduino调试模式下即可显示出串口传送的数据,烧录的时候要将Arduino的数字线拔下,否则不能烧录成功。如图9所示,可以看到已经可以在Arduino上正常的获取温度和湿度数据了。通过这里测试获取的数据可以看出,我们的系统正常的大棚的温度、湿度等传感器信息了。

Figure 8. Mjpg-streamer test page image
图8. Mjpg-streamer测试页面图

Figure 9. Temperature and humidity chart
图9. 温度、湿度获取图
6. 结束语
本文结合嵌入式设备和常见传感器及反馈设备设计了一种基于嵌入式设备和Web技术的模拟大棚实时监测与管理系统。系统使用目前国外比较流行的嵌入式设备Raspberry Pi和Arduino Uno,Raspberry Pi是性能较强的嵌入式设备,具有较强的计算能力和扩展能力,她支持Linux系统,可以做为微型嵌入式计算机使用,Raspberry Pi作为大棚中央控制服务器,负责与互联网的通信、采样存储Arduino上报的状态数据、Arduino Uno价格比Raspberry Pi低得多,但是拥有较多的接口,可以把处理计算交给Raspberry Pi而把传感器数据获取及外部设备的控制交给Arduino Uno [9] 。
本系统实现了大棚控制系统的设计,本系统使用了温湿度等传感器,Raspberry Pi等智能控制设备,系统能够自动采集大棚环境参数,如温度、湿度等数据,系统可以稳定有效的工作,实时性高,系统成本较低,在实际应用中有广阔前景。
基金项目
国家数字化学习工程技术研究中心,项目编号CCNU11C01003。