เซนเซอร์ตัวนี้เป็นแบบถ้วยหมุน ส่งข้อมูลผ่านสาย RS485 ด้วยโปรโตคอล Modbus RTU เราจะใช้ Arduino UNO ต่อผ่านโมดูล RS485 เพื่ออ่านค่าความเร็วลมออกมาแสดงบน Serial Monitor
1.อุปกรณ์ที่ต้องใช้
- Arduino UNO
ซื้อเลยบน Shopee
- โมดูล RS485
ซื้อเลยบน Shopee
- เซนเซอร์วัดความเร็วลม Wind Speed 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=886e65a1-2d3d-43b5-a2c1-e9db34ea6a42)
ส่วนแรก ต่อ 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
4const uint8_t rxPin = 11;
5const uint8_t txPin = 12;
6const uint8_t dePin = 13;
7
8SoftwareSerial mySerial(rxPin, txPin);
9ModbusRTUMaster modbus(mySerial, dePin);
10
11uint16_t holdingRegisters[2];
12float windSpeed;
13
14void setup() {
15 Serial.begin(9600);
16 modbus.begin(4800);
17}
18
19void loop() {
20 modbus.readHoldingRegisters(1, 0, holdingRegisters, 1);
21 windSpeed = holdingRegisters[0] / 10;
22 Serial.print("Wind Speed : ");
23 Serial.print(windSpeed);
24 Serial.println(" m/s");
25}
261#include <SoftwareSerial.h>
2#include <ModbusRTUMaster.h>
3
4const uint8_t rxPin = 11;
5const uint8_t txPin = 12;
6const uint8_t dePin = 13;
7
8SoftwareSerial mySerial(rxPin, txPin);
9ModbusRTUMaster modbus(mySerial, dePin);
10
11uint16_t holdingRegisters[2];
12float windSpeed;
13
14void setup() {
15 Serial.begin(9600);
16 modbus.begin(4800);
17}
18
19void loop() {
20 modbus.readHoldingRegisters(1, 0, holdingRegisters, 1);
21 windSpeed = holdingRegisters[0] / 10;
22 Serial.print("Wind Speed : ");
23 Serial.print(windSpeed);
24 Serial.println(" m/s");
25}
26
5.ผลลัพธ์
Serial Monitor จะแสดงความเร็วลมขณะนั้น
.png?alt=media&token=00cc3632-2b0b-4486-a6c7-13e523f8d08f)
