资讯详情

LabVIEW Arduino RS-485智能农业监测系统(项目篇—4)

1、项目概述

2、项目架构

3.传感器选型

3.1.温湿度传感器

3.2.光强传感器

3.3.水传感器

4、硬件环境

5、Arduino功能设计

6、LabVIEW功能设计

6.1.前面板设计

6.2.程序框图设计


1、项目概述

智能农业是当前农业发展的新方向,根据作物生长习惯及时调整土壤条件和环境参数,投资最少,改变传统农业必须依靠环境种植和广泛的生产管理模式,提高农产品质量和质量,调整农业产业结构,确保农产品总产量,有效利用各种农业资源,可以获得可观的经济和社会效益。

在农业生产过程中,温度、湿度、光照强度、CO2.浓度、水等营养物质等自然因素共同影响作物生长。传统农业的管理模式远未达到精细管理的标准,只能视为广泛管理。在这种管理模式下,上述环境参数通过人的感知能力进行管理,不能满足准确性的要求。智能农业是通信、计算机、农业等多个学科和领域共同发展的产物。它整合了信息收集、传输、处理和控制,使人们更容易获得作物生长各个阶段的各种信息,也使人们更容易控制这些信息,通过人工智能与农业生产的结合,真正实现人与自然的互动。

智能农业的核心问题可以概括为以下四个部分,即农业信息获取、信息管理、信息分析决策和决策决策的具体实施政策。在这四个部分中,获取农业信息是智能农业的起点,也是一个非常关键的点。如果你不能准确、实时地获取农业信息,你就不能建立一个真正的智能农业。要实现智能农业,需要建立一个实用、可靠、可长期监测的农业环境监测系统。

随着通信、计算机、传感器网络等技术的快速发展,将物联网应用于农业监测系统是当前的发展趋势,它将收集温度、湿度、光强、土壤水分、土壤温度、植物生长等农业信息加工、传输和利用,为各时期农业生产的准确管理和预警提供信息支持,追求最低资源消耗,使农业增长从主要依赖自然条件和自然资源到主要依赖信息资源,使不可控产业得到有效控制。

2、项目架构

本博文将介绍一个基于Arduino与LabVIEW智能农业监测系统可实现作物生长环境参数的实时采集,以及上位机监测软件的数据分析和远程监测。采用数据采集终端设备Arduino上位机软件作为控制控制核心LabVIEW,两者通过RS-485总线只需要在田垄之间进行通信RS-组网通信可通过485布线实现。

下载项目资源请参见:LabVIEW Arduino RS-485智能农业监测系统实战项目

3.传感器选型

3.1.温湿度传感器

SHT11是瑞士Sensirion公司推出的数字温湿度传感器芯片将传感元件和信号处理电路集成在微电路板上,输出完全校准的数字信号CMOSens专利技术保证了产品的高可靠性和卓越的长期稳定性。传感器芯片包括一个电容聚合物湿度敏感元件和一个由能量间隙材料制成的温度测量元件,并在同一芯片上与14位A/D转换器和串行接口电路实现无缝连接。因此,广泛应用于暖通空调、汽车、消费电子、自动控制等领域。

每个传感器芯片都标记在非常精确的湿度腔内,校准系数以程序形式存储在OTP内存用于内部信号校准。两线系统的串行接口和内部电压调整使外围系统集成快速简单。体积小,功耗极低,使SHT成为各种应用的首选。

3.2.光强传感器

BH1750FVI它是一种两线串行总线接口的数字光强度传感器。液晶或键盘背景灯的亮度可以根据收集的光强数据进行调整,其高分辨率可以探测到更大范围的光强度变化。BH1750FVI光传感器模块如下图所示:

3.3.水传感器

专业农用水分传感器价格昂贵,这里选择价格较低的电阻式水分传感器,如下图所示:

4、硬件环境

将SHT11温湿度传感器VCC、GND、SCK、DATA分别接至Arduino Uno控制板上的 5V、GND、模拟端口A2和A3。

将BH1750FVI光传感器VCC、GND、SCL、SDA和ADD分别接至Arduino Uno控制板上的 5V、GND、SCL、SDA和GND,这里没有在硬件连接图上表示。

水传感器VCC、GND、Vout分别接至Arduino Uno控制板上的 5V、GND和模拟端口A这里在硬件连接图上表示。

将MAX485模块的VCC、GND、RO、DI分别接至Arduino Uno控制板上的 5V、GND、RX和TX,将RE和DE端接到数字端口D用于控制收发信号。

Arduino Uno与MAX485和SHT如下图所示:

5、Arduino功能设计

在基于RS-在485总线的智能农业监测系统中,每个节点配置一个Arduino Uno控制器通过MAX485模块挂在RS-485总线上。Arduino Uno控制器需要完成以下功能:接收和判断命令,收集和传输温湿度、光和水数据。Arduino Uno控制器利用MAX485模块通过串口从串口出发RS-485总线接收上位机发送的命令,分析有效命令,然后根据命令码收集温度、湿度、光和水数据,并上传到LabVIEW软件。

智能农业监测系统Arduino控制器程序代码如下所示:

#include <Wire.h>#include <SHT1x.h>#define temp_Command          0x10   //采集命令字#define humidity_Command      0x20   //A1采集命令字#define water_Command         0x30   //D1采集命令字#define illumination_Command  0x40   //D0采集命令字// GY-30// BH1750FVI// in ADDR 'L' mode 7bit addr#define ADDR 0b0100011// addr 'H' mode// #define ADDR 0b1011100// Specify data and clock connections and instantiate SHT1x object#define dataPin  A3#define clockPin A2SHT1x sht1x(dataPin, clockPin);byte comdata[3]={0};      //定义数组数据,存放串口接收数据float temp_c;float humidity;int dustPin=0;int dustVal=0;int Water_Val=0; int Illumination_Val = 0;void receive_data(void);      //接受串口数据void test_do_data(void);      //测试串口数据是否正确,并更新数据void setup(){  Serial.begin(9600);        Wire.begin();   Wire.beginTransmission(ADDR);  Wire.write(0b00000001);  Wire.endTransmission();}void loop(){  while (Serial.available() > 0)   //不断检测串口是否有数据   {        receive_data();            //接受串口数据        test_do_data();            //测试数据是否正确并更新标志位   }}void receive_data(void)       {   int i ;   for(i=0;i<3;i++)   {      comdata[i] =Serial.read();      //延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,       delay(2);   }} void test_do_data(void){  if(comdata[0] == 0x55)            //0x55和0xAA均为判断是否为有效命令   {     if(comdata[1] == 0xFF)     {        switch(comdata[2])          {               case temp_Command:                   temp_c = sht1x.readTemperatureC();                Serial.print(temp_c, 2);                   break;            case humidity_Command:                    humidity = sht1x.readHumidity();                 Serial.print(humidity,2);                 break;            case water_Command:                    Water_Val=analogRead(A0);                 Serial.print(Water_Val);                                     break;            case illumination_Command:                                     // reset                  Wire.beginTransmission(ADDR);                  Wire.write(0b00000111);                  Wire.endTransmission();                   delay(100);                   Wire.beginTransmission(ADDR);                  Wire.write(0b00100000);                  Wire.endTransmission();               // typical read delay 120ms                  delay(120);                   Wire.requestFrom(ADDR, 2); // 2byte every time                   for (Illumination_Val=0; Wire.available()>=1; ) {                  char c = Wire.read();                  //Serial.println(c, HEX);                  Illumination_Val = (Illumination_Val << 8) + (c & 0xFF);                  }                   Illumination_Val = Illumination_Val / 1.2;                  Serial.println(Illumination_Val);                                           break;                         }       }   }}

6、LabVIEW功能设计

LabVIEW上位机部分需要完成如下功能:根据所选择的节点向RS-485总线上发送不同节点号的温度、湿度、光照、水分的数据采集命令,Arduino控制器通过串口和MAX485模块从RS-485总线上接收上位机命令,然后判断接收的命令中的节点号是否与自己的节点号匹配,如果匹配则实现相应的数据采集之后并将采集的数据回传,LabVIEW软件将回传的数据显示在前面板上;如果不匹配则舍弃当前接收的上位机命令,重新等待下次命令的到来。

6.1、前面板设计

LabVIEW前面板分为节点选择、工作指示灯和数据显示模块,节点选择用于选择当前监测的节点,将其数据显示在显示模块上;工作指示灯用于该节点是否正常工作;显示模块主要用于显示当前的数据,包括温度、湿度、光照和水分情况。

基于Arduino与LabVIEW的智能农业监控系统的LabVIEW上位机前面板,如下图所示:

6.2、程序框图设计

采用条件结构+移位寄存器的状态机来实现LabVIEW上位机主程序,将主程序划分为5个状态:0状态为串口初始化,1状态为温度测量,2状态为湿度测量,3状态为光照测量,4状态为水分测量,且初始状态为0状态(串口初始化)。

为了更好地实现通信,制定如下的通信协议:帧头+节点代号+操作码。0x55为帧头,节点代号有0xA1为节点0的代号,0xA2为节点1的代号,0xA3为节点2的代号,0xA4为节点3的代号,0xA5为节点4的代号,操作码有0x10为温度采集,0x20为湿度采集,0x30为光照采集,0x40为水分采集。

在0状态中,通过设置的串口号来初始化串口通信,如下图所示:

在1状态中,读取温度数据并显示,如下图所示:

在2状态中,读取湿度数据并显示,如下图所示:

在3状态中,读取光照数据并显示,如下图所示:

在4状态中,读取水分数据并显示,如下图所示:

最后,关闭串口通信。

由于RS-485总线具有抗干扰能力强的优点,适合用于可靠性要求高的场合,本节介绍的智能农业监测系统采用RS-485总线作为每个子节点与总站的通信方式,如果需要检测的面积较大,监测密度较为稀疏,RS-485总线方式需要很多的线材,则采用ZigBee无线通信方式更为实用。由于农业专业的传感器价格较为昂贵,本部分采用较为低廉的传感器来实现了一个简易的监测,如果需要专业应用,则需要购买农业专用的传感器。

项目资源下载请参见:LabVIEW Arduino RS-485智能农业监测系统【实战项目】

标签: 电阻式湿敏传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台