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

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

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

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

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

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

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

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

ส่วนแรก ต่อ 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