การใช้งานรีเลย์

รีเลย์

รีเลยเปนอุปกรณอิเล็กทรอนิกสที่ใชในการตัดตอวงจรคลายกับสวิตช รีเลย์ทั่วไปจะใช้ปรากฎการณ์ทางไฟฟ้าแม่เหล็กในการทำงาน และเรียกวาเป็นแบบมีหนาสัมผัส รีเลย์หนึ่ง ๆ จะประกอบดวยชุดหนาสัมผัส (Contact) ที่ตอกับ แท่งอารเมเจอร (Armature) และคอยล (Coil) ที่ถูกพันดวยขดลวด เมื่อมีการจายแรงดันไฟฟาใหกับคอยลจะทําใหเกิดสนามแมเหล็ก แทงอารเมเจอรที่ตอกับหนาสัมผัสจะถูกดูดด้วยแรงแม่เหล็ก ทําใหหนาสัมผัสเปลี่ยนสถานะการเชื่อมตอเปนสถานะตรงกันขาม กลาวคือ ปกติเปด (NO, Normally Open) จะกลายเปนปด และปกติปด (NC, Normally Closed) จะกลายเปนเปด และเมื่อตัดไฟเลี้ยงที่จายใหคอยล จะทําใหรีเลยกลับสูสถานะเดิม คือหนาสัมผัสตางๆ จะกลับสูสภาวะแรกกอนการจายไฟดวยแรงจากสปริงที่ติดตั้งอยู่ภายใน รูปรางทั่วไปของรีเลย์ขั้วเดียวสองทาง (Single Pole Double Throw, SPDT) และลักษณะภายในของรีเลย์แสดงดังรูปที่ 4.1 (ก) และ (ข) และ บอรดรีเลยที่ใชในการทดลองแสดงดังรูปที่ 4.2 โดยบอร์ดที่เลือกใช้นี้มีวงจรควบคุมรีเลยอยู 4 ชุด

 

1

รูปที่ 4.1 (ก) รูปร่างและ (ข) ลักษณะภายในของรีเลย์

 

4

รูปที่ 4.2 บอร์ดรีเลย์ชนิด 4 ช่อง แบบ isolation control, 250V/10A และ Active Low

 

การทํางานของวงจรควบคุมรีเลยขึ้นอยู่กับลักษณะการต่อวงจร โดยสำหรับบอร์ดที่แสดงในรูปที่ 4.2 นี้ รีเลยจะทํางานเมื่อได้รับสัญญาณลอจิกต่ำ (Active Low) ที่ขา IN แต่ละขา ซึ่งเราจะทำการเชื่อมตออยูกับขาของ NodeMCU v.3 โดยเมื่อป้อนสัญญาณระดับต่ำ (LOW) ที่ขา IN1 (ดูรูปที่ 4.3) แล้ว กระแสไฟฟาจะไหลผาน LED ทำให้ LED สวาง สวนภายในชิฟ U1 นั้น เมื่อมีกระแสไหลผ่านก็จะมีการส่งสัญญาณแสงทําใหทรานซิสเตอร์ใน U1 นํากระแสและทำให้ทรานซิสเตอร์ Q1 มีสถานะนำกระแสด้วย ซึ่งก็จะทำให้รีเลย์ทำงาน (คือมีการเปลี่ยนสถานะ) สำหรับไดโอด D1 ที่ต่อขนานกับคอยล์ของรีเลย์นั้น เพื่อทำให้กระแสไฟฟ้าสามารถไหลย้อนกลับทางได้ในช่วงเวลาสั้น ๆ ขณะที่รีเลย์เปลี่ยนสถานะ

 

3

รูปที่ 4.3 วงจรบอร์ดรีเลย์ (เฉพาะส่วนของรีเลย์ตัวที่ 1)

 

รูปที่ 4.4 แสดงตัวอย่างการนำรีเลย์ไปใช้ควบคุมอุปกรณ์ไฟฟ้าทั่วไป เช่น หลอดไฟ โดยเราสามารถต่ออุปกรณ์แรงดัน 220 V กระแสสูงสุด 10 แอมแปร์กับบอร์ดรีเลย์นี้ได้ โดยในการทดลองเบื้องต้น เราจะไม่มีการต่อไฟฟ้าแรงดัน 220 V จริง ดังนั้นเราอาจจะเอาจัมเปอร์ JD บนบอร์ดรีเลย์นี้ออก (ดูรูปที่ 4.2 และ รูปที่ 4.3) เพื่อมิให้รีเลย์ทำงานจริงแต่จะสังเกตการทำงานผ่านหลอด LED ที่แสดงสถานะของรีเลย์บนบอร์ดรีเลย์แทน

 

