风筝
发表于: 2022-4-13 15:59:29 | 显示全部楼层

在本篇文章中,我们将介绍土壤氮磷钾传感器与Arduino的连接方式,并制作Arduino土壤氮磷钾计。使用土壤氮磷钾传感器和Arduino可以轻松测量土壤养分含量。测量土壤含量N(氮)、P(磷)和K钾)对于确定向土壤中添加多少营养成分以提高作物肥力是必要的。


使用氮磷钾传感器可以检测土壤肥力。土壤肥力的主要成分是氮、磷和钾。土壤养分浓度的知识可以帮助我们了解用于支持植物生产的土壤中的营养缺乏或丰富。有多种测量土壤养分含量的方法,例如使用一些光学传感器或使用光谱仪。但光谱分析方法不方便,缺点是数据只有60-70%的正确率。在将光谱分析方法与传统湿化学方法进行比较时,由于缺乏这方面的数据,产品的准确性尚未完全解决。


因此,本文我们将使用JXCT公司的土壤氮磷钾传感器来检测土壤中的土壤氮、磷和钾含量。 JXCT土壤氮磷钾传感器是一种低成本、快速响应、高精度和便携式传感器,可与Modbus RS485配合使用。与传统检测方法相比,该传感器的优势在于它提供了非常快速的测量和高度准确的数据。您只需将其探头插入土壤,然后使用Arduino获取读数。


所需的组件

●    Arduino Nano开发板

●    JXCTIOT土壤氮磷钾传感器

●    0.96寸I2C OLED显示屏

●    MAX485 Modbus模块

●    9V - 12V直流电源

●    连接跳线

●    面包板


土壤氮磷钾传感器

土壤氮磷钾传感器(Soil NPK Sensor)适用于检测土壤中氮、磷、钾的含量。它有助于确定土壤的肥力,从而有助于系统地评估土壤状况。传感器可以长时间埋在土壤中。优质探头,防锈、耐电解、耐盐碱腐蚀,保证探头部分长期工作。因此,它适用于各种土壤的检测,比如碱性土壤、酸性土壤、基质土壤、苗床土壤和椰糠土壤。

Soil-NPK-Sensor.jpg


该传感器不需要任何化学试剂。由于测量精度高、响应速度快、互换性好,可与任何单片机配合使用。您不能直接将传感器与微控制器一起使用,因为它采用Modbus通信端口。因此,您需要使用Modbus转换模块,例如RS485/MAX485,然后将传感器连接到微控制器。


传感器工作在9-24V下,功耗非常低。传感器的精度最高可达2%以内。氮、磷和钾的测量分辨率高达1mg/kg (mg/l)。

npksensor-arduino.jpg


使用土壤氮磷钾传感器,您可以制作自己的Arduino土壤NPK计或任何基于云物联网的土壤养分含量监测系统。


MAX485 TTL转RS-485接口模块

MAX485 TTL转RS-485接口模块可以使得我们能够使用RS-485差分信号进行长达1200米的稳健长距离串行通信,并可以用于工业环境。它支持高达2.5MBit/Sec的数据速率,但随着距离的增加,可以支持的最大数据速率下降。

RS485.jpg


控制器输出的数据为TTL电平,RS-485模块负责在TTL和RS-485使用的差分信号之间转换电信号。RS-485的一个显着优势是它在同一根电缆上支持多个设备。

土壤氮磷钾传感器与Arduino的硬件连接

现在,让我们使用MAX485 Modbus模块将土壤氮磷钾传感器与Arduino Nano开发板连接起来。硬件连接图如下:

Soil-NPK-Sensor-Arduino-Interfacing.jpg


使用软件串口将Modbus模块的R0和DI引脚连接到Arduino开发板的D2和D3o。另外,我们必须拉高DE&RE引脚。为此,将DE和RE引脚连接到Arduino的D7和D8 引脚。NPK传感器有4根线。棕色线的是VCC,需要9V-24V电源。 GND引脚为黑色,将该引脚连接到Arduino的GND。蓝线是B脚,连接到MAX485的B脚,黄线A脚连接到MAX485模块的A脚。


0。96寸OLED显示屏采用的是I2C接口。将OLED显示屏的VCC和GND引脚分别连接到Arduino的3.3V和GND。另外将其SDA和SCL引脚连接到Arduino的A4和A5。您可以按照电路图在面包板上组装电路。

cktassmbly.jpg


氮磷钾传感器的Modbus相关命令

Modbus命令可以指示Modbus设备:

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

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

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


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


氮磷钾传感器有3个不同的查询帧框架,用于读取氮 (N)、磷 (P) 和钾 (K) 的含量。查询帧的命令形式随说明手册一起提供。对于NPK的数据,以下单独的查询帧:

1. 氮(Nitrogen):{0x01,0x03, 0x00, 0x1e, 0x00, 0x01, 0xe4, 0x0c}

获取土壤氮值的查询帧为:

n-frame.jpg

您将收到以下响应:

n-value.jpg

可以根据收到的响应计算土壤氮。例如,如果您得到的响应值是0020,则土壤氮值将是:

0020 H(十六进制) = 32 (十进制) => 氮 = 32mg/kg


2. 磷(Phosphorous):{0x01,0x03, 0x00, 0x1f, 0x00, 0x01, 0xb5, 0xcc}

获取土壤磷值的查询帧为:

p-frame.jpg

您将收到以下响应:

p-value.jpg


您可以根据收到的响应计算土壤磷。例如,如果您得到的响应值是0025,则土壤氮值将是:

0025 H(十六进制)= 37(十进制)=> 磷= 37/kg


3. 钾(Potassium):{0x01,0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xc0}

获取土壤钾值的查询帧为:

k-frame.jpg

您将收到以下响应:

k-value.jpg


您可以根据收到的响应计算土壤钾。例如,如果您得到的响应值是0030,那么土壤钾值将是:

0030 H(十六进制) =48 (十进制) => 钾 = 48mg/kg


代码

下面给出了用于将土壤氮磷钾传感器与Arduino连接,并通过Modbus命令从传感器中获取土壤养分值的代码。您可以发送指令,然后检查HEX代码中的值。需要将十六进制代码转换为十进制才能获得测量的土壤养分含量数据。


由于我们使用OLED显示屏来显示以 mg/kg 为单位的土壤养分值(氮、磷和钾),因此您需要OLED库。下载以下OLED库并将其添加到Arduino IDE中。

1.  Adafruit SSD1306库

2.  Adafruit GFX库


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


在OLED显示屏上观察土壤NPK数据

将代码上传到Arduino Nano开发板后,将初始化OLED与传感器。传感器需要一些时间才能稳定,最初读数可能不正确。


一旦传感器变得稳定,您可以将传感器插入土壤中以获取NPK读数。土壤中的氮、磷和钾的含量,将以mg/Kg为单位进行显示。

Measure-Soil-Nutrient-Arduino-1.jpg


同样,将传感器放入不同的土壤样本中。您会看到NPK的含量因土壤类型而异。

npkard.jpg


以上就是如何连接土壤氮磷钾传感器到Arduino并获取NPK读数的方法。如果有任何疑问,请随时在本帖下面回复。


跳转到指定楼层
xboardx
发表于: 2023-9-15 15:27:30 | 显示全部楼层

本帖最后由 xboardx 于 2023-9-16 10:44 编辑

#define DE A7;//DE RE焊一起了
    //查询发送 01 03 00 00 00 01 84 0A
    const byte pack[] = {0x01,0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A};
   
    digitalWrite(DE,HIGH);//HIGH=发送
    delay(10);
    if(mySerial2.write(pack,sizeof(pack))==8){
      digitalWrite(DE,LOW);//LOW=接收
    }

if(mySerial2.available() >0) {

      byte values[11];
      for(byte i=0;i<7;i++){
        values = mySerial2.read();
        Serial.print(values,HEX);
      }
      Serial.print(";");
      Serial.print(values[4]);//压力范围
}

请问这样写,哪里有问题? 收不到数据

我是小白

更新:
可能传感器 或者 485模块坏了

回复

使用道具 举报

牧飞凤舞
发表于: 2023-12-6 09:41:28 | 显示全部楼层

我新买的传感器跟485,用的uno主板,接的接口跟楼主的一样,然后因为没有OLED屏幕就没接屏幕线,通过ide串口查看,但是一直氮磷钾读数都是0,插到土里也一样。确认线没有接错。
猜想到几个可能会出现的问题:
1、485跟传感器有损坏
2、485跟传感器接UNO的5V以及修改土壤传感器外外接3个18650电池这两种方案都试过了,依旧还是0,所以不清楚怎么回事
回复

使用道具 举报

penny
发表于: 2023-12-15 14:45:57 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

XDUwjs
发表于: 2024-4-27 22:39:32 | 显示全部楼层

用的mega2560的板子,一直显示255mg/kg,想问一下是什么问题
回复

使用道具 举报

旧乡故客
发表于: 2024-4-28 08:31:26 | 显示全部楼层

XDUwjs 发表于 2024-4-27 22:39
用的mega2560的板子,一直显示255mg/kg,想问一下是什么问题

255,是0xFF,应该是没有采集到数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-21 19:57 , Processed in 0.075661 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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