XY-MD02 เป็นเซ็นเซอร์สำหรับวัดอุณหภูมิและความชื้นในอากาศ มีความแม่นยำสูง โดยมักใช้ในระบบควบคุมสภาพแวดล้อมต่าง ๆ เช่น ระบบปรับอากาศ โรงเรือนเกษตร และอุปกรณ์ IoT เพื่อช่วยในการปรับปรุงประสิทธิภาพการทำงานตามสภาพแวดล้อมที่เปลี่ยนแปลงไป
1.ดาวน์โหลด และติดตั้ง Library ModbusMaster
ติดตั้ง Library ModbusMaster
ArduinoIDE > Sketch > Include Library > Add .ZIP Library > หาไฟล์ที่ดาวน์โหลด
2.ต่ออุปกรณ์
.png?alt=media&token=f6284264-74c0-473a-9d5c-7ba391ce0d12)
Arduino UNO > RS485 module
5V>VCCGND>GND2>R05>RE3>DI4>DE
Arduino UNO > XY-MD02
5V>+GND>-
RS485 module > XY-MD02
B>B-A>A+
3.ลงโปรแกรม
Copy โค้ดด้านล่าง
Arduino
1#include <SoftwareSerial.h>
2#include <ModbusMaster.h>
3
4SoftwareSerial mySerial(2, 3); // RX, TX
5
6#define MAX485_DE 4
7#define MAX485_RE_NEG 5
8
9ModbusMaster node;
10
11void preTransmission()
12{
13 digitalWrite(MAX485_RE_NEG, 1);
14 digitalWrite(MAX485_DE, 1);
15}
16
17void postTransmission()
18{
19 digitalWrite(MAX485_RE_NEG, 0);
20 digitalWrite(MAX485_DE, 0);
21}
22
23void setup()
24{
25 pinMode(MAX485_RE_NEG, OUTPUT);
26 pinMode(MAX485_DE, OUTPUT);
27 // Init in receive mode
28 digitalWrite(MAX485_RE_NEG, 0);
29 digitalWrite(MAX485_DE, 0);
30 Serial.println("start init serial 0");
31 Serial.begin(9600);
32
33 while (!Serial) {
34 Serial.println("loop for init serial 0");
35 }
36 Serial.println("start init software serial");
37 mySerial.begin(9600);
38 while (!mySerial) {
39 Serial.println("loop for init software serial");
40 }
41
42 node.begin(1, mySerial);
43 node.preTransmission(preTransmission);
44 node.postTransmission(postTransmission);
45
46}
47
48void loop()
49{
50 uint8_t result;
51 uint16_t data[2];
52
53 Serial.println("get data");
54 result = node.readInputRegisters(1, 2);
55 if (result == node.ku8MBSuccess)
56 {
57 Serial.print("Temp: ");
58 Serial.println(node.getResponseBuffer(0) / 10.0f);
59 Serial.print("Humi: ");
60 Serial.println(node.getResponseBuffer(1) / 10.0f);
61 Serial.println();
62
63 }
64 delay(1000);
65}1#include <SoftwareSerial.h>
2#include <ModbusMaster.h>
3
4SoftwareSerial mySerial(2, 3); // RX, TX
5
6#define MAX485_DE 4
7#define MAX485_RE_NEG 5
8
9ModbusMaster node;
10
11void preTransmission()
12{
13 digitalWrite(MAX485_RE_NEG, 1);
14 digitalWrite(MAX485_DE, 1);
15}
16
17void postTransmission()
18{
19 digitalWrite(MAX485_RE_NEG, 0);
20 digitalWrite(MAX485_DE, 0);
21}
22
23void setup()
24{
25 pinMode(MAX485_RE_NEG, OUTPUT);
26 pinMode(MAX485_DE, OUTPUT);
27 // Init in receive mode
28 digitalWrite(MAX485_RE_NEG, 0);
29 digitalWrite(MAX485_DE, 0);
30 Serial.println("start init serial 0");
31 Serial.begin(9600);
32
33 while (!Serial) {
34 Serial.println("loop for init serial 0");
35 }
36 Serial.println("start init software serial");
37 mySerial.begin(9600);
38 while (!mySerial) {
39 Serial.println("loop for init software serial");
40 }
41
42 node.begin(1, mySerial);
43 node.preTransmission(preTransmission);
44 node.postTransmission(postTransmission);
45
46}
47
48void loop()
49{
50 uint8_t result;
51 uint16_t data[2];
52
53 Serial.println("get data");
54 result = node.readInputRegisters(1, 2);
55 if (result == node.ku8MBSuccess)
56 {
57 Serial.print("Temp: ");
58 Serial.println(node.getResponseBuffer(0) / 10.0f);
59 Serial.print("Humi: ");
60 Serial.println(node.getResponseBuffer(1) / 10.0f);
61 Serial.println();
62
63 }
64 delay(1000);
65}
4.ผลลัพธ์
Serial Monitor จะแสดงค่าอุณหภูมิและความชื้นขณะนั้น
.png?alt=media&token=223bb60d-27ce-473d-b423-754289086e2c)
