เซนเซอร์วัดทิศทางลม 16 ทิศ Wind Direction Sensor Modbus RTU RS485 SNP-00034
รหัสสินค้า: SNP-00034

เซนเซอร์วัดทิศทางลม 16 ทิศ Wind Direction Sensor Modbus RTU RS485 SNP-00034

1. อุปกรณ์ที่ต้องใช้

2.ติดตั้ง Library ที่จำเป็น

โหลด Library ชื่อ ModbusRTUMaster ได้ที่ลิงก์นี้

โหลดเสร็จก็เข้า Arduino IDE ไปที่  Sketch > Include Library > Add .ZIP Library แล้วเลือกไฟล์ที่เพิ่งโหลดมา รอสักครู่จะมีข้อความขึ้นว่าติดตั้งสำเร็จ

3.ต่ออุปกรณ์

เซนเซอร์วัดทิศทางลม 16 ทิศ Wind Direction Sensor Modbus RTU RS485 SNP-00034

ส่วนแรก ต่อ Arduino UNO เข้ากับโมดูล RS485 ก่อน

Arduino Uno
Max485 Module
5V
VCC
GND
GND
D11
RO
D12
DI
D13
DE และ RE*
  • *โยงรวมกันแล้วต่อขาเดียว

ส่วนที่สอง ต่อไฟ 12V เข้าเซนเซอร์

แหล่งจ่าย (12V)
เซนเซอร์ทิศทางลม
+
สายสีน้ำตาล
-
สายสีดำ

ส่วนที่สาม ต่อโมดูล RS485 เข้าเซนเซอร์

Max485 Module
เซนเซอร์ทิศทางลม
A
สายสีเหลือง
B
สายสีน้ำเงิน

ส่วนที่สี่ เชื่อม GND ของ Arduino กับ Power Supply

Arduino Uno
แหล่งจ่าย (12V)
GND
-

มีจุดที่หลายคนพลาดบ่อยมาก คือ GND ของ Arduino กับ GND ของอะแดปเตอร์ 12V ต้องต่อถึงกัน ไม่งั้นเซนเซอร์จะคุยกับ Arduino ไม่รู้เรื่อง ค่าจะไม่ขึ้น

4.ลงโปรแกรม 

Copy โค้ดด้านล่าง

Arduino
1#include <SoftwareSerial.h>
2#include <ModbusRTUMaster.h>
3
4// ------------------------------------------------------------------------------
5// |   Register Type   | Register Address | Register Contents | Number of Bytes |
6// ------------------------------------------------------------------------------
7// |                   |       0x0000     |    Wind Angle     |        1        |
8// |                   |--------------------------------------------------------|
9// |                   |       0x0001     |   Wind Direction  |        1        |
10// |                   |--------------------------------------------------------|
11// | Holding Register  |       0x2000     |   Device Address  |        1        |
12// |                   |--------------------------------------------------------|
13// |                   |                  |     Baud Rate     |                 |
14// |                   |                  |      0 : 2400     |                 |
15// |                   |       0x2001     | 1 : 4800(Default) |        1        |
16// |                   |                  |      2 : 9600     |                 |
17// ------------------------------------------------------------------------------
18
19const uint8_t rxPin = 11;
20const uint8_t txPin = 12;
21const uint8_t dePin = 13;
22
23SoftwareSerial mySerial(rxPin, txPin);
24ModbusRTUMaster modbus(mySerial, dePin);
25
26uint16_t holdingRegisters[2];
27String windDirection;
28float angle;
29
30void setup() {
31  Serial.begin(9600);
32  modbus.begin(4800);
33}
34
35void loop() {
36  modbus.readHoldingRegisters(1, 0, holdingRegisters, 2);
37
38  switch (holdingRegisters[1]) {
39    case 0:
40      windDirection = "North";
41      break;
42    case 1:
43      windDirection = "North-northeast";
44      break;
45    case 2:
46      windDirection = "Northeast";
47      break;
48    case 3:
49      windDirection = "East-northeast";
50      break;
51    case 4:
52      windDirection = "East";
53      break;
54    case 5:
55      windDirection = "East-southeast";
56      break;
57    case 6:
58      windDirection = "Southeast";
59      break;
60    case 7:
61      windDirection = "South-southeast";
62      break;
63    case 8:
64      windDirection = "South";
65      break;
66    case 9:
67      windDirection = "South-southwest";
68      break;
69    case 10:
70      windDirection = "Southwest";
71      break;
72    case 11:
73      windDirection = "West-southwest";
74      break;
75    case 12:
76      windDirection = "West";
77      break;
78    case 13:
79      windDirection = "West-northwest";
80      break;
81    case 14:
82      windDirection = "Northwest";
83      break;
84    case 15:
85      windDirection = "North-northwest";
86      break;
87    case 16:
88      windDirection = "North";
89      break;
90    default:
91      windDirection = "Error";
92      break;
93  }
94
95  angle = holdingRegisters[0]/10;
96  Serial.print("Wind Direction : ");
97  Serial.print(windDirection);
98  Serial.print("     |     ");
99  Serial.print("Angle : ");
100  Serial.print(angle);
101  Serial.println("°");
102
103  delay(1000);
104}
105

5.ผลลัพธ์

Serial Monitor จะแสดงข้อมูลของทิศทางลม

เซนเซอร์วัดทิศทางลม 16 ทิศ Wind Direction Sensor Modbus RTU RS485 SNP-00034