植物监控(基于 Android+机智云的室内植物墙智能控制系统设计)

Posted

篇首语:人生必须的知识就是引人向光明方面的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了植物监控(基于 Android+机智云的室内植物墙智能控制系统设计)相关的知识,希望对你有一定的参考价值。

植物监控(基于 Android+机智云的室内植物墙智能控制系统设计)

本文是由开发者设计的一个基于 Android +机智云的室内植物墙智能控制系统,打造室内小型化的可智能监控植物墙,完成在线监测温湿度、二氧化碳浓度、甲醛浓度、光照强度,并可控制水泵进行灌溉等。

基于Arduino 平台设计一个多传感器的硬件系统,并利用WiFi 芯片与机智云平台连接,通过云平台与 Android 手机移动端进行交互,从而实现在手机上查看当前数据并控制系统的功能。

系统总体设计方案

室内植物墙智能控制系统的设计目的是为想要在室内养护较多花草植物却又没有充足的时间与精力的人群提供一个符合需求的解决方案。

为此室内植物墙智能控制系统功能实现有:

① 实时获取当前温湿度、甲醛浓度、光照强度、二氧化碳浓度等数据,以便清楚得知室内空气环境变化,更加科学的养护植物;

② 将实时获取到的数据展现在移动端,提高养护植物的乐趣,调动人群的积极性;

③ 能够由移动端远程控制水泵浇水等动作,将养护植物的难度进一步降低,提高植物存活能力。

系统总体结构可以分为植物墙设计、硬件电路设计、软件服务设计三个部分,具体设计如图所示:

智能控制系统硬件以及电路设计

1、室内植物墙设计

结合市面植物墙产品设计的优缺点,确定本系统所使用的植物墙方案,墙架主体包括循环灌水式水箱、可移动式铁架、自由摆放植物木架三个部分,其组合实物图如下所示。

2、硬件选择及电路设计

◆ 中央处理器:

整个硬件部分以 Arduino Uno R3板为核心,搭配各种传感器及相应配套电路。

◆ 温湿度传感器:

本系统采用DHT11传感器,其供电电压与 Arduino板的输出电压相对应。

◆ 甲醛浓度检测传感器:

选择检测方法为电化学法的DS-HCHO数字式传感器。

DS-HCHO 引脚说明:

光照强度传感器:

选用TSL2561 传感器,实现自行编程设置光照阈值,当实际光强超过阈值时能够产生中断信号。

二氧化碳浓度传感器:

采用MG811的检测传感器,可探测的浓度范围为 0 到 10000ppm,具有温度补偿功能,能够实现全温度范围下检测二氧化碳浓度。

◆ 水泵开关电路设计:

选用电磁式的继电器,输入电流只需要 5V 直流电流,可以对 220V、10A 交流的电路进行控制,与 Arduino 板搭配使用很合适,其接线示意图如图所示。

◆ WiFi电路设计:

本系统采用乐鑫的 ESP8266 芯片作为 WiFi 通信芯片。

ESP8266 引脚说明:

系统软件程序设计

1、温湿度检测程序

引用了DHT11库文件后的驱动程序编写如下:

//引用 DHT11 的库文件#include <DHT11.h> //创建实例化对象DHT11 DHT;//定义 2 号引脚为温湿度测量的引脚#define DHTPIN 2//设置波特率为 9600void setup()Serial.begin(9600);//循环函数void loop()//将读取到的值赋给 ckint ck = DHT.read(DHTPIN);//若无问题就打印 OK if (ck == DHTLIB_OK)Serial.println(“OK”);//出现校验和错误else if(ck == DHTLIB_ERROR_CHECKSUM)Serial.println(“CHECKSUM ERROR”);//出现超时错误else if(ck == DHTLIB_ERROR_TIMEOUT)Serial.println(“TIMEOUT ERROR”);//出现未知错误 else Serial.println(“UKNOWN ERROR”)//打印温度及湿度值Serial.println(“Temperature: ” + DHT.temperature);Serial.println(“Humidity(%):” + DHT.humidity);//延时 1000 毫秒开始下一次循环delay(1000);

2、甲醛浓度检测程序

分析清楚传感器通信格式后,可编写代码如下:

