欢迎来到工作报告网!

基于Android平台的智能植物生长柜测控系统设计

自我鉴定 时间:2023-07-15 08:40:33


打开文本图片集

摘要:为实现对生长柜中环境信息远程采集和数据显示,同时实现摄像头对植物的监控和对多控制节点的远程控制,设计了一种基于Android平台的物联网测控系统。该系统各传感器的数据采集、摄像头图像采集以及调节生长柜中环境的执行机构是由FS_WSN4412平台进行控制,利用Android编程技术对FS_WSN4412平台软件的功能和界面进行了设计,通过Wifi模块上传数据至服务器。物联网服务器采用Tomcat搭建,利用JSP+servlet+MVC技术完成网页的设计。结果表明,该系统实现了对物联网智能植物生长柜的环境参数的现场和远程监控。

关键词:智能植物生长柜;物联网;Android;远程监控

中图分类号:TP271 文献标识码:A 文章编号:0439-8114(2016)02-0473-05

DOI:10.14088/j.cnki.issn0439-8114.2016.02.053

为解决资源与食品安全问题,智能植物生长柜以节省资源、保护环境、安全、放心、健康为出发点,得到社会的广泛关注与认可[1,2]。智能植物生长柜是一种人工光利用型植物工厂,使用LED灯光代替自然光,并能够通过对植物生长发育过程中的环境温度、湿度、光照度等要素进行智能控制,为植物生长提供环保、舒适的生活环境,从而实现植物周年连续生产[3-5]。

目前,市场上常见的智能植物生长柜依赖于嵌入式设备或微电脑对生长柜中的环境参数进行采集与调节,完全由人工在现场对生长柜中环境进行监测管理,无法实现远程监控,而且硬件资源有限,具有管理效率低、操作不便、可扩展性差等缺点[6,7]。充分利用Android技术和物联网技术的物联网智能植物生长柜,以Android系统作为测控中心的主控制器,结合Wifi无线通信技术,使生长柜与互联网联系起来,实时与服务器端进行信息交换与通讯[8,9]。通过Android端测控中心的底层驱动和界面设计,实现本地对生长柜的监控,同时实现在服务器端远程监测生长柜中环境参数、查询数据库中数据,并且通过摄像头查看柜中植物生长状况[10-12]。该系统能够增强智能植物生长柜作业的可靠性、安全性、准确性和快捷性,最大限度保障生长柜中植物的安全与健康。

1 系统总体设计方案

系统主要分为底层测控中心和服务器端数据中心两部分,系统架构图如图1所示。测控中心部分主要包括Android主控制板、环境参数采集模块、摄像头模块、Wifi通信模块及调节环境参数执行机构等5大模块。Android控制板为FS_WSN4412开发板,主要完成生长柜现场监控,包括传感节点信息采集、与服务器的网络通信和响应服务器端反馈控制等功能;参数采集模块主要通过采用CO2TH200二氧化碳温湿度一体化传感器模块、光照传感器和DS18B20温度传感器实时检测获得植物的生长环境;摄像头模块主要负责生长柜现场监控和服务器端远程监控视频的采集;Wifi通信模块主要采用Wifi无线通信协议同服务器端进行远距离无线通信;执行机构采用模糊PID智能控制算法,由Android系统通过控制I/O输出进而控制加热棒、制冷机、加湿器、风机、(小功率)气压泵、电机等控制设备来调节柜体内的温度、湿度、CO2浓度和光照度以及营养液温度。

2 子系统的设计与实现

2.1 Android系统与传感器的设计与实现

Android系统是Google公司开发的基于Linux平台的开源手机操作系统。该系统采用的是运行Android4.2.1版本的FS_WSN4412开发板,该设备基于ARM Cortex-A9的四核Exynos4412处理器,其主频1.5 GHz,运行内存1 GB,具有丰富的传感器节点、自带摄像头、外设接口资源和无线传感网络,是一款功能强大的嵌入式、物联网、移动互联网平台。硬件传感器部分采用的是CO2TH200二氧化碳温湿度一体化传感器、光照传感器和DS18B20温度传感器,FS_WSN4412平台上所有资源都在Linux系统中实现基本驱动,在Android系统中实现HAL的stub,并向JNI层注册相应服务,包括LED服务、BEEP服务以及由Android系统实现的Sensor服务。

Android中传感器底层驱动开发的文件位于Android源码的如下位置:

1)frameworks/base/core/java/Android/hardware/SensorManager.java;

2)frameworks/base/core/jni/Android_hardware_SensorManager.cpp;

3)frameworks/base/services/java/com/Android/server/SensorService.java;

4)frameworks/base/services/jni/com/Android_server_SensorService.cpp;

