RS485 土壤传感器(温度&湿度)

简介

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

特点

  • 5-30V宽电压供电
  • RS485输出,可搭配Arduino使用
  • 响应快,输出稳定
  • 不锈钢探针,可长期埋入土里或水里
  • 树脂真空灌装密封,IP68防护等级

技术规格

  • 供电电压:DC5-30V
  • 功耗:0.5W@24V
  • 输出方式:RS485
  • 检测参数:温度、湿度
  • 湿度参数
  • 量程:0-100%
  • 分辨率:0.1%
  • 精度:0-50%@±2%,50-100%@±3%
  • 温度参数
  • 量程:-40°C~+80°C
  • 分辨率:0.1°C
  • 精度:±0.5°C
  • 防护等级:IP68
  • 探针材料:防腐特制电极
  • 密封材料:黑色阻燃环氧树脂
  • 工作温度:-40°C~+60°C
  • 线长:2m

引脚示意图

标号 名称 功能描述
棕线 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 通讯规约,格式如下:

  • 初始结构 ≥4 字节的时间
  • 地址码 = 1 字节
  • 功能码 = 1 字节
  • 数据区 = N 字节
  • 错误校验 = 16 位 CRC 码
  • 结束结构 ≥4 字节的时间
  • 地址码:为传感器的地址,在通讯网络中是唯一的(出厂默认 0x01)。
  • 功能码:主机所发指令功能指示,本传感器只用到功能码 0x03(读取寄存器数据)。
  • 数据区:数据区是具体通讯数据,注意 16bits 数据高字节在前!
  • CRC 码:二字节的校验码。

主机问询帧结构:

地址码 功能码 寄存器起始地址 寄存器长度 校验码低位 校验码高位
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

湿度计算:

  • 湿度:1E6 H (十六进制)= 48.6%RH

温度计算:

  • 当温度低于 0 ℃ 时温度数据以补码的形式上传。
  • 温度:FF9F H(十六进制)= -97 => 温度 = -9.7°C

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

使用教程

准备

  • 硬件

Arduino UNO x1

TTL转RS485扩展板(DFR0259) x1

RS485土壤传感器(温度&湿度) x1

  • 软件

Arduino IDE,点击下载 Arduino IDE

接线图

烧录代码前,请将扩展板的收发模式开关切换到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、注意事项

  • 测量时钢针必须全部插入土壤里。
  • 避免强烈阳光直接照射到传感器上而导致温度过高,野外使用注意防雷击。
  • 勿暴力折弯钢针,勿用力拉拽传感器引出线,勿摔打或猛烈撞击传感器。
  • 传感器防护等级 IP68,可以将传感器整个泡在水中。
  • 由于在空气中存在射频电磁辐射,不宜长时间在空气中处于通电状态。

常见问题

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

  • 电脑有 COM 口,选择的口不正确。
  • TTL转485模块运行/编程拨动开关选择不正确。
  • 波特率错误。
  • 485 总线有断开,或者 A、B 线接反。
  • 设备数量过多或布线太长,应就近供电。
  • 设备损坏。

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

更多

DFRobot 商城购买链接