Introduction
The wind direction sensor is a professional meteorological instrument used to measure horizontal wind direction. It integrates a hall sensor inside. The shell and weather vane are made of aluminum alloy material and use special mold precision die casting process, featuring small dimension tolerance and high surface accuracy. The sensor internal circuit is protected, which makes the sensor have the properties of high strength, weather resistance, anti-corrosion, and waterproof. The cable connector adopts corrosion-resistant military plug that ensures the long service life of the product.
A low-inertia wind vane is used to sense the wind direction. When the wind direction changes, the tail wing rotates to drive the axle magnet to rotate through the shaft, thereby obtaining accurate wind direction information. It can detect the 16 natural wind directions. This sensor with high cost performance can be widely used in meteorology, ocean, environment, airports, ports, laboratories, industry, agriculture and transportation.
Features
- High measurement accuracy, fast response, good interchangeability
- Easy to install and operate
- High sensitivity: start-up wind speed ≤ 0.3m/s
- Suitable for various harsh environments, strong wind resistance
Specification
- Measuring Range: 16 directions
- Start-up Wind Speed: 0.3m/s
- Lead Length: 2.5m
- Power Voltage: 7-24V
- Communication Protocol: RS485 interface Modbus protocol
Dimension
User Guide
1. Wire Color Description
Color | Function |
---|---|
Red | Positive |
Black | Negative |
Yellow | RS485+/A/T+ |
Green | RS485-/B/T- |
2. Installation Instruction
The white dot on the sensor must face true north in installation.
3. Modbus Protocol
The default communication parameters are: baud rate 9600bps, one start bit, 8 data bits, no parity, and one stop bit.
Modbus Register
Parameter | Register Add. | Function Type | Function No. | Parameter Range & Description | Default Value |
---|---|---|---|---|---|
Wind Direction Value | 0x0000 | INT16 RO | 0x03/reading | 0-15 | None |
Modbus Slave Address | 0x1000 | INT16 reading-and-writing | 0x03/reading 0x10/writing |
0-255 | 2 |
- Modbus Register Parameter Instruction
Wind Direction Value | ||
---|---|---|
Parameter Range | 0-15 | Default Value: none |
Parameter Storage | None |
Indication: wind direction value
Example: If the returned value is 00 04 (hexadecimal, true form), the high byte of the first byte is 00, the low byte of the second byte is 04, and the measured wind direction value is (00*256+04)=4, 0 for true north and clockwise 4 for true east.
Modbus Slave Add. (ADDRESS) | ||
---|---|---|
Parameter Range | 0-255 | Default Value: 2 |
Parameter Storage | Immediate storage |
Modbus address can be set to 0-255. You can use 0 address to set any address.
- Example
- Read register 0x0000, also wind direction value
Host query frame (hexadecimal): 02 03 00 00 00 01 84 39 (8byt)
Slave Add. | Function Code | Register Start Add. | Length of Register | High Bits of Check Code | Low Bits of Check Code |
---|---|---|---|---|---|
1byt | 1byt | 2byt | 2byt | 1byt | 1byt |
0x02 | 0x03 | 0x00 0x00 | 0x00 0x01 | 0x84 | 0x39 |
Slave response frame (hexadecimal): 02 03 02 00 03 BC 45 (7byt)
Slave Add. | Function Code | Number of Valid Bytes | Data Aera | High Bits of Check Code | Low Bits of Check Code |
---|---|---|---|---|---|
1byt | 1byt | 1byt | 2byt | 1byt | 1byt |
0×02 | 0x03 | 0x02 | 0x00 0x03 | 0xBC | 0x45 |
16 directions value = 00 03 = 3, the direction is east-northeast according to the table below.
Correspondence Table
Value | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Direction | North | Northeast by north | Northeast | Northeast by east | East | Southeast by east | Southeast | Southeast by south | South | Southwest by south | Southwest | Southwest by west | West | Northwest by west | Northwest | Northwest by north |
- Change register 0x1000, i.e. change Modbus slave address (ADDRESS)
Change Modbus slave address to 03
Host query frame (hexadecimal): 00 10 10 00 00 01 02 00 03 FA 00 (11byt)
Slave Add. | Function Code | Register Start Add. | Length of Register | Number of Valid Bytes | Slave Add. to Be Written | High Bits of Check Code | Low Bits of Check Code |
---|---|---|---|---|---|---|---|
1byt | 1byt | 2byt | 2byt | 1byt | 2byt | 1byt | 1byt |
0x00 | 0x10 | 0x10 0x00 | 0x00 0x01 | 0x02 | 0x00 0x03 | FA | 00 |
Slave response frame (hexadecimal): 00 10 10 00 00 01 04 D8 (7byt), and that indicates the modification is successful.
Tutorial on Raspberry Pi
1. Connection
Here USB to RS485 Module is used.
2. Install libraries and download routines
Type the following commands in the terminal one by one
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb //Download wiringpi library
sudo dpkg -i wiringpi-latest.deb //Install wiringpi library
cd ..... //Enter the content you want to save file in
git clone https://github.com/DFRobotdl/RS485_Wind_Direction_Transmitter.git //Download program in github
cd RS485_Wind_Direction_Transmitter/
3. API Function List
/**
@brief initialize serial port
@param device Address of serial port,In Linux, it is the directory where the device is located.
@return Return 1 for initialization failure, and return 0 for initialization success
*/
unsigned char Init(char *device);
/**
@brief Modify address
@param Address1 For the current address, you can set any address with 0 address
@param Address2 The modified address.
@return A return value of 1 indicates success, and a return value of 0 indicates failure
*/
unsigned char ModifyAddress(unsigned char Address1, unsigned char Address2);
/**
@brief Read wind direction
@param Address The address where you want to read the data
@return The return value ≥0 indicates successful reading, the return value is the wind direction corresponding to the following table, and the return value is -1 indicates failed reading
Return the value to the direction correspondence table
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| value | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|-----------|-------|-----------|-----------|-----------|------|-----------|-----------|-----------|-------|-----------|-----------|-----------|------|-----------|-----------|-----------|
| Direction | North | Northeast | Northeast | Northeast | East | Southeast | Southeast | Southeast | South | Southwest | Southwest | Southwest | West | Northwest | Northwest | Northwest |
| | | by north | | by east | | by east | | by south | | by south | | by west | | by west | | by north |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/
int readWindDirection(unsigned char Address);
4. Check the device
Type this in the terminal:
sudo ls -l /dev
Find out the device you just connected in.
5. Open the previously downloaded min.c file, change the device port in the program to the actual one and save it
6. Use the terminal to open the folder where the program is located, compile and run
gcc -Wall -lwiringPi -o Wind_Direction *.c
sudo ./Wind_Direction
You can see the accurate wind direction information
FAQ
For any questions, advice or cool ideas to share, please visit the DFRobot Forum.