//引用软串口库文件#include <SoftwareSerial.h>//将 5,6 号口分别设为接收和发送串口SoftwareSerial mySerial(5, 6);//将需要发送给传感器的七个数放在数组中unsigned char hdata[7] = 0x42,0x4d,0x01,0x00,0x00,0x00,0x90; void setup()//设置软串口的波特率为 9600 mySerial.begin(9600);//设置硬串口的波特率为 9600 Serial.begin(9600);//传感器预热 10 秒 delay(10000);void loop() //将数组中的命令串通过软串口发给传感器 mySerial.write(hdata,7);  while (mySerial.available())//若传感器中有数据返回则执行下面的函数 SerialData(mySerial.read());  //每次测量间隔 1 秒 delay(1000);//函数的具体实现char SerialData(unsigned char ucData)//创建一个数组存储每次获得的数据 static unsigned char ucRxBuffer[100]; //计数归零 static unsigned char ucRxCnt = 0;//数据当量 long ht=0;//返回的数据 long ha=0;//实际数据 float ho=0;//将返回的数据按序存入数组中 ucRxBuffer[ucRxCnt++]=ucData;//校验起始符,若不符合直接返回 if (ucRxBuffer[0]!=0x42&&ucRxBuffer[1]!=0x4D) ucRxCnt=0; return ucRxCnt; if (ucRxCnt<11)return ucRxCnt; else//第六个数为数据当量 ht=(float)ucRxBuffer[5];//测量数据为第七八位,转换公式如下 ha=(float)ucRxBuffer[6]*256+(float)ucRxBuffer[7];//数据当量为 3 ,则实际值为测量值除 100 if(ht==3)  ho=ha*0.01;//数据当量为 2 ,则实际值为测量值除 10 if(ht==2) ho=ha*0.1;//数据当量为 1 ,则实际值即为测量值 if(ht==1) ho=ha;//将实际值通过硬串口输出 Serial.print("hcho :"); Serial.println(hcho); ucRxCnt=0; return ucRxCnt; 

3、光照强度检测程序

TSL2561传感器能够将光强直接转换为数字信号输出,其具体传输流程如下所示:

其部分程序代码如下:

//引用相关文件库#include <SFE_TSL2561.h>#include <Wire.h>// 实例化对象SFE_TSL2561 tsl;// 设置全局变量boolean g; // 增益值,0 代表无增益,1 代表 16 倍增益unsigned int ms; // 混合时间void setup() // 初始化串口 Serial.begin(9600); tsl.begin(); g = 0; // 如果 t = 0, 混合时间为 13.7ms // 如果 t = 1, 混合时间为 101ms // 如果 t = 2, 混合时间为 402ms unsigned char t = 2; // 传感器上电,开始测量 tsl.setPowerUp();void loop() //延时 delay(ms); //d0 表示通道 0 采集到的数据,d1 表示通道 1 采集到的数据 unsigned int d0, d1; if (tsl.getData(d0,d1))  Serial.print("d0: "); Serial.print(d0); Serial.print("d1: "); Serial.print(d1); double lux; // 光强值 boolean yes; // 判断传感器是否正常 yes = tsl.getLux(gain,ms,d0,d1,lux); //输出光强值 Serial.print(" lux: "); Serial.print(lux); //输出传感器正常与否,yes 表示正常,no 表示不正常 if (yes) Serial.println(" (yes)");else Serial.println(" (no)"); 

4、二氧化碳浓度检测程序

基于二氧化碳传感器相关变量的对应关系,可以设计二氧化碳浓度检测程序,部分代码如下:

//定义引脚为 7 号 #define MG_PIN (7);//采样间隔为 100 毫秒#define SAMPLE_INTERVAL (100);//采样次数为 10 次 #define SAMPLE_TIMES (10);void setup()  //初始化串口Serial.begin(9600);void loop() float volts;int p;//通过函数得到电压值volts = MGGet(MG_PIN);//将电压值换算为浓度p = pow(10,(0.61-volts)/0.075);//输出 Serial.print(“CO2: ”); Serial.print(p);Serial.print(“ppm ”);Serial.print(“\\n”);delay(200);//函数float MGGet(int a) int i; float v = 0;//每次间隔 100 毫秒采样一次,共采样 10 次并求平均,将毫伏换算为伏特 for (i=0;i<SAMPLE_TIMES;i++)  v += analogRead(a); delay(SAMPLE_INTERVAL);  v = (v/SAMPLE_TIMES) /1000 ; return v;

