写点什么

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

  • 2022 年 6 月 19 日
  • 本文字数:4315 字

    阅读完需:约 14 分钟

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

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 内存中,用于内部的信号校准。两线制的串行接口与内部的电压调整,使外围系统集成变得快速而简单。微小的体积、极低的功耗,使 SHT11 成为各类应用的首选。

​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 和模拟端口 A0,此处在硬件连接图上表示出来。

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

Arduino Uno 与 MAX485 和 SHT11 的硬件连接,如下图所示:


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智能农业监测系统【实战项目】

发布于: 刚刚阅读数: 3
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

嵌入式工程师,创客爱好者,公众号:美男子玩编程,全网粉丝10万+,软著专利10余项。 CSDN博客专家、微软MVP、华为云云享专家、阿里云专家博主、知乎认证科学技术领域答主。

评论

发布
暂无评论
LabVIEW Arduino RS-485智能农业监测系统(项目篇—4)_传感器_不脱发的程序猿_InfoQ写作社区