您的当前位置:首页正文

基于Arduino的智能温室监控系统设计

2020-12-23 来源:爱go旅游网
基于Arduino的智能温室监控系统设计

作者:李迪 陈群贤 陈博洋 黄少强 张振康 来源:《电子科学技术》2017年第01期

摘 要:本文描述一种基于Arduino的自动控制系统的设计和实现方法。该系统主要有控制端、服务器和终端组成。其中,控制端由Android设备组成,OpenShift是服务器环境,作为消息中转装置,终端做信息采集和接受指令。原型机的表现良好,在实际中有一定的市场空间。 关键词:Arduino;Android;OpenShift容器;Spring Cloud服务器

中图分类号:X84 文献标识码:A 文章编号: 2095-8595(2017) 01-081-05电子科学技术 URL: http://www.china-est.com.cn DOI: 10.16453/j.issn.2095-8595.2017.01.019 引言

当今社会,人们生活日益繁重,迫使人们只能关注与生活本身的事物,连家中的花草也可能无暇顾及。那么家中花草谁来管理?本系统为有此类需求的客户开发了一款可以自动控制或者远程控制的设备。制造了基于Arduino的浇花系统,使用了多个传感器进行监控,几个控制器控制水泵进行浇水,从而达到自动浇灌的目的。

同时这个浇花设备遵循了GPLv3协议,可以二次开发实现更多的功能。 1 总体设计

系统由Android、Arduino和服务器三部分组成,系统总体设计如图1所示。每个组件内部的复杂服务都进行了封装,对外只暴露少量的接口。组件之间由HTTPS协议进行通信。用户使用Android设备对Arduino终端进行控制,同时,Arduino终端将植物和水泵的信息反馈给Android设备。公网上的服务器对两种设备的信息进行中转,并且存储历史数据。 2 详细设计

系统三个组件在设计之初就十分强调减少组件的关联,尽量做到彼此独立,不会因为某个单点问题造成系统的崩溃。 2.1 应用程序服务器 2.1.1 微服务

应用程序服务器使用了微服务的设计,化整为零,去粗取精。第一个强调的重点是业务系统彻底的组件化和服务化。原有的单个业务系统拆分成多个独立开发、测试和维护的子系统。这些小应用程序通过服务完成交互和集成,每个小应用程序由RESTFul API(Representational State Transfer)提供,控制器和数据源都是完全独立的一套。

微服务包括如下一些特征:这些服务很容易更换;可以使用不同的编程语言、数据库、硬件和软件环境来实现服务;服务的规模小,支持消息传递,受上下文约束,自主开发,可独立部署,分散和使用自动化过程构建和发布[1];自然地实施模块化结构[2];适用于连续交付软件开发过程,对应用程序的小部分的更改只需要重建和重新部署一个或少量服务[2];遵循細粒度接口(可独立部署的服务),业务驱动开发(例如域驱动设计),云应用程序架构,多语言编程和持久性,轻量级容器部署,分散式持续交付和DevOps整体服务监控[3]。本系统基本实现了上述微服务功能。 2.1.2 Spring Cloud

为了实现这些功能,服务器上使用了Spring Cloud作为一个组成部分,Spring Cloud设计如图2所示。

Spring Cloud为开发人员提供了快速构建分布式系统中的一些通用模式。图2表示了服务器上系统的内部结构,各内部组件的作用如表1所示。

分布式系统的协调导致了扁平模式,并且使用Spring Cloud开发人员可以快速地实现这些模式的服务和应用程序。它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心和受管平台[4]。有了这个工具,实现这种微服务体系就变得非常容易。 首先要在GitHub上创建好设置服务器、路由、用户服务、终端服务、控制端服务五个最基本的项目,各项目功能描述如表2所示。

三个服务的设置代码如下所示,每个服务只需要配置各自对应的数据源(连接到控制系统,连接到移动设备),同时要加入设置服务器(表内第五行)。 2.1.3 OpenShift

这个系统也使用了OpenShift来作为容器的管理工具,OpenShift设计如图3所示。OpenShift是一个使用Docker并且支持Kubernetes的DevOps工具,属于PaaS层面。OpenShift Enterprise是其私有云版本[5],是一个开源软件,由OpenShift Origin管理,支持GitHub,开发者可以使用Git来发布自己的web应用程序到平台上。开发者在OpenShift上注册一个账户并且绑定一张visa卡,按照GitHub上的项目在OpenShift中创建“构建”,构建结束后即可使用,服务会自动出现在池(Pod)中。