5、水泵开关设置程序

水泵开关需要明确高电平导通,低电平断开即可,部分代码如下所示:

//选择引脚为 8 号const int pin = 8;void setup()  //设置引脚模式为输出pinMode(pin,OUTPUT);void loop() //高电平,继电器导通digitalWrite(pin,HIGH);//持续 100 秒 delay(100000); //低电平,继电器断开digitalWrite(pin,LOW); //持续 100 秒 delay(100000);

6、WiFi连接程序

Wi-Fi 模块作为连接客户端与 Arduino 平台的中间模块,在程序上选择刷入机智云的固件,这样的好处在于能使用机智云的云平台服务,具体内容会在后续介绍。

系统服务端以及移动端设计

本系统的软件部分可为服务端与移动端,系统服务端采用机智云物联网云平台,移 动端基于机智云的 Android SDK 进行深度二次开发设计。

1、服务端设计

◆ 机智云物联网云平台介绍

机智云提供一站式的物联网服务平台,包含硬件开发及云服务,并且面向个人及企业开发者,开发者通过物联网云平台,可以实现从硬件开发到应用开发及云端开发的功能,其云平台的架构如下所示。

◆ 设备接入设计

机智云提供多种硬件设备接入方案,例如购买官方开源套件就可自动实现接入云端,也可通过将 GAgent 固件烧录进 WiFi模组中,从而实现与机智云平台的连接。

GAgent 固件可以看作是一款运行在通信模块中的软件,提供模块与上层应用(包括移动客户端及云端等)的双向通信,无需关注通信的具体协议及细节,也不需要进行专门的 TCP传输设计。

考虑到本系统以 Arduino 板为核心,以 ESP8266 为通信模块,完美契合机智云给出的解决方案中烧录固件的形式,因此,本系统采用烧录固件的方案、

具体接入步骤如下:

在机智云官方网站上找到所需的固件资源,选择与通讯模块相匹配的 GAgent 固件及烧录软件进行下载,选即择第二个GAgent for ESP8266 进行下载,如图 所示。

►下载烧写软件工具工具 | 乐鑫科技

►将 WiFi 模块与 USB 转 TTL 模块相连接,进入烧录模式,需要注意的是,在进入烧录模式后,USB 转 TTL 模块提供的电压已无法满足 WiFi 模块的供电需求,此时需要有外部电源对 WiFi 模块提供 3.3V 的电压,两个模块具体的接线如图所示。

►具体而言就是两个模块的 TX 与 RX 交叉连接,外部电源正极与 Wi-Fi 模块的 VCC 及 EN相连,外部电源的负极与 Wi-Fi 模块的 IO0、IO2、GND 及转串模块的 GND 相连,在RST 于 GND 之间连接一个开关。

►在硬件电路连接好,需要用到的软件及固件都下载好后,打开烧录软件,依据说明选择相应的选项,点击 START 键后按下复位开关即可开始进行烧录,最后烧录成功后如图所示。

►创建产品:接下来在机智云平台创建一个产品,命名为“智能植物墙”,技术方案选择 WiFi方案,数据传输方式为定长,完成创建后如图所示。

►下一步是设置数据点,所谓数据点即是希望系统采集或者控制的数据,读写类型分为只读与可写两类,数据类型分为数值与布尔值等,本系统设置了六个数据点,如表所示。

►在机智云平台上创建数据,完成后如图所示。

►设置好数据点后进入 MCU 开发环节,选择独立 MCU 方案,硬件平台选择Arduino UNO R3,如图所示。

►填写产品密钥,产品密钥在产品基本信息一栏,是作为 APP 开发和服务器对接时需要使用的参数,如图所示。

►输入密码后即可显示完整密钥,然后复制粘贴即可。完成后点击生成代码包,稍等片刻即完成,如图所示。

2、移动端设计

关于移动APP的设计,可以采用基于机智云开源框架二次开发设计智能控制系统APP。

从实际需求出发,移动端应该具有以下几个功能:

