1. อุปกรณ์ที่ต้องใช้
- Arduino UNO
ซื้อเลยบน Shopee
- โมดูล RS485
ซื้อเลยบน Shopee
- เซนเซอร์วัดทิศทางลม Wind Direction Sensor Modbus RTU
ซื้อเลยบน Shopee
- Switching Supply 12V หรือ อะแดปเตอร์ 12V สำหรับจ่ายไฟเซนเซอร์
2.ติดตั้ง Library ที่จำเป็น
โหลด Library ชื่อ ModbusRTUMaster ได้ที่ลิงก์นี้
โหลดเสร็จก็เข้า Arduino IDE ไปที่ Sketch > Include Library > Add .ZIP Library แล้วเลือกไฟล์ที่เพิ่งโหลดมา รอสักครู่จะมีข้อความขึ้นว่าติดตั้งสำเร็จ
3.ต่ออุปกรณ์
.png?alt=media&token=24361eb0-6123-4d62-af15-2592eac9da70)
ส่วนแรก ต่อ 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}
1051#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}
1055.ผลลัพธ์
Serial Monitor จะแสดงข้อมูลของทิศทางลม
.png?alt=media&token=385e12dd-7e5e-46b3-887f-ce30acf8bc64)