2.2 Android

2.2.1 为什么选择Android

Android最初由安迪·鲁宾(Andy Rubin)等人开发制作[6]。于2005年7月11日被美国科技企业Google收购。Android其开放源代码的特性使得众多厂商可以自由的使用源代码进行定制化的修改。 2.2.2 主要设计

Android智能手机主要完成登录、连线、查看设备和制定计划四个功能。

用户在登录的时候需要向服务器提供电子邮件地址以及密码,当验证成功后允许执行其他操作。

连线,Android智能手机与客户端传输文件使用JSON为载体,用户登录后,可显示家中所部署的浇水装置、植物及它们的状态,并且可以对其下达浇水指令以完成对家庭植物的智能浇水。在Android端采用HTTPS请求发送JSON消息给服务器端,服务器端收到请求后进行处理并将处理结果放到JSON文件里发送给Android手机。Android端登录采用多线程以防止在发送过程中APP不能及时响应客户的其他请求。Android端采用AndroidAnnotation开源框架[7],该框架可节省开发成本,可直接用Java特性annotation让布局组件与逻辑代码绑定。用适配器让部署了浇水装置的植物信息以列表的形式显示在手机上。当用户点击列表后可以向服务器发送浇水请求,让服务器发送指令给浇水设备。 user.getTerminalDevices()

这条语句会从服务器获得用户的所有终端设备信息。 user.saveSchedules(schedules)

执行这条语句时,计划任务会通过RESTTemplate转化为JSON文件发送到服务器。 2.3 Arduino

2.3.1为什么选择Arduino

Arduino是一个开放原始代码的平台,拥有成熟的开发环境[8],无论是谁都可以使用Arduino制作出独一无二的作品。Arduino同时支持海量的插件,包括但不限于开关、传感器发光二极管、步进电机。此外欧特克开发的circuits.io让Arduino开发者在线设计并且分享使用设计图,进一步吸引更多开发者创造出更多令人惊奇的产品。

2.3.2组件描述

本系统采用主流的DS18B20测温模块及湿度传感器检测土壤的温度及湿度状态,当达到一定的阀值时控制器驱动水泵工作,从而达到浇水目的。另外,用户可以通过移动终端实时监控并控制此硬件终端的运行状况及参数。系统硬件結构如图4所示,系统的终端成品如图5所示。

硬件系统由5个模块组成,主要包括硬件控制器、通信模块、温度和湿度传感器以及水泵组成,各模块提供不同的功能。

硬件控制器作为本系统的最重要部分,负责各传感的通信及外围设备的驱动。由温、湿度传感器传来的数据,交由控制器分析,从而决定是否启动外围设备工作。同时,分析的数据通过通信模块与用户端进行信息对话,从而达到监控数据及控制目的。

通信模块是链接用户端及硬件端的桥梁,由指令通过这个模块收发HTTPS与服务器和硬件通信,控制硬件的工作,监测是发送控制的逆过程。

温度和湿度传感器可检测土壤的温度及湿度状态,数据发送控制器处理,来决定是否驱动外围设备工作。

水泵模块作为外围设备,主要功能是为土壤浇水,从而达到湿润土壤、降温的目的。实现的方法如下代码所示: 3 结语

系统在稳定的Internet上正常工作,但是当网络信号较差时会出现工作不稳定的情况。在未来的时间里,团队会对本系统做升级,让本产品更加完善。 参考文献

Nadareishvili, I., Mitra, R., McLarty, M., Amundsen, M. Microservice Architecture: Aligning Principles, Practices, and Culture[J]. O’Reilly, 2016. Martin Fowler. \"Microservices\":http://martinfowler.com/articles/microservices.html. IFS: Microservices Resources and Positions:http://www.ifs.hsr.ch/index.php?id=15266&L=4.

Official website, Spring Cloud: https://spring.io/.

Red Hat takes OpenShift platform cloud private: https://www.openshift.com/.

Markoff, John (November 4, 2007). \"I, Robot: The Man Behind the Google Phone\". The New York Times. Retrieved February 15, 2012 .

Github, AndroidAnnotation: https://github.com/androidannotations/androidannotations. Official website, Arduino LLC: https://www.arduino.cc/.

因篇幅问题不能全部显示,请点此查看更多更全内容