风筝
发表于: 2022-4-8 14:35:16 | 显示全部楼层

在本篇文章中,我们将学习如何使用Arduino和土壤电导率传感器制作一款实用的土壤盐度计。土壤电导率是衡量土壤中盐分含量(土壤盐度)的指标。它是土壤健康的重要指标,影响作物产量、适宜性、养分有效性和土壤微生物的活性。盐度是土壤或水中可溶性盐的量度,盐分子包含来自钠、钾、钙的阳离子和来自氯化物或硫酸盐的阴离子。


过量的盐分通过影响水土平衡来阻碍植物生长。虽然电导率没有直接测量特定离子或盐化合物,但与硝酸盐、钾、钠、氯化物、硫酸盐和氨的浓度相关。这就是为什么测量土壤电导率和土壤盐度很重要的原因。土壤电导率可以通过直接插入地下的电极或使用蒸渗仪提取土壤水来测量。


在本文中,我们将使用自制的Arduino土壤电导率计测量土壤电导率和盐度值。我们使用的土壤电导率传感器型号是JXCTIOT土壤电导率传感器。传感器使用Modbus协议。使用一些Modbus命令,我们可以从传感器获取土壤电导率和盐度值。

Soil-EC-Measurement.jpg


所需的组件

●    Arduino Nano开发板

●    JXCTIOT土壤电导率和盐度传感器

●    0.96寸I2C OLED显示屏

●    MAX485 Modbus模块

●    9V - 12V直流电源

●    连接跳线

●    面包板


土壤电导率和盐度的含义

土壤电导率 (Electrical Conductivity,EC) 是衡量土壤水承载电流能力的指标。电导率是主要通过充满水的孔发生的电解过程。


溶解盐中的Ca2+、Mg2+、K+、Na+ 和 NH4+ 等阳离子和SO42-、Cl-、NO3 – 和 HCO3 等阴离子带有电荷。电荷负责电流的传导。因此,离子浓度决定了土壤的EC。

salinity.jpg


在农业上,电导率主要用作土壤盐分的量度。土壤盐度是衡量可溶于水中的矿物质和盐分的指标。 EC 以西门子(Siemens)每米 (S/m) 表示,而盐度以mg/Kg表示。


土壤电导率 (EC) 和盐度传感器

JXCTIOT土壤电导率传感器是一款用于电导率和盐度测量应用的低成本土壤传感器。它采用行业标准设计,具有高精度、高灵敏度和耐用性。您可以使用此传感器来评估土壤状况。它可以快速测试不同种类土壤的电导率和盐度。有多种土壤电导率和盐度传感器。但这种传感器是实际应用中最好的一种。

Soil-EC-Salinity-Sensor.jpg


传感器内部有一个高质量的芯片。该芯片功耗低、灵敏度高、稳定性高。传感器的探头采用奥氏体316不锈钢为原材料制成。因此传感器具有防锈、耐电解、耐盐、耐碱腐蚀的功能。这确保了土壤的长期运行并适用于各种类型的土壤。


您可以将此传感器用于科学实验、节水灌溉、园艺、温室、户外农业、园艺、高尔夫和草坪管理。该传感器还更适合林业、精准农业和其他专业环境监测场景等应用。


传感器有4个引脚,分别为VCC、GND、485-A和485-B。传感器在12V-24V电压下工作。如果您提供低于12V的电压,您将不会获得任何输出。

EC-Sensor-Pins.jpg


土壤电导率传感器与Arduino的硬件连接

现在,让我们使用MAX485 Modbus模块将土壤电导率传感器与Arduino Nano开发板连接起来。连接图如下。

Soil-NPK-Sensor-Arduino-Interfacing.jpg


使用软件串口将Modbus的RO和DI引脚连接到Arduino的D2和D3。同样,我们将它们连接到Arduino的D7和D8引脚来启用D​​E和RE高电平。EC传感器有4根电线。棕色的是VCC,需要12V-24V电源。黑色的GND引脚需要连接到Arduino的GND。引脚B的蓝线连接到MAX485模块的B引脚。黄线连接到MAX485的A引脚。


0.96寸SSD1306 OLED显示屏是I2C模块。将OLED显示屏的VCC和GND引脚连接到Arduino的3.3V和GND。同样,将 OLED显示屏SDA和SCL引脚连接到Arduino开发板的A4和A5。您可以按照电路图在面包板上组装电路。


土壤电导率传感器的Modbus命令

Modbus命令可以指示Modbus 设备:

1. 改变其中一个寄存器的值,写入线圈和保持寄存器

2. 读取 I/O 端口:从 Discrete 和 Coil 端口读取数据,

3. 命令设备发回包含在其线圈和保持寄存器中的一个或多个值


一个Modbus命令包含它打算用于的设备的Modbus地址(1 到 247)。只有被寻址的设备会响应命令并采取行动,即使其他设备也可能会收到该命令。


土壤电导率传感器有3种不同的方式用于读取土壤电导率和土壤盐度的值。您可以从使用说明书中获取查询位地址。


土壤电导率值查询帧为:

ec-inquiry.jpg


您将收到以下回复:

ec-response.jpg


您可以根据收到的响应计算土壤电导率。例如,如果您得到0x05DC作为响应,那么土壤电导率值将是:

5DC H(十六进制)=1500(十进制)=>电导率=1500us/cm


土壤盐度值查询帧为:

salinity-enquiry.jpg


您将收到以下回复:

salinity-response.jpg


您可以根据收到的响应计算土壤盐度。例如,如果您得到 69 作为响应,那么土壤盐度值将是:

69 H(十六进制) =105 (十进制) => 盐度 = 105mg/L


代码

以下是将土壤电导率传感器与Arduino连接的源代码。您可以将此代码与土壤电导率传感器和Arduino一起使用,通过Modbus命令检索土壤电导率值和土壤盐度值。您可以发送命令并检索HEX代码中的值。需要将十六进制代码转换为十进制才能获得测量的土壤养分含量数据。


由于我们使用OLED显示屏来显示土壤电导率和盐度值,因此您需要OLED库。下载以下OLED库并将其添加到Arduino IDE。

1.  Adafruit SSD1306库

2.  Adafruit GFX 库


以下是完整的源代码。编译代码并将其上传到Arduino Nano开发板。 ec.rar (901 Bytes, 下载次数: 17)


在OLED显示屏上监测土壤电导率和盐度数据

将代码上传到Arduino Nano开发板后,OLED将与传感器一起初始化。传感器需要一些时间才能稳定下来,读数可能会在几秒钟内不正确。


传感器稳定后,您可以将传感器浸入土壤中以获取土壤电导率和盐度读数。 OLED显示屏将以微西门子每厘米 (us/cm) 为单位显示电导率值,以毫克每公斤 (mg/kg) 为单位显示盐度值。

Soil-EC-Measurement.jpg


以上就是将土壤电导率和盐度传感器与Arduino连接并获取土壤电导率/盐度读数的方式。同样,将传感器放入不同的土壤样本中。您将看到电导率/盐度值的变化取决于土壤类型。

Soil-EC-Meter-Sensor-Arduino-.jpg


如果有任何疑问,请随时在本帖下面回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1483



手机版|

GMT+8, 2024-5-13 09:22 , Processed in 0.066738 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表