简介

该传感器适用于土壤温度以及水分的测量,5-30V宽电压供电,RS485输出,响应快,输出稳定,可搭配Arduino UNO R3与TTL转485扩展板,快速搭建测试。 土壤传感器防护等级为IP68,采用黑色阻燃环氧树脂真空灌装密封,探针材质选用316型不锈钢,具有防锈防水防腐蚀、耐盐碱腐蚀、耐长期电解,受土壤含盐量影响较小,可长期埋入土壤中,适用各种土质。 土壤传感器广泛适用于科学实验、节水灌溉、温室大棚、花卉蔬菜、草地牧场、土壤速测、植物培养、粮食仓储及各种颗粒物含水量和温度的测量。

特点

技术规格

引脚示意图

标号 名称 功能描述
棕线 VCC 电源输入正极,DC5-30V供电
黑线 GND 电源接地线
黄线 485-A RS485数据A线
蓝线 485-B RS485数据B线

尺寸图

尺寸图

通信协议

1、通讯基本参数

接口 编码 数据位 奇偶校验位 停止位 错误校验 波特率
RS485 8位二进制 8 1 CRC 2400bit/s、4800bit/s、9600 bit/s 可设,默认9600bit/s

2、数据帧格式定义

采用 ModBus-RTU 通讯规约,格式如下:

主机问询帧结构:

地址码 功能码 寄存器起始地址 寄存器长度 校验码低位 校验码高位
1byte 1byte 2byte 2byte 1byte 1byte

从机应答帧结构:

地址码 功能码 有效字节数 数据一区 第二数据区 第N数据区 校验码
1byte 1byte 1byte 2byte 2byte 2byte 2byte

3、通讯协议示例及解释

举例:读取设备地址 0x01 的温湿度值 问询帧(16 进制):

地址码 功能码 寄存器起始地址 寄存器长度 校验码低位 校验码高位
0x01 0x03 0x00 0x00 0x00 0x02 0xC4 0x0B

应答帧(16 进制):(例如读到温度为-9.7℃,湿度为 48.6%RH)

地址码 功能码 返回有效字节数 湿度值 温度值 校验码低位 校验码高位
0x01 0x03 0x04 0x01 0xE6 0xFF 0x9F 0x1B 0xA0

湿度计算:

温度计算:

4、寄存器地址

寄存器地址 PLC或组态地址 内容 操作 定义说明
0000H 40001(十进制) 含水率 只读 含水率实时值(扩大10倍)
0001H 40002(十进制) 温度值 只读 温度实时值(扩大10倍)
0050H 40081(十进制) 温度校准值 读写 整数(扩大10倍)
0051H 40082(十进制) 含水率校准值 读写 整数(扩大10倍)
07D0H 42001(十进制) 设备地址 读写 1-254(出厂默认1)
07D1H 42002(十进制) 设备波特率 读写 0代表2400 1代表4800 2代表9600

使用教程

准备

接线图

烧录代码前,请将扩展板的收发模式开关切换到AUTO,运行/编译开关切换到OFF,烧录代码后,运行/编译开关切换到ON,串口波特率选择9600

Arduino连接图

示例代码

uint8_t Com[8] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B };
float tem, hum;
void setup() {
  Serial.begin(9600);  //初始化串口
}
void loop() {
  readHumiture();
  Serial.print("TEM = ");
  Serial.print(tem, 1);
  Serial.print(" °C  ");
  Serial.print("HUM = ");
  Serial.print(hum, 1);
  Serial.println(" %RH  ");
  delay(1000);
}
void readHumiture(void) {
  uint8_t Data[10] = { 0 };
  uint8_t ch = 0;
  bool flag = 1;
  while (flag) {
    delay(100);
    Serial.write(Com, 8);
    delay(10);
    if (readN(&ch, 1) == 1) {
      if (ch == 0x01) {
        Data[0] = ch;
        if (readN(&ch, 1) == 1) {
          if (ch == 0x03) {
            Data[1] = ch;
            if (readN(&ch, 1) == 1) {
              if (ch == 0x04) {
                Data[2] = ch;
                if (readN(&Data[3], 6) == 6) {
                  if (CRC16_2(Data, 7) == (Data[7] * 256 + Data[8])) {
                    hum = (Data[3] * 256 + Data[4]) / 10.00;
                    tem = (Data[5] * 256 + Data[6]) / 10.00;
                    flag = 0;
                  }
                }
              }
            }
          }
        }
      }
    }
    Serial.flush();
  }
}

uint8_t readN(uint8_t *buf, size_t len) {
  size_t offset = 0, left = len;
  int16_t Tineout = 500;
  uint8_t *buffer = buf;
  long curr = millis();
  while (left) {
    if (Serial.available()) {
      buffer[offset] = Serial.read();
      offset++;
      left--;
    }
    if (millis() - curr > Tineout) {
      break;
    }
  }
  return offset;
}

unsigned int CRC16_2(unsigned char *buf, int len) {
  unsigned int crc = 0xFFFF;
  for (int pos = 0; pos < len; pos++) {
    crc ^= (unsigned int)buf[pos];
    for (int i = 8; i != 0; i--) {
      if ((crc & 0x0001) != 0) {
        crc >>= 1;
        crc ^= 0xA001;
      } else {
        crc >>= 1;
      }
    }
  }

  crc = ((crc & 0x00ff) << 8) | ((crc & 0xff00) >> 8);
  return crc;
}

结果:将土壤传感器插入土里,则串口打印出传感器检测到的温度值与湿度值。

安装使用方法

1、速测法

选定合适的测量地点,避开石块,确保钢针不会碰到坚硬的物体,按照所需测量深度抛开表层土,保持下面土壤原有的松紧程度,紧握传感器垂直插入土壤,插入时不可左右晃动,一个测点的小范围内建议多次测量求平均值。

速测法

2、埋地测量法

垂直挖直径>20cm 的坑,在既定的深度将传感器钢针水平插入坑壁,将坑填埋严实,稳定一段时间后,即可进行连续数天,数月乃至更长时间的测量和记录。 速测法

3、注意事项

常见问题

无输出或输出错误存在可能的原因:

还有客户对此产品有任何问题,欢迎通过 qq 或者论坛联系我们! 更多问题及有趣的应用,可以访问论坛进行查阅或发帖

更多

DFRobot 商城购买链接