1

 

รูปที่ 4.4 ตัวอย่างการนำรีเลย์ไปควบคุมกับอุปกรณ์ไฟฟ้าทั่วไป

 

 

การเขียนโปรแกรมส่งออกค่าดิจิทัล

คำสั่งเบื้องต้นในการใช้งานรีเลย์ ในภาษา Arduino แสดงแยกเป็นหัวข้อย่อย ดังนี้

1. ฟงกชันเอาตพุตแบบดิจิทัล (Digital Output)

1) pinMode(pin, mode) เปนคําสั่งใชกําหนดขา (หรือพอรต) ใด ๆ ที่ทําหนาที่
เปนพอรตดิจิทัล ปกติจะใช้ในฟังก์ชัน
setup() เพื่อกำหนดการทำงานเริ่มต้นของขาต่าง ๆ ที่เกี่ยวข้อง

- pin หมายถึงชื่อหรือเลขขาของบอร์ด NodeMCU เปน D0, D1, … หรือเป็นเลขจำนวนเต็ม โดยชื่อขาเหล่านี้ ถูกกำหนดให้สอดคล้องกับพิน GPIO อยู่ก่อนแล้ว (ดูรูปที่ 3.2)

- mode หมายถึงโหมดการทํางาน กำหนดให้มีค่าเปน INPUT หรือ OUTPUT เท่านั้น

ตัวอย่างเชน คำสั่ง pinMode(D1, OUTPUT) คือการกําหนดใหขา D1 ของ NodeMCU ทํางานโดยส่งสัญญาณออกไปเท่านั้น

2) digitalWrite(pin, value) เปนคําสั่งให้ขาที่กําหนดมีสถานะเปนลอจิกสูง (HIGH หรือ “1”) หรือเปนลอจิกต่ำ (LOW หรือ “0”)

- pin หมายถึงชื่อหรือเลขขาของบอร์ด NodeMCU

- value หมายถึงคา กำหนดให้มีค่าเปน HIGH หรือ LOW เท่านั้น

ตัวอย่างเชน คำสั่ง digitalWrite(D0, HIGH) คือการกําหนดใหขา D0 ของ NodeMCU มีคาเปนลอจิกสูง (HIGH) ซึ่งจะมีระดับแรงดัน 3.3 V

 

2. ฟงกชันหนวงเวลา (Time Delay)

1.) delay(value) เปนคําสั่งใหหนวงเวลา

- value หมายถึงคาการหนวงเวลามีหนวย 1/1000 วินาที หรือมิลลิวินาที (ms) โดยจะรับค่าที่มีชนิดเป็นเลขจำนวนเต็ม (integer, int) เท่านั้น

ตัวอย่างเชน delay(1000); คือการกําหนดใหโปรแกรมหนวงเวลา 1 วินาที
(1 s = 1000 ms = 1000000 µs)

2.) delayMicroseconds(time) เปนคําสั่งใหหนวงเวลา

- time หมายถึงคาการหนวงเวลามีหนวย 1/1000000 วินาที (µs หรือ us โดยเรามักใช้ ‘u’ แทน สัญลักษณ์ไมโคร ‘µ’) ฟังก์ชันนี้จะรับค่าเป็นเลขจำนวนเต็ม

ตัวอย่างเชน delayMicroseconds(1000); กําหนดใหการหนวงเวลามีคาเทากับ 1 มิลลิวินาที

 

ข้อมูลเพิ่มเติม: สำหรับตัวแปร int (คือจำนวนเต็มหรือ integer) ในภาษา C จะมีค่าระหว่าง -32768 ถึง 32767 (-215 ถึง 215-1) ในขณะที่ ตัวแปร unsigned int (คือจำนวนเต็มแบบไม่คิดเครื่องหมาย) จะมีค่าระหว่าง 0 ถึง 65535 (0 ถึง 216-1)

 

 

การทดลองควบคุมรีเลย์

วัตถุประสงค์

1. สามารถตอบอร์ด NodeMCU v.3 กับบอร์ดรีเลย์ได

2. สามารถเขียนโปรแกรมให้ NodeMCU ควบคุมการทํางานของรีเลย์ได

3. เขียนโปรแกรมควบคุมรีเลย์โดยมีการหนวงเวลาประกอบด้วยได

 

อุปกรณ์ที่ใช้ในการทดลอง

1.     เครี่องคอมพิวเตอร์ที่มีระบบปฏิบัติการ Windows (ตั้งแต่ Windows 7 ขึ้นไป)
พร้อมติดตั้งโปรแกรม
Arduino IDE 1.8.8 IoT                            1 เครื่อง

2.     NodeMCU v.3                                                             1 บอร์ด

3.     NodeMCU Base Ver 1.0                                                 1 บอร์ด

4.     บอร์ดรีเลย์ชนิด 4 ช่อง                                                      1 บอร์ด

5.     สาย USB                                                                    1 เส้น

6.     สายต่อวงจร (สายจัมพ์ เมีย-เมีย)                                            6 เส้น

 

วิธีการทดลอง

1. ตอวงจรตามรูปที่ 4.5 โดยต่อทางดานอินพุท (input) ของรีเลย์หมายเลข 1 (IN1) ที่ขา D1, รีเลย์หมายเลข 2, 3, และ 4 (IN2, IN3, และ IN4) ที่ขา D2, D3 และ D4 สวนขา GND (ขากราวด์) ให้ต่อร่วมกันและ ต่อขา VCC กับ VUSB ซึ่งคือไฟบวก +5 V ที่บอร์ด NodeMCU Base Ver 1.0 ที่ได้รับมาจากคอมพิวเตอร์ จากนั้นดึงจัมเปอร์ JD บนบอร์ดรีเลย์ออกก่อนเพื่อมิให้ไฟเข้าไปเลี้ยงคอยล์และสังเกตการทำงานของรีเลย์ผ่าน LED บนบอร์ดก่อน

ในการเขียนโปรแกรมควบคุมใหรีเลย์ที่ทํางานแบบ Active Low เราตองป้อนสัญญาณลอจิกต่ำ (LOW) ที่ตําแหนงขา ของ NodeMCU ที่ต่อเพื่อควบคุมรีเลย์ ดังนั้น เราจึงใช้คำสั่ง #define ในการกำหนดชื่อ ให้ LOW คือ ON และ HIGH คือ OFF เพื่อให้คำสั่งที่เขียนสอดคล้องกับการทำงานของรีเลย์

1

 

รูปที่ 4.5 การต่อ NodeMCU v.3 เพื่อควบคุมการเปิด-ปิดรีเลย์

 

2. เขียนโค้ดควบคุมรีเลย์ในโปรแกรม Arduino IDE เพื่อควบคุมการเปด-ปดการทํางานของรีเลย 4 ตัวพร้อม ๆ กัน โดยให้เปิด-ปิดเป็นเวลา 1 วินาทีสลับกันไปเรื่อย ๆ ตลอดเวลา แผนผังการทำงานของโปรแกรมในการทดลองนี้แสดงได้ดังรูปที่ 4.6

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// Control 4-channel Relay by NodeMCU ESP8266

 

#define ON LOW

#define OFF HIGH

int Relay1 = D1;

int Relay2 = D2;

int Relay3 = D3;

int Relay4 = D4;

 

void setup() {

    pinMode(Relay1, OUTPUT);

    pinMode(Relay2, OUTPUT);

    pinMode(Relay3, OUTPUT);

    pinMode(Relay4, OUTPUT);

}

 

void loop() {

    digitalWrite(Relay1, ON);

    digitalWrite(Relay2, ON);

    digitalWrite(Relay3, ON);

    digitalWrite(Relay4, ON);

    delay(1000);

    digitalWrite(Relay1, OFF);

    digitalWrite(Relay2, OFF);

    digitalWrite(Relay3, OFF);

    digitalWrite(Relay4, OFF);

    delay(1000);

}

 

 

1

 

รูปที่ 4.6 แผนผังการทำงานของโปรแกรมที่แสดงในการทดลองนี้

 

 

แบบฝึกหัดท้ายการทดลอง

หากเราต้องการสร้างสัญญาณไฟจราจร (ไฟเขียว-เหลือง-แดง) โดยใช้ NodeMCU และบอร์ดรีเลย์ควบคุมการทำงานของไฟสัญญาณ (ไฟสัญญาณแดง-เหลือง-เขียว) (ดูรูปที่ 4.7) โดยกำหนดให้ระบบควบคุมรีเลย์ทำงานดังแสดงในตารางที่ 4.1 จงเขียนโค้ดโปรแกรมสำหรับการสร้างสัญญาณไฟจราจรนี้

 

2

 

รูปที่ 4.7 รูปประกอบแบบฝึกหัดท้ายการทดลอง

 

ตารางที่ 4.1 สถานะของรีเลย์ที่ช่วงเวลาต่าง ๆ เพื่อใช้ควบคุมไฟสัญญาณจราจร

 

เวลา (วินาที)

รีเลย์ 1

สีเขียว

รีเลย์ 2

สีเหลือง

รีเลย์ 3

สีแดง

10

ON

OFF

OFF

3

OFF

ON

OFF

8

OFF

OFF

ON