再加上sensorstub以及Linux内核驱动,构成了整个Sensor框架,用户应用程序只需调用sensormanager类,即可操作所有的传感器(以下各层代码中的sensor不是代表具体的一种传感器,而是文中所有传感器统称)。

2.1.1 Android Sensor驱动层 Android内核是由标准的Linux内核修改而来的,内核空间的Android硬件驱动程序和Linux设备驱动程序的编写均是以Linux模块来实现的,即文件操作结构体file_operations的赋值以及结构体中函数的具体实现。此外,Android Sensor驱动层还执行各传感器的注册、初始化和设备的注销操作。

file_operation是将系统调用和驱动程序关联起来的关键数据结构。文件操作结构体中的成员函数是字符设备驱动程序设计的主体,这些函数会在应用程序的open()、write()、read()、close()等中被调用。传感器一般结构体定义如下:

static struct file_operations sensor_fops={

.owner =THIS_MODULE,

.open =sensor_open,

.release=sensor_close,

.read=sensor_read,

.write=sensor_write,};

2.1.2 Android Sensor HAL层 硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中,增加传感器的硬件抽象层模块访问Linux内核驱动程序。Stub作为直接调用Linux驱动的上层,实现简单的I/O操作,Stub向HAL提供操作函数(Operations),而Runtime则向HAL取得特定模块(Stub)的Operations,再回调这些操作函数。在HAL实现的stub中定义hw_module_t结构体,该结构体是HAL模块的核心结构体,所有硬件模块都必须将该结构体作为第一个成员,表示继承了该结构体。根据本层架构,定义3个结构体,它们主要部分分别定义如下:

typedef_struct sensor_module_t{

Tag:HARDWARE_MODULE_TAG,

......

id:SENSORS_HARDWARE_MODULE_ID,

}sensor_module_t

typedef struct sensor_module_method_t={

int (open)(const struct sensor_module_t module const char id

struct sensor_device_t device)

}sensor_module_method_t

typedef struct sensor_device_t={

struct sensor_module_t;

int (*get_read)(struct sensor_device_t*dev,int*val);

}sensor_device_t

上层通过硬件的id调用hw_get_module()函数,即得硬件模块sensor_module_t,并从该模块中得到sensor_module_method_t,继而打开得到的硬件设备sensor_device_t,然后调用设备中的get_read()函数,即可调用传感器在Linux内核层的驱动实现,最后调用hw_device_t中的close关闭设备。

2.1.3 Android Sensor JNI层 Android系统的应用程序是用Java语言编写的,而硬件驱动程序是用C语言来实现的,应用程序要调用传感器驱动程序操作硬件必须通过Java本地调用JNI来调用硬件抽象层接口。JNI的数据类型与Java数据类型的相互转化及函数注册是通过JNINative_Method结构体实现的,代码如下:

typedef struct{

const char* name;

const char* signature;

void* fnPtr;

}JNINative_Method

JNI层主要是将stub中的open、close等方法封装提交给android application框架。在int中会调用open方法初始化,代码如下:

Static jint android_init(JNIEnv*env, jclass clazz)

{ ......

if(sensors_control_open(&module->common,&SensorDevice)==0){

const struct sensor_t*list;

int count=module->get_sensors_list(module,&list);

return count;

}}

2.1.4 Android Sensor Framework层 为硬件抽象层模块编写完串口的JNI方法后,需要为Android系统的Application Frameworks层增加硬件访问服务SensorService。Application Frameworks层中包含了自定义的硬件服务SensorService,在Android系统启动的时候,应用程序就可以通过Java接口来访问Sensor硬件服务了。

2.2 测控端软件设计

测控端软件采用Android Java开发,通过互联网为物联网连接媒介,结合Android底层驱动开发技术,在底层开发传感器驱动,在应用程序层编写各传感器数据采集程序。用户登录进入系统前,Android设备通过Wifi无线网络或3G移动通信网络等连接到互联网服务器上。登陆后,首先输入已经申请的用户名和密码,然后启动接收相应生长柜的环境参数的后台运行SerialService类,实现采集数据的Android端实时监控和与服务器端数据交互,物联网智能植物生长柜测控端的具体实现如图3所示。

测控端Android应用程序主要包含了45个Java文件和10个XML脚本文件,每一个文件的属性和权限要在全局的配置文件manifest.xml中定义。通信模块采用的是Wifi无线通信方式,同时为了提高系统整体的通信效率,本系统将传感器数据采集和互联网通信部分放在了后台独立运行的线程Thread中执行,可以保证系统数据的实时采集和快速反应性能。

Android完全支持JDK本身的TCP、UDP网络通信API,同时也支持JDK提供的URL、URLConnection等网络通信API。本系统中由于用到互联网通信,采用了URLConnection的一个子类HttpURLConnection,其可用于向指定网站发送GET请求、POST请求。Android端互联网通信部分核心代码如下:

URL url = new URL(“http://219.243.13.12:80/test/UploadServlet”);//创建URL对象

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();//调用URL对象openConnection()方法来创建HttpURLConnection对象

httpURLConnection.setRequestMethod("POST");//设置POST方式的请求

DataOutputStream dos = new DataOutputStream(httpURLConnection.getOutputStream());//获得OutputStream对象输出流,准备上传文件至服务器

dos.writeBytes(s1);//调用writeBytes上传

InputStream is = httpURLConnection.getInputStream();

InputStreamReader isr = new InputStreamReader(is,"utf-8");

BufferedReader br = new BufferedReader(isr);

String result = br.readLine();//获得InputStream对象输入流,读取从服务端传过来的信息

启动Android端应用程序,登录到物联网智能植物生长柜测控系统,与此同时启动后台程序采集生长柜中植物生长环境的参数和向服务器端的参数上传。测控端向服务器发送POST方式的请求,连接服务器端。获得OutputStream对象输出流,准备上传文件至服务器,通过调用WriteBytes实现数据上传。上传成功后,服务器端向底层Android端发送反馈信息,底层数据中心获得InputStream对象输入流,读取从服务端传过来的信息。Android端测控中心的网络通信程序流程如图4所示。

2.3 服务器端软件设计

物联网服务器是Web服务的一种,Web服务基于标准网络调用约定,无关操作系统或编程语言,仅通过相同的调用命令来远程执行程序并返回结果。本项目使用Myeclipse+tomcat+MVC模式来设计开发。Web服务发布成功后,通过在浏览器地址栏输入调用地址或网址进行简单的调用,也可以通过Web服务组合技术将相关服务分为一组,按组进行服务的批量调用。

物联网服务器接收端的软件设计步骤如下:

1)通过item.getInputStream()获得上传的输入流;

2)将上传的生长柜中环境参数数据通过pp.split(“b|a”)进行分割;

3)接收程序用一个后台运行的servlet,保证在服务器打开的情况下实时接收下位机传输的数据,并插入数据库sql1="insert into car_new(carnumber, carcolor, identifydate, identifyplace, path) values (?,?,?,?,?)";

4)调用PreparedStatement进行逐次插入。

3 实际应用

智能植物生长柜实物图如图5所示,Android端测控中心生长柜中温度现场监测结果如图6所示,数据5 s更新一次。同时采用Wifi无线网络通信技术将环境参数传至互联网,服务器端测试数据如图7所示。

4 小结

基于Android平台的物联网智能植物生长柜测控系统,结合互联网通信技术,实现了实时现场与远程监控,根据传感器监测到的环境参数对执行机构进行相应的控制,从而达到为作物提供最佳生长环境的目的。该设计具有硬件成本低、操作界面人性化、控制方便、实时性好、远程控制灵敏度高等特点,具有广阔的应用前景和使用价值。

参考文献:

[1] 古在丰树.太阳光利用型植物工厂——先进植物工厂的可持续性与设计[M].张成波,尚庆茂,译.北京:中国农业出版社,2010.

[2] 杨其长,张成波.植物工厂系列谈(七)——植物工厂光照和温度调控[J].农村实用工程技术( 温室园艺),2005(11):31-33.

[3] WU X L, DONG J L, LIANG F, et al. An LED green light for new plant growth cabinet precise temperature control system[J]. Applied Mechanics and Materials, 2014,577:325-328.

[4] 江 天,张 潇.智能LED植物生长系统[J].照明工程学报,2012(S1):10.

[5] CUI S G,HAN S L,WU X L,et al. Design of hardware of smart qlant growth cabinet[J].Applied Mechanics and Materials,2014,577:624-627.

[6] 王石磊,郭艳玲,付志刚.基于ARM的温室环境控制系统研究[J].林业机械与木工设备,2008,36(4):19-21.

[7] MONTOYA F G,GOMEZ J,CAMA A. A monitoring system for intensive agriculture based on mesh networks and the android system[J]. Computers and Electronics in Agriculture,2013, 99(7):14-20.

[8] 马增炜,马锦儒,李亚敏.基于WIFI的智能温室监控系统设计[J].农机化研究,2011(2):154-157.

[9] 公 磊,周 聪.基于Android的移动终端应用程序开发与研究[J].计算机与现代化,2008(8):86-89.

[10] 陈 强.Android底层接口与驱动开发技术详解[M].北京:中国铁道出版社,2012.

[11] 韩 迪,潘志宏.基于Android移动设备传感器的体感应用[J]. 华南理工大学学报(自然科学版),2012,40(9):75-80.

[12] 郑 萌.Android系统移植和驱动开发[M].北京:电子工业出版社,2013.

推荐访问:测控 植物生长 智能 设计 系统

热门文章