赋能智慧农业:Microchip和LoRa助你打造更高水平的未来农场
发布于2023-04-18
环境和土壤质量
无论是在后院还是大型农场种植作物,了解环境和土壤的质量对于做出影响植物性食品质量、营养价值和产量的明智决定都是非常有必要的。
必须监控的一些关键变量包括:
温度
极高和极低的温度会对植物产生不利影响。高温会导致光合作用和呼吸作用的失衡,从而导致植物生长衰弱。相反,低温会导致植物细胞冻结,从而抑制植物获得营养。
湿度
较高的相对湿度会阻止植物在蒸腾过程中蒸发水分。它还可以阻止植物从土壤中吸收养分。如果允许这些条件继续维持下去,植物可能会腐烂或受到细菌或霉菌感染。
水分含量
土壤中的含水量必须保持在最佳水平,以为植物提供理想的生长环境。水分过多会导致根系腐烂,从而阻碍植物从土壤中提取氧气。如果水分太少,营养物质就无法在植物中循环。
pH值
在化学课上,我们了解到pH值是一种指示物质酸碱度的方法。测量范围从0.0(电池酸液等酸性物质)到14.0(碱液等碱性物质)。pH值为7.0被认为是中性物质。尽管理想的pH值因植物而异,但土壤的最佳pH值在5.5至7.0之间。
CO2浓度
所有类型的植物都会吸收二氧化碳 (CO2),通过光合作用将其与水 (H2O) 合成所需的有机物, 而氧气 (O2) 作为副产品被释放出来。与其他因素一样,CO2过多或过少都会对植物生长和健康产生不利影响。我们通常把250至350ppm认为是室外环境正常浓度的参考标准。空气流通良好的室内环境应具有350ppm至1000ppm的浓度。
项目材料与资源
该项目设计使用了Microchip Technology的Xplained板,这是快速原型设计的理想选择,同时还使用了一组传感器,让系统能够监测上面所述的五个环境因素。这些传感器包括:
- Microchip Technology基于ATSAMD10的STEMMA土壤湿度传感器
- Bosch BME280温湿度传感器
- DFRobot SEN0249土壤pH值传感器
- DFRobot MG-811 CO2传感器
物料清单 (BOM)
表1列出了所需的物料清单 (BOM)。您也可以在Mouser.cn获取所需的所有预加购元件。
表1:此植物健康监测项目BOM表列出了您需要的所有元件。
|
数量 |
贸泽编号 |
说明 |
|
1 |
开发板和套件 - AVR ATMEGA328PB评估套件 |
|
|
1 |
RF开发板 - LoRa 2 Click |
|
|
1 |
温度传感器开发工具 - Weather click板 |
|
|
1 |
STEMMA土壤传感器 - I²C电容式湿度传感器 |
|
|
1 |
模拟矛尖Tip pH传感器/仪表套件(用于土壤和食品应用) |
|
|
1 |
模拟红外CO2传感器 |
|
|
1 |
跳线 - ZipWire MI-MI 20cm 40 UnzippWires x20cm |
|
|
1 |
PCB和面包板 - 830点透明无焊面包板 |
资源
计算资源
- 运行MPLAB X IDE的Windows电脑
- Wi-Fi®网络
- Medium One账户,可付费使用
- Wi-Fi GitHub®软件文件
- LoRa GitHub软件文件
- AVR®和Arm®工具链(C语言编译器)
- Microchip ATmega Series Device Support (2.0.12)
软件文件
Microchip Technology Xplained板可使用MPLAB X IDE进行编程。除了元器件供应商提供的预构建库外,该项目还需要主项目文件中的其他文件。首先是在Microchip Technology Xplained板上运行的固件文件。其次是,ArduinoCore/Include文件夹中的AA头 (.h) 文件,用于存储敏感数据,如密码和应用程序编程接口 (API) 密钥(这是用户应该避免在GitHub上与全世界共享的东西)。最后就是应该附加到主项目文件的库项目 (ArduinoCore),该文件包含了各设备所需的一切。原始项目文件使用Atmel Studio 7创建,并导入到MPLAB X IDE中。要构建此程序,您需要包含AVR工具链以及器件支持包,上面均提供了链接。主项目文件位于SmartAgFirmware文件夹中。
工具与其他资源
建议使用以下工具来帮助完成项目:
- 剥线器
- 数字万用表
- 尖嘴钳
- 面包板
- 上拉电阻器(如果I²C总线需要)
项目技术概述
本项目中使用的传感器板以两种方式与Xplained微控制器板通信:通过数字方式利用I²C串行通信协议或通过微控制器的模数转换器 (ADC) 读取的模拟信号。
STEMMA土壤湿度传感器
STEMMA土壤湿度传感器通过I²C进行通信。该传感器测量两个探针之间的电容差异并提供报告,能够测量300至500的土壤含水量整数值。
BME280温度传感器
BME280温度传感器通过I²C进行通信。它提供的是以摄氏度为单位的浮点数。该值可使用以下公式转换为华氏度:
F = Cx 9/5 + 32
BME280湿度传感器
BME280湿度传感器通过I²C进行通信。它提供的是以相对湿度百分比为计量单位的浮点数。
SEN0249土壤pH值传感器
SEN0249土壤pH值传感器的输出为0至5VDC的模拟信号。pH值是一个从0到14的无单位测量值。pH值计算公式如下:
电压 = ADCx (5V/1,024)
其中,ADC是由连接到pH传感器的微控制器ADC引脚读取的值。
此公式假设微控制器采用5V工作电压和10位ADC。如果您使用具有不同工作电压和/或ADC分辨率的替代微控制器,则可能需要调整这些数字。然后计算pH值:
pH值 = (3.5x 电压) + 偏差
偏差是在pH传感器的校准过程中确定的变量。请注意,此传感器必须每两小时重新校准一次。更多有关校准过程的信息,请访问DFRobot网站。
MG-811 CO2传感器
MG-811 CO2传感器的输出为0至5VDC的模拟信号, CO2浓度的计量单位是ppm。以下公式用于将模拟电压值转换为以ppm为单位的CO2浓度:
电压 = ADCx (5V/1,024)
其中,ADC是由连接到MG-811 CO2传感器的微控制器ADC引脚读取的值。
此公式假设微控制器采用5V工作电压和10位ADC。如果您使用具有不同工作电压和/或ADC分辨率的替代微控制器,则可能需要调整这些数字。如果计算所得电压小于0.4V,则表示传感器尚未充分预热,此时不应该进行读取。一旦电压上升到0.4V以上,可以使用以下公式计算最终CO2浓度:
CO2浓度 (ppm) = [(电压 − 0.4) x 5000]/1.6
组装电子产品
这个项目的组装过程很简单。首先,我们需要一个小的面包板,因为有两个器件需要访问I²C串行通信总线。开发板的好处在于,配备了I²C总线工作所需的上拉电阻器。然而,在制作集成这些器件的自定义印刷电路板 (PCB) 时,请记住串行数据线 (SDA) 和串行时钟线 (SCL) 上的电阻器。有关I²C定制操作的更多提示,请查看贸泽的博文Chip To Chip: Tips For Using I²C。
STEMMA土壤湿度传感器
- 将4线JST电缆组件插入信号发送器板上的JST连接器。
- 将传感器的Vin(红线)引脚连接到面包板的3.3V电源轨。
- 将传感器的GND>(黑线)引脚连接到面包板的接地 (GND) 轨。
- 将传感器的SDA(白线)引脚连接到Xplained板的SDA引脚。
- 将传感器的SCL(绿线)引脚连接到Xplained板的SCL引脚。
Mikro Weather Click BME280温湿度传感器
- 将一组母头焊接到Mikro Weather click传感器板。
- 将一根导线从3.3V引脚连接到面包板的3.3V电源轨。
- 将一根导线从GND引脚连接到面包板的GND轨。
- 将传感器的SDA引脚连接到Xplained板的SDA引脚。
- 将传感器的SCL引脚连接到Xplained板的SCL引脚。
SEN0249土壤pH值传感器
- 将3线JST电缆组件插入信号发射器板上的JST连接器。
- 将信号发射器板的GND(黑线)引脚连接到面包板的GND轨。
- 将信号发射器板的+V(红线)引脚连接到面包板的5V电源轨。
- 将信号发射器板的模拟输出(蓝线)引脚连接到Xplained板的A0引脚。
模拟红外CO2传感器
- 将3线JST电缆组件插入信号发射器板上的JST连接器。
- 将信号发射器板的GND(黑线)引脚连接到面包板的GND轨。
- 将信号发射器板的+V(红线)引脚连接到面包板的5V电源轨。
- 将信号发射器板的模拟输出(蓝线)引脚连接到Xplained板的A1引脚。
LoRa 2 Click RF开发板
- 将一根导线从LoRa板的3V引脚连接到面包板的3.3V电源轨。
- 将一根导线从LoRa板的GND引脚连接到面包板的GND轨。
- 将一根导线从LoRa板的TX引脚连接到Xplained板的PD2引脚。
- 将一根导线从LoRa板的RX引脚连接到Xplained板的PD3引脚。
- 将一根导线从LoRa板的RST引脚连接到Xplained板的PB0引脚。
Microchip Xplained板
- 将一根导线从5V引脚连接到面包板的5V电源轨。
- 将一根导线从3.3V引脚连接到面包板的3.3V电源轨。
- 将一根导线从GND引脚连接到面包板的GND轨。
- 将微型USB电缆插入Xplained板的微型USB口。
- 将USB电缆的另一端(Type-A口)插入电脑的USB口。
软件与编程
本部分提供了该项目软件方面的详细信息, 包括Microchip Xplained板所需的固件和支持文件。
设置Microchip Xplained板固件
项目文件
表2列出了此项目GitHub存储库中的Microchip Xplained项目文件:
|
文件名 |
内容 |
|
sketch.cpp |
项目特定代码将存储在此文件中。它基于Medium One提供的一个示例,来演示嵌入式设备如何与物联网 (IoT) 平台后端进行交互。 |
|
secretstuff.h |
当处理公开发布的项目时,总是有暴露密码或API密钥等敏感数据的风险。我们可以创建一个未发布的头文件来存储这些信息,而不是直接将这些信息硬编码到固件中,这样就不必在每次“Git提交”之前更改代码。请注意,我们已经在GitHub存储库中提供了一个头文件示例。该示例名为mysecretstuff.h。尝试在电脑上编译代码之前,请确保将此文件重命名为secretstuff.h。 |
|
co2_sensor.h |
这是一个为与CO2传感器交互而编写的自定义头文件。头文件用于声明函数和变量。#include预处理器指令用于将此库包含在sketch.cpp主文件中。 |
|
co2_sensor.cpp |
在本文件提供了用于与CO2传感器交互的源代码。 |
厍
预处理器指令#include允许我们在项目中添加库。这有利于代码复用;除非你有非常具体的需求,否则就不需要重新编写。此项目使用以下库:
- <RN2xx3.h>:该库能够利用RX/TX线路在亚千兆赫频率上与LoRa(远程)网络进行通信。此库将适用于RN2903或RN2483。
- <Wire.h>:Wire.h库提供了与I²C硬件交互所需的基础代码。BME280温/湿度传感器和土壤湿度传感器通过I²C串行通信协议实现操作。可以在此库的基础上构建特定于组件的库,为各部分提供相应的功能。
- <Adafruit_Sensor.h>和<Adafruit_BME280.h>:这两个库可提供与温/湿度传感器交互所需的支持功能。点击此处即可下载。
- <Adafruit_seesaw.h>:该库提供了与STEMMA土壤湿度传感器交互所需的功能。点击此处即可下载。
- "SoftwareSerial.h":SoftwareSerial.h库允许在任意两个通用输入/输出 (GPIO) 引脚(RX和TX)使用基于软件的串行通信信道。虽然速度没有硬件串行端口快,但却允许单独的串行通道用于调试和与Wi-Fi芯片组交互。
- "secretstuff.h":此头文件包含敏感信息,如Wi-Fi密码、Medium One密码和API密钥。请注意,这个头文件使用的是引号,而不像其他头文件一样使用尖括号(<和>)。这是因为secretstuff.h头文件位于项目特定的固件文件夹中,而不是所有项目都可以使用的头文件库中。此文件所在的位置使其只能由项目固件访问。
变量和常量
以下变量可能需要进行调整以适应您的特定设计:
- static int heartbeat_timer = 0:一个计时器,在即使传感器出现故障,仍能确保微控制器和Medium One沙箱仪表板之间的通信连接。
- static int sensor_timer = 0:一个计时器,用于跟踪自上一个传感器遥测数据包发送到Medium One仪表板以来的时间。
- static int heartbeat_period = 60000:发送到Medium One仪表板的检测信号之间间隔的时间,以微秒为单位。
- long lastReconnectAttempt = 0:上次连接时计时器值的存储位置。
- static int sensor_period = 5000:读取传感器读数之间的时间间隔。
- const float vref = 5.0:微控制器的工作电压,这是模数转换计算的重要验证。该电压可能需要使用3.3V工作电压微控制器进行调整。
- const float phOffset = 0.0:添加到pH计算公式中的偏移值。该值是在pH传感器的校准过程中确定的。
- const int phSensorPin = A0:pH传感器连接的模拟输入 (A0) 引脚。
- const int co2SensorPin = A1:CO2传感器连接的模拟输入 (A1) 引脚。
关于const和static关键字的简要说明:
将const关键字放在变量类型前面可以确保值在执行过程中不会被更改, 即,创建的是一个常量而不是变量。const与#define的优势在于,由于变量是用类型声明的,编译器可以确保在整个代码中不更改变量类型。
static关键字用于确保即使执行了超出范围的函数调用,存储在变量中的值也会保持不变(除非由代码进行强制更改)。当稍后再次调用函数时,static变量中先前保存的值仍将存在,而不像第一次调用函数那样要声明和初始化变量。
对象
- SoftwareSerial soft(2, 3):将创建一个软件定义的串行端口,将微控制器引脚2用作RX引脚,微控制器引脚3用作TX引脚。
- Adafruit_BME280 bme:将创建一个与温湿度传感器交互的对象。
- Adafruit_seesaw soilSensor:将创建一个与STEMMA土壤湿度传感器交互的对象。
- co2_sensor co2sensor:将创建一个与CO2传感器交互的对象。
函数
- void setup():运行的第一个函数将初始化所需的硬件和软件,如串行通信、Wi-Fi连接、传感器接口以及与GPIO引脚的交互。
- void loop():这是将持续运行的核心函数。注意,主循环所含代码越少越好,并确保将功能移交给分别负责该项目工作所需各任务的特定函数。
- void sensor_loop():此函数用于处理BME280环境传感器的温度和压力数据轮询,并将其传输到Medium One沙箱仪表板。
- float getPHlevel():此函数从pH传感器请求读取pH值, 并返回一个0.0到14.0之间的浮点数。
- void heartbeat_loop():此循环为Medium One服务器提供一个检测信号。此信号是一个不断重复的数据包,可以让服务器知道设备仍在工作,即使没有数据可以传输,也可以进行通信。此函数对于只有在现实世界中发生事件时才传输数据的应用程序来说,非常有用。
开始项目
在开始之前,应先做一些测试和校准,然后再开始监测你的园艺项目!
检查错误
将Xplained板连接到电脑并启动串行终端。来自各传感器的遥测数据应该每隔几秒钟就会在屏幕上显示一次。如果没有,请检查是否有错误消息。常见的错误包括:
- 将电源线和接地线反连接到传感器。
- 将数据 (SDA) 和时钟 (SCL) 线反连接到传感器。
- Xplained微控制器板和LoRa 2 Click板之间的TX/RX引脚接线不正确。一个板的TX引脚应连接到另一个板上的RX引脚。
- 给设备供电时,无法确保电源可以提供至少1A的电流。
校准传感器
校准传感器是至关重要的一步。制造商的意愿是非常美好的,但每个从装配线上下来的传感器都不完全相同,因此需要进行校准。常见的方法是使用电位计,当注入特定的输入信号时,电位计可以将输出信号调节到规定的电压或电流。通常,电位计会影响运算放大器的负反馈回路,这对于传感器设备来说是非常典型的情况。
校准不是一次性的前期工作。许多传感器会受到一种称为传感器漂移现象的影响。随着时间的推移,操作环境或操作条件可能会对电路和输出信号产生很大的影响,以至于相同的输入将随着时间的流逝产生不同的输出。如果不加以控制,漂移将变得越来越严重。因此,请记住,一些用于工业、农业和园艺应用的设备,其预期使用寿命可能以几十年为单位。确保按照制造商规定的方式和时间表进行校准对于系统的安全可靠运行至关重要。
连接到云端
现在有了传感器流数据,你需要找到一种方法将数据传输到云端。只需在谷歌上搜索即可找到很多选择。一种选择是使用LoRa Enabled网关,如Laird Connectivity的RG-191。《快速入门指南》将帮助您连接到The Things Network (TTN),注册设备,并开始发送数据。你也可以在LoRaSever.io上找到关于如何创建项目的资源。
结语
无论你是经验丰富的园丁还是新手,这个项目都可以为你提供一种的方法,帮助你打造一个理想高效的环境来种植植物以供食用或移植。传感器和物联网功能可以帮助你进行监控并根据需要进行更改,进而提升工作经验。
如果你尝试过这个项目,别忘了告诉我们: 这个项目的效果如何? 你还能做出哪些改进? 如果有,请通过Facebook、Twitter、LinkedIn或Instagram告诉我们。
作者简介
Joseph Downing在贸泽电子工作了六年,2011年开始担任技术支持专家,后来转为技术内容专家。此外,Joseph还曾就职于英特尔、Radisys和Planar等电子行业公司,拥有20多年的工作经验。