简介
风向传感器是用于测量风的水平风向的专业气象仪器。其内部采用霍尔角度传感器,传感器壳体和风向标采用铝合金材料,使用特种模具精密压铸工艺,尺寸公差甚小表面精度甚高,内部电路均经过防护处理,整个传感器具有很高的强度、耐候性、防腐蚀和防水性。电缆接插件为军工插头,具有良好的防腐、防侵蚀性能,能够保证仪器长期使用。选用低惯性风向标感应风向,当风向发生变化,尾翼转动通过轴杆带动轴芯磁铁转动,从而得到准确的风向信息。可以测量以标签北为起点的16个方位的自然界风向,具有很高的性价比,可广泛用于气象、海洋、环境、机场、港口、实验室、工农业及交通等领域。
特性
- 测量精度高,响应速度快、互换性好
- 安装方便,操作简单
- 灵敏度高:启动风速≤0.3m/s
- 适用于各种恶劣环境 、抗风强度大
技术规格
- 测量范围:16方位和360度风向值
- 启动风速:0.3m/s
- 引线长度:2.5m
- 供电电压:7-24V
- 通讯协议:RS485接口Modbus协议
尺寸
使用说明书
1、线色说明
颜色 | 功能 |
---|---|
红色 | 电源正 |
黑色 | 电源负 |
黄色 | RS485+/A/T+ |
绿色 | RS485-/B/T- |
2、安装说明
安装时传感器上白点必须朝向正北。
3、Modbus协议
-
**通讯参数默认值为:**波特率9600bps,一个起始位,8个数据位,无校验,一个停止位。
-
Modbus 寄存器
参数名称 | 寄存器地址 | 功能类型 | 功能号 | 参数范围及说明 | 默认值 |
---|---|---|---|---|---|
360°风向值 | 0x0000 | INT16 只读 |
0x03/读 | 0x00-0xE10(16进制) | 无 |
16方位风向值 | 0x0001 | INT16 只读 |
0x03/读 | 0x00-0x0F(16进制) | 无 |
Modbus从机地址 | 0x1000 | INT16 读写 |
0x03/读 0x10/写 |
0x00-0xFF(16进制) | 2 |
- Modbus 寄存器参数说明
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地址可以设置任何地址。
- 举例说明
-
读取设备(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°)的夹角。
-
读取设备(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° -
读取设备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。
-
修改寄存器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
使用教程
准备
- 硬件
RS485风向变送器
Gravity: RS485转UART 有源隔离型 信号转换模块
Arduino Uno
- 软件
Arduino IDE,点击下载Arduino IDE
RS485_Wind_Direction_Transmitter_V2库,点击下载RS485_Wind_Direction_Transmitter_V2库
如何安装库文件,点击链接
接线图
样例代码
复制以下代码到您的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 或者论坛联系我们!
更多问题及有趣的应用,可以访问论坛进行查阅或发帖