① 用户注册及登录:智能植物墙系统作为一个物联网项目,对每个用户而言,基于信息保密原则需要有自己的账号,账号与设备一一对应,因此用户注册及登录功能必不可少;

② 设备绑定与解除绑定:用户在登录移动端后首先需要做的就是与自己的设备进行绑定,以便进行下一步的操作,在绑定了设备后还需要能够解绑;

③ 数据采集及设置:与设备绑定后需要能够实现实时显示采集到的数据,并且能够控制硬件设备。

移动端完整的工作流程如下:

点击移动端,展示欢迎界面,调用登录接口让用户通过注册或者直接登录的方法登录移动端,设备提前接入网络,调用设备绑定接口在移动端配置设备并与之绑定,绑定设备完成后,展示设备列表,点击具体绑定的设备,实时查看当前数据,并能与设备进行交互。

移动APP端的登录及注册界面效果:


最终完整配置流程界面:

在完成设备的绑定后该设备就会出现在移动端中,需要对云端返回的设备采集到的数据进行可视化处理,设计展示界面及开关控制功能。

最终的参数查询及控制界面:

其部分程序代码如下:

// 数据点"水泵开关"对应的标识名protected static final String KEY_SWITCH = "Switch";// 数据点"室内温度"对应的标识名protected static final String KEY_TEMPERATURE = "Temperature";// 数据点"室内湿度"对应的标识名protected static final String KEY_HUMIDITY = "Humidity";// 数据点"甲醛浓度"对应的标识名protected static final String KEY_HCHO = "HCHO";// 数据点"二氧化碳浓度"对应的标识名protected static final String KEY_CO2 = "CO2";// 数据点"光照强度"对应的标识名protected static final String KEY_LIGHT = "Light";// 数据点"水泵开关"对应的存储数据protected static boolean data_Switch;// 数据点"室内温度"对应的存储数据protected static int data_Temperature;// 数据点"室内湿度"对应的存储数据protected static int data_Humidity;// 数据点"甲醛浓度"对应的存储数据protected static double data_HCHO;// 数据点"二氧化碳浓度"对应的存储数据protected static int data_CO2;// 数据点"光照强度"对应的存储数据protected static int data_Light;protected void getDataFromReceiveDataMap(ConcurrentHashMap<String, Object> dataMap) if (dataMap.get("data") != null) ConcurrentHashMap<String, Object> map = (ConcurrentHashMap<String, Object>) dataMap.get("data");for (String dataKey : map.keySet()) if (dataKey.equals(KEY_SWITCH)) data_Switch = (Boolean) map.get(dataKey);if (dataKey.equals(KEY_TEMPERATURE)) data_Temperature = (Integer) map.get(dataKey);if (dataKey.equals(KEY_HUMIDITY)) data_Humidity = (Integer) map.get(dataKey);if (dataKey.equals(KEY_HCHO)) if (map.get(dataKey) instanceof Integer) data_HCHO = (Integer) map.get(dataKey); else data_HCHO = (Double) map.get(dataKey);if (dataKey.equals(KEY_CO2)) data_CO2 = (Integer) map.get(dataKey);if (dataKey.equals(KEY_LIGHT)) data_Light = (Integer) map.get(dataKey); 

05


系统设计总结

基于Android +机智云平台的室内植物墙智能控制系统由植物墙、硬件电路及移动控制端等组成,通过市场调研确定植物墙的设计方案,以 Arduino 作为硬件平台并辅以各类传感器,组成环境信息探测采集系统。

以ESP8266 为 Wi-Fi 芯片并刷入机智云固件,作为桥梁将硬件系统与机智云平台相连接。以 Android 平台作为移动端的选择,以机智云开源框架为基础设计移动端,以实现对硬件系统的远程控制。在实时监测室内环境数据的同时远程控制水泵灌溉开关,降低了绿植养护的难度,提高了绿植养护的乐趣。

设计完善的植物墙养护植物图:

由于继电器端口的原因,水泵无法直接与之相连,因此用一个改装过的插座来代替,通过继电器控制插座的通断电从而控制插在插座上的水泵,以此起到开关的作用。

完整的硬件电路连接图:

将项目代码编译打包运行,通过 Android Studio 的调试功能将生成的完整移动端安装到手机上并打开,如图所示从左到右依次为移动端下载安装完成图、移动端打开后欢迎页、登录页、点击跳过后移动端内容页,即为移动端首次运行的页面。

测试注册及登录功能图:

在经过配置——选择无线网络——选择无线模组——搜索设备并连接的流程后,在移动端中出现了“智能植物墙”这一设备,这表明设备能够顺利完成与移动端的绑定操作。

测试绑定后的设备实现远程查看数据并控制水泵开关。

相关参考

深圳PH探头(基于机智云的一种智能水质检测仪设计)

...积过大使用不便,检测参数单一以及不能对水质进行实时监控显示的问题,设计了一款便携式水质在线检测仪。设计以STC8A8K64S4A12单片机为控制器,由温度采集模块、pH测量模块、TDS检测模块等完成水质的温度、pH及TDS参数的检测...

水泥墙面怎么变漂亮(朋友都说他机智,家里留面景观墙,种花种菜都行,水泥墙早看腻了)

...实还挺多,我们就从制作景观墙的绿植种类来看起:水培植物→说到水培,很多人会想到水培蔬菜种植,相同的,水培植物也可以做成景观墙。不过做法会稍微复杂一点,墙面除了安装种植水培植物的培养盆以外,墙面内部需要...

植物墙哪里有(室内植物墙养护从哪儿做起?)

植物墙因为它的生态特性备受人们的喜爱,但是要把植物墙搬到室内去,有的人就开始有些犹豫了。问题在哪儿?他们担心室内植物墙植物成活时间短,会大面积死亡,养护起来麻烦等等。植物墙后期养护虽然不难但是也是植物...

植物墙雕塑(渝泽园林:如何让重庆室内植物墙更好地绽放生命力?)

出色的植物墙不仅仅是将植物堆叠在一起。核心是扩大其影响力。其次,它的外观也是必不可少的。它要求设计和施工人员引入非植物修饰元素来进行对比和对比,以增强其感官效果。除了传统的框架,LOGO,雕塑外,所使用的...

植物墙常用植物(植物墙能种什么植物,后期如何维护?)

现在立体植物墙的应用范围越来越广,它不但可以在居住空间的书房、客厅、卧室等布置,并且可以作为招来和取悦顾客的手段,装饰在商场、办公室、剧场、宾馆、酒吧、车站等公共建筑室内。立体植物墙适合种哪些植物1.蕨...

植物墙植物都有哪些(10个精美的家居植物墙,一个比一个经典)

给植物一个家。。。家居植物墙一直是植物墙行业所关注的热点,民用的力量是伟大的,随着人居生活水平的提高,对像植物墙一样的带有自然与生机性的室内景观的诉求越来越多,也越来越高。但因为家居环境的限制,在家居...

植物仿真墙(仿真植物墙,定制个性,与众不同)

仿真植物墙,是通过利用仿真植物,搭配其他材料制作出的,用于室内外装饰的一类产品的统称。通过高仿真产品来代替真的绿植,达到装饰空间,美化环境的目的。随着社会经济的发展与城市化进程,人们的生活节奏也日渐加...

植物墙(9年立体绿化经验,她做出的植物墙让人眼前一亮)

面对城市绿地紧张和高楼林立的现状,立体绿化正在成为新的室内设计流行元素,不仅能为居住者带来视觉上的享受,提供一处室内氧吧,还能稳定人的情绪、缓解心理压力,促进居住者的身心健康。在国内的立体绿化行业里,...

温州室内空气净化(植物生病也可以住院了揭秘温州首家植物医院)

...吗?”……提到“宠物医院”大家都不陌生,但要说起“植物医院”,许多人还是第一次听说。2月15日上午,市民张大妈正为自家盆栽不开花的问题向温州植物医院的“植物医生”求助。首家公益性植物医院温州植物医院坐落在...

温州室内空气净化(植物生病也可以住院了揭秘温州首家植物医院)

...吗?”……提到“宠物医院”大家都不陌生,但要说起“植物医院”,许多人还是第一次听说。2月15日上午,市民张大妈正为自家盆栽不开花的问题向温州植物医院的“植物医生”求助。首家公益性植物医院温州植物医院坐落在...