RS485 Wind Direction Transmitter

简介

风向传感器是用于测量风的水平风向的专业气象仪器。其内部采用霍尔角度传感器,传感器壳体和风向标采用铝合金材料,使用特种模具精密压铸工艺,尺寸公差甚小表面精度甚高,内部电路均经过防护处理,整个传感器具有很高的强度、耐候性、防腐蚀和防水性。电缆接插件为军工插头,具有良好的防腐、防侵蚀性能,能够保证仪器长期使用。选用低惯性风向标感应风向,当风向发生变化,尾翼转动通过轴杆带动轴芯磁铁转动,从而得到准确的风向信息。可以测量以标签北为起点的16个方位的自然界风向,具有很高的性价比,可广泛用于气象、海洋、环境、机场、港口、实验室、工农业及交通等领域。

特性

技术规格

尺寸

使用说明书

1、线色说明

颜色 功能
红色 电源正
黑色 电源负
黄色 RS485+/A/T+
绿色 RS485-/B/T-

2、安装说明

安装时传感器上白点必须朝向正北。

3、Modbus协议

参数名称 寄存器地址 功能类型 功能号 参数范围及说明 默认值
360°风向值 0x0000 INT16
只读
0x03/读 0x00-0xE10(16进制)
16方位风向值 0x0001 INT16
只读
0x03/读 0x00-0x0F(16进制)
Modbus从机地址 0x1000 INT16
读写
0x03/读
0x10/写
0x00-0xFF(16进制) 2
360°风向值
参数范围 0x00-0xE10(16进制) 默认值:无
参数存储

意义:360°风向值

举例:如果返回的值是02 8F(16进制)=655(十进制)÷10=65.5°,该角度是与正北方向(即0°)的夹角。

16方位风向值
参数范围 0x00-0x0F(16进制) 默认值:无
参数存储

意义:16方位风向值

举例:如果返回的值是00 04 (16进制,原码),则第一字节高字节为00,第二字节低字节为04,那么风向测量值为(00*256+04)=4,0对应的是正北方向,顺时针4表示正东。

Modbus从机地址(ADDRESS)
参数范围 0-255 默认值:2
参数存储 立即存储

Modbus地址,可设置为0-255。使用0地址可以设置任何地址。

  1. 读取设备(Modbus从机地址0x02)的360度风向值

    主机查询帧(16进制):02 03 00 00 00 01 84 39(8byt)

    设备地址 功能码 寄存器起始地址 寄存器长度 校验码高位 校验码低位
    1byt 1byt 2byt 2byt 1byt 1byt
    0x02 0x03 0x00 0x00 0x00 0x01 0x84 0x39

    从机应答帧(16进制):02 03 02 02 8F BC 80(7byt)

    从机地址 功能码 有效字节数 数据区 校验码高位 校验码低位
    1byt 1byt 1byt 2byt 1byt 1byt
    0x02 0x03 0x02 0x02 0x8F 0xBC 0x80

    风向角度值计算 = 02 8F(16进制)=655(十进制)÷10=65.5°,该角度是与正北方向(即0°)的夹角。

  2. 读取设备(Modbus从机地址0x02)的16方位风向

    主机查询帧(16进制):02 03 00 01 00 01 D5 F9(8byt)

    从机地址 功能码 寄存器起始地址 寄存器长度 校验码高位 校验码低位
    1byt 1byt 2byt 2byt 1byt 1byt
    0x02 0x03 0x00 0x01 0x00 0x01 0xD5 0xF9

    从机应答帧(16进制):02 03 02 00 03 BC 45(7byt)

    从机地址 功能码 有效字节数 数据区 校验码高位 校验码低位
    1byt 1byt 1byt 2byt 1byt 1byt
    0x02 0x03 0x02 0x00 0x03 0xBC 0x45

    16方位值=00 03=3,对应下表得到方位为东北偏东。

    数值对照关系

    方向 16方位值 360度
    0 0° ~ 11.2°
    东北偏北 1 11.3° ~ 33.7°
    东北 2 33.8° ~ 56.2°
    东北偏东 3 56.3° ~ 78.7°
    4 78.8° ~ 101.2°
    东南偏东 5 101.3° ~ 123.7°
    东南 6 123.8° ~ 146.2°
    东南偏南 7 146.3° ~ 168.7°
    8 168.8° ~ 191.2°
    西南偏南 9 191.3° ~ 213.7°
    西南 10 213.8° ~ 236.2°
    西南偏西 11 236.3° ~ 258.7°
    西 12 258.8° ~ 281.2°
    西北偏西 13 281.3° ~ 303.7°
    西北 14 303.8° ~ 326.2°
    西北偏北 15 326.3° ~ 348.7°
    16 348.8° ~ 360°
  3. 读取设备Modbus从机地址

    使用0x00地址(广播地址)可以查询任何地址的设备。

    主机查询帧(16进制):00 03 10 00 00 01 81 1B(8byt)

    从机地址 功能码 寄存器起始地址 寄存器长度 校验码高位 校验码低位
    1byt 1byt 2byt 2byt 1byt 1byt
    0x00 0x03 0x10 0x00 0x00 0x01 0x81 0x1B

    从机应答帧(16进制):00 03 02 00 15 8C D8(7byt)

    从机地址 功能码 有效字节数 数据区 校验码高位 校验码低位
    1byt 1byt 1byt 2byt 1byt 1byt
    0x00 0x03 0x02 0x00 0x15 0x8C 0xD8

    当前设备Modbus从机地址=00 15(16进制),即当前设备Modbus从机地址为0x15。

  4. 修改寄存器0x1000,即修改Modbus从机地址(ADDRESS)

    将即Modbus从机地址修改为03

    使用0x00地址(广播地址)可以设置任何地址的设备。

    主机查询帧(16进制):00 10 10 00 00 01 02 00 03 FA 00(11byt)

    从机地址 功能码 寄存器起始地址 寄存器长度 有效字节数 写入的从机地址 校验码高位 校验码低位
    1byt 1byt 2byt 2byt 1byt 2byt 1byt 1byt
    0x00 0x10 0x10 0x00 0x00 0x01 0x02 0x00 0x03 FA 00

    从机应答帧(16进制):00 10 10 00 00 01 04 D8(7byt),即为修改成功。

    从机地址 功能码 寄存器地址 寄存器长度 校验码高位 校验码低位
    1byt 1byt 2byt 2byt 1byt 1byt
    0x00 0X10 0x10 0x00 0x00 0x01 0x04 0xD8

使用教程

准备

接线图

图片介绍

样例代码

复制以下代码到您的Arduino IDE中并上传。

#include "RS485_Wind_Direction_Transmitter_V2.h"


/**
   @brief RS485_Wind_Direction_Transmitter_V2 constructor
   @param serial - serial ports for communication, supporting hard and soft serial ports
   @param rx - UART 接收数据的引脚
   @param tx - UART 发送数据的引脚
*/
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)   // 使用软串口
SoftwareSerial softSerial(/*rx =*/2, /*tx =*/3);
RS485_Wind_Direction_Transmitter_V2 windDirection(/*softSerial =*/&softSerial);
#elif defined(ESP32)   // 使用 可重映射引脚的 硬串口 : Serial1
RS485_Wind_Direction_Transmitter_V2 windDirection(/*hardSerial =*/&Serial1, /*rx =*/D3, /*tx =*/D2);
#else   // 使用硬串口 : Serial1
RS485_Wind_Direction_Transmitter_V2 windDirection(/*hardSerial =*/&Serial1);
#endif

uint8_t Address = 0x02;

const char* Orientation[17] = {
  "北", "东北偏北", "东北", "东北偏东", "东", "东南偏东", "东南", "东南偏南", "南",
  "西南偏南", "西南", "西南偏西", "西", "西北偏西", "西北", "西北偏北", "北"
};

void setup()
{
  Serial.begin(115200);

  // Init the sensor
  while ( !( windDirection.begin() ) ) {
    Serial.println("Communication with device failed, please check connection");
    delay(3000);
  }
  Serial.println("Begin ok!");
//修改modbus从机的地址,若忘记现在的地址可以使用0x00广播地址修改。
//  windDirection.SetSlaveAddress(/*现在modbus从机地址*/0x00, /*修改后的地址*/0x02);
//获取modbus从机的地址。
//  Address = windDirection.GetSlaveAddress();
}

void loop()
{
  //获取16方位风向
  int Direction = windDirection.GetWindDirection(/*modbus从机的地址*/Address);
  //获取360°风向
  float Angle = windDirection.GetWindAngle(/*modbus从机的地址*/Address);
  Serial.println(Orientation[Direction]);
  Serial.print(Angle); Serial.println("°");
  Serial.println();
  delay(1000);
}

结果

图片介绍

常见问题

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

更多

DFRobot 商城购买链接