RS485光合有效辐射

简介

光合有效辐射传感器采用光电感应原理,可以测量光谱范围400-700nm的光合有效辐射值。传感器采用高精度的光电感应元件,宽光谱吸收,吸收量高,稳定性好;当有光照时,产生一个与入射辐射强度成正比的电压信号,并且其灵敏度与入射光的直射角度的余弦成正比。防尘罩采用特殊处理,减少灰尘吸附,有效防止环境因素对内部元件的干扰,能够较为精准的测量光合有效辐射值。
光合有效辐射传感器采用标准Modbus-RTU 485通信协议,DC5-30V宽电压供电,可以搭配TTL转RS485扩展板(DFR0259)或Gravity: RS485转UART 有源隔离型 信号转换模块(DFR0845)在Arduino UNO R3上读取光合有效辐射值,快速搭建测试环境,接线方式简单,使用方便。光合有效辐射传感器防护等级IP67,采用金属铝壳材质,广泛用于农作物生长监测、光伏系统、气象监测、植物生理研究、环保生态研究等领域。

测量单位解释:
umol/m²•s是光合有效辐射的单位。光合有效辐射是指光合作用中植物可以吸收和利用的有效光能的辐射。光合有效辐射通常指波长在400-700nm范围内的光线,这是植物进行光合作用所需的光线范围。
umol/m²•s中的umol代表微摩尔,是一种描述光合作用过程中光子数量的单位。m²表示每平方米的面积,s表示时间的单位,即秒。因此,umol/m²•s表示每秒钟每平方米的面积上光合有效辐射的光子数量。
光合有效辐射的单位umol/m²•s常用于衡量光合作用的强度和植物的生长状况。通过测量每秒钟每平方米面积上光合有效辐射的光子数量,可以评估植物叶片的光合作用效率和光合速率,并为植物生长、光合作用研究等提供参考。

特性

  • DC 5~30V宽电压供电
  • 采用高精度感光元件,全光谱范围内吸收量高
  • 自带水平仪及调节手轮,现场方便调节
  • 采用RS485接口,标准Modbus-RTU协议
  • 采用高品质余弦校正器,确保标准余弦响应
  • 金属铝壳材质,IP67防护等级

应用场景

  • 农作物生长监测
  • 光伏系统
  • 气象监测
  • 植物生理研究
  • 环保生态研究

技术规格

  • 供电电压:DC5~30V
  • 工作电流:<10mA
  • 输出方式:RS485
  • 测量范围:0~4000umol/m²•s
  • 波长范围:400-700nm
  • 精度:±5%(1000umol/㎡•s,@550nm,60%RH,25℃)
  • 分辨率:1 umol/m²•s
  • 响应时间:10us
  • 非线性:<±1%
  • 年稳定度:≤±2%
  • 余弦响应:≤±10%
  • 工作温度:-25°C~+60°C
  • 防护等级:IP67
  • 传感器线长:20cm
  • 转接线线长:70cm

引脚示意图

线序 功能描述
棕线 DC5-30V供电
黑线 GND
黄线 RS485-A
蓝线 RS485-B

尺寸图

通讯协议

1、通讯基本参数

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

2、数据帧格式定义

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

主机问询帧结构:

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

从机应答帧结构:

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

寄存器地址

寄存器地址 内容 操作 范围及定义说明
0000H 光合有效辐射值 只读 真实值
0052H 偏差值 读写 光合有效辐射偏差值(16位有符号)
07D0H 设备地址 读写 1~254(出厂默认1)
07D1H 设备波特率 读写 0代表2400,1代表4800,2代表9600

3、通讯协议示例及解释

3.1、读取当前光合有效辐射值

问询帧:读取数值功能码 0x03

地址码 功能码 寄存器起始地址 寄存器长度 检验码低位 检验码高位
0x01 0x03 0x00 0x00 0x00 0x01 0x84 0x0A

应答帧:

地址码 功能码 返回有效字节数 太阳辐射值 校验码低位 校验码高位
0x01 0x03 0x02 0x00 0x64 0x9B 0xAF

光合有效辐射值:
0064(16进制) =100=> 光合有效辐射值=100μmol/㎡·s

3.2、写入偏差值

问询帧:写入数值功能码 0x06

地址码 功能码 寄存器地址 修改数值 检验码低位 检验码高位
0x01 0x06 0x00 0x52 0x00 0x0A 0xA8 0x1C

应答帧:

地址码 功能码 寄存器地址 修改数值 校验码低位 校验码高位
0x01 0x06 0x00 0x52 0x00 0x0A 0xA8 0x1C

写入当前光合有效辐射偏差值
000A(16进制) =10=> 光合有效辐射偏差值=10μmol/㎡·s,偏差值为10μmol/㎡·s

3.3、修改当前地址

问询帧:(修改当前地址为 0x02 )

地址码 功能码 寄存器地址 修改数值 检验码低位 检验码高位
0x01 0x06 0x07 0xD0 0x00 0x02 0x08 0x86

应答帧:

地址码 功能码 寄存器地址 修改数值 校验码低位 校验码高位
0x01 0x06 0x07 0xD0 0x00 0x02 0x08 0x86

3.4、修改当前波特率

问询帧:(修改当前波特率为9600 )

地址码 功能码 寄存器地址 修改数值 检验码低位 检验码高位
0x01 0x06 0x07 0xD1 0x00 0x02 0x59 0x46

应答帧:

地址码 功能码 寄存器地址 修改数值 校验码低位 校验码高位
0x01 0x06 0x07 0xD1 0x00 0x02 0x59 0x46

3.5、查询当前地址、波特率

问询帧:

地址码 功能码 寄存器地址 数据长度 检验码低位 检验码高位
0xFF 0x03 0x07 0xD0 0x00 0x02 0xD1 0x58

应答帧:

地址码 功能码 返回有效字节数 地址 波特率 校验码低位 校验码高位
0x01 0x03 0x04 0x00 0x01 0x00 0x01 0x6A 0x33

读取到设备的真实地址为 01,波特率为 0x01,即 4800。

使用教程

硬件准备

软件准备

硬件连接

若RS485设备的功率较小,需求电流小于12V-160mA,RS485转UART信号转换模块则无需12V外部供电,接线更方便。

演示代码

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);//定义软串口,3号端口为TX,2号端口为RX
uint8_t Com[8] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A };  //光合有效辐射
int PAR;
void setup() {
  Serial.begin(9600);
  mySerial.begin(4800);
}
void loop() {
  readPAR();
  Serial.print("PAR = ");
  Serial.print(PAR);
  Serial.println(" umol/m²·s ");
  delay(1000);
}

void readPAR(void) {
  uint8_t Data[10] = { 0 };
  uint8_t ch = 0;
  bool flag = 1;
  while (flag) {
    delay(100);
    mySerial.write(Com, 8);
    delay(100);
    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 == 0x02) {
                Data[2] = ch;
                if (readN(&Data[3], 4) == 4) {
                  if (CRC16_2(Data, 5) == (Data[5] * 256 + Data[6])) {
                    PAR = Data[3] * 256 + Data[4];
                    flag = 0;
                  }
                }
              }
            }
          }
        }
      }
    }
    mySerial.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 (mySerial.available()) {
      buffer[offset] = mySerial.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.若读取数值显示为 0,检查是否有光源,检查产品保护盖是否取下
3.485 总线有断开,或者 A、B 线接反
4.检查电源是否符合标注

DFshopping_car1.png DFRobot商城购买链接

WIKI文档修改历史

文档版本号 修改时间 修改人 修改内容
V1.0 2024.11.28 刘念 第一版发布

产品修改历史

产品版本号 修改时间 修改人 产品修改内容
V1.0 2024.11.28 刘念 第一版发布