Raspberry Pi 3 [Relay Control]

จากตอนที่แล้ว เราได้ลองต่อเซนเซอร์ภายนอก ซึ่งเซนเซอร์จะเป็นประเภท Input เพื่อนำข้อมูลไปประมวลผลต่อตามที่เราต้องการ

ยังมีอุปกรณ์บางตัวที่เราสามารถต่อเป็น Output จาก Raspberry Pi ได้ด้วย

ซึ่งหนึ่งในนั้นจะเป็นอุปกรณ์หลักที่นำมาเชื่อมต่อกับอุปกรณ์อื่นๆ ได้อย่างหลากหลาย นั่นคือ รีเลย์ (Relay) – (ไม่ใช่ Delay นะครับ กรุณาอย่าสับสน)

 

Relay คืออะไร

Relay ถ้าให้พูดจากความเข้าใจคือ สวิตซ์ ประเภทหนึ่งครับ ที่จะทำงานตามกระแสไฟ นั่นคือ เมื่อมีกระแสไฟไปเหนี่ยวนำภายใน สวิตซ์ก็จะทำงาน (Energize)
(พูดให้เข้าใจอีกครั้งหนึ่งคือ เหมือนสวิตซ์ตามผนังนี่แหละครับ แต่แทนที่จะเอามือไปกด เราก็ใช้กระแสไฟเข้าไปให้มันทำงานแทนนั่นเอง)
และในบางครั้ง ในระบบไฟฟ้ากำลัง อาจจะเรียกอุปกรณ์นี้ว่า Magnetic Contactor ซึ่งเป็นหลักการทำงานแบบเดียวกันครับ

(ขออภัย หากรูปจะไม่ถูกต้องตามหลักการเป๊ะๆ เพราะวาดจากความเข้าใจ)

จากในรูปด้านบนนี้
DC+, DC- คือ ไฟที่เราจะจ่ายให้ขดลวดแม่เหล็ก (ตาม spec ของ relay) เพื่อจะไปทำให้สวิตซ์ Relay ทำงาน
โดยที่ขา
C = Common ขาที่ต้องการให้กระแสไฟมารออยู่ หรือ กระแสไหลกลับ
NC = Normal Close เมื่อไม่มีไฟจ่ายที่ขดลวดแม่เหล็ก ขา C และ NC จะเชื่อมต่อถึงกันอยู่
NO = Normal Open จะทำงานเมื่อมีไฟจ่ายมาที่ขดลวดแม่เหล็ก จะทำให้ขา C และ NO นั้น เชื่อมถึงกัน และทำให้ขา C ขาดการเชื่อมกับ NC

วิธีการอ่านสเปครีเลย์ (ตัวสี่เหลี่ยมสีน้ำเงินในรูปด้านบน)
– 5VDC คือไฟที่เราจ่ายเพื่อให้รีเลย์ทำงาน (Energize)
– 10A 250VAC คือ หน้าคอนแทคทนกระแสได้ 10A ที่ 250V AC
– 15A 125VAC คือ หน้าคอนแทคทนกระแสได้ 15A ที่ 125V AC

 

รีเลย์ที่จะเอามาใช้กับ Raspberry Pi ควรจะเป็นรีเลย์ที่ทำงานด้วยไฟ 5V เพราะจะได้ต่อ +5V และ GND ออกจากบอร์ดของ Raspberry Pi ได้เลย ซึ่งรีเลย์ก็จะมีด้วยกันสองแบบคือ Active Low และ Active High นั่นคือ…

– Active Low รีเลย์จะทำงานเมื่อมีการจ่าย Logic Low เข้ามา (จ่าย GND เข้ามา)
– Active High รีเลย์จะทำงานเมื่อมีการจ่าย Logic High เข้ามา (จ่าย +5V เข้ามา)

รีเลย์บางรุ่นรองรับทั้งสองแบบ แต่จะมี Jumper ให้เซ็ตว่าต้องการทำงานในแบบไหน

 

** ถ้าหากไม่รู้จริงๆ ก็ลองเขียนโปรแกรมตามด้านล่าง เพื่อทดสอบได้ครับ ไม่พัง จ่ายผิด รีเลย์ก็แค่ไม่ทำงานครับ **

** รุ่นที่ผมนำเอามาใช้งาน จะเป็น Active Low นั่นคือจ่าย GND หรือ Logic 0 (เลขศูนย์) เพื่อให้รีเลย์ทำงาน **

 

การเชื่อมต่อนั้นไม่ยากครับ

GND ต่อกับ GND ของ Raspberry Pi
VCC ต่อกับ +5V ของ Raspberry Pi
IN1…4 ต่อกับ GPIO ขาที่ว่างอยู่ โดยดูจาก Pinout ของ Raspberry Pi ครับ

โดยผมเลือกที่จะเชื่อมต่อขาของ Raspberry Pi ดังนี้

ขาที่ [2] เพื่อจ่าย +5V ให้กับรีเลย์
ขาที่ [6] เพื่อจ่าย GND
ขาที่ [29] GPIO 5 เพื่อควบคุม Relay 1
ขาที่ [31] GPIO 6 เพื่อควบคุม Relay 2
ขาที่ [33] GPIO 13 เพื่อควบคุม Relay 3
ขาที่ [37] GPIO 26 เพื่อควบคุม Relay 4

** ไม่จำเป็นต้องต่อให้ครบ ต่อเท่าที่ใช้ก็ได้ **
** ในตลาด มีรีเลย์หลายรุ่นทั้งแบบ 1 ตัว, 4 ตัว, 8 ตัว, 16 ตัว ให้เลือกใช้ตามความต้องการได้เลยครับ **

 

เมื่อเชื่อมต่อเรียบร้อยแล้ว ก็ Power ON ตัว Raspberry Pi ขึ้นมาเลยครับ จากนั้นลองเขียน Python สั่งงานดู ตามด้านล่างนี้เลยครับ

เปิด Terminal จากนั้นใช้คำสั่ง

mkdir projects/relay

cd projects/relay

sudo nano test_cycle.py

เราจะมาลองเขียนให้ on relay 1 ถึง 4 จากนั้นตามด้วย off relay 1 ถึง 4 เพื่อเป็นการทดสอบ Logic ว่ารีเลย์ทำงาน ดังนี้ครับ

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

pins = [5, 6, 13, 26] #เป็น array
GPIO.setup(pins, GPIO.OUT, initial = GPIO.HIGH)

time.sleep(1)

for pin in pins :
 GPIO.output(pin,  GPIO.HIGH)
 print(“PIN: ” + str(pin) + ” is 1 (GPIO.HIGH)”)
 time.sleep(5)
 GPIO.output(pin,  GPIO.LOW)
        print(“PIN: ” + str(pin) + ” is 0 (GPIO.LOW)”)
        time.sleep(5)

GPIO.cleanup()
print “Cleaned up relays”

อธิบายโค้ดคร่าวๆ ดังนี้

GPIO.setmode(GPIO.BCM) #มีสองแบบคือ GPIO.BCM ใช้ GPIO ID และ GPIO.BOARD ใช้ PIN NUMBER

GPIO.setwarnings(False) #เพื่อไม่ให้ show warning ของ relay เช่น สถานะเก่าค้างอยู่ เป็นต้น

pins = [5, 6, 13, 26] #เป็น array ตาม setmode

GPIO.setup(pins, GPIO.OUT, initial = GPIO.HIGH) #เซ็ตอัพ pins ให้เป็นการทำงานแบบ output (เนื่องจาก gpio สามารถเป็นได้ทั้ง input และ output) และ relay ที่เรามาต่อเป็น Active LOW ซึ่งทำงานเมื่อจ่าย GPIO.LOW หรือ Logic 0 จึงเซ็ตค่าเริ่มต้นเป็น HIGH เอาไว้ไม่ให้ทำงานตอน setup (สามารถใช้ 1 แทน GPIO.HIGH ได้)

GPIO.output(pin,  GPIO.LOW) #คือการสั่งจ่าย GPIO.LOW หรือ Logic 0 ให้กับ pin ที่เราต้องการ เพื่อให้ทำงาน (Energize)

 

จากนั้นทดลองรัน ด้วยคำสั่ง python cycle.py

    

ในระหว่างการทำงาน จะเห็นว่าเมื่อมีการจ่าย GPIO.HIGH หรือ Logic 1 ให้กับรีเลย์ จะไม่เกิดการเปลี่ยนแปลงใดๆ
และเมื่อจ่าย GPIO.LOW หรือ Logic 0 ให้กับรีเลย์ จะได้ยินเสียงรีเลย์ทำงาน และเห็นว่าไฟสถานะ LED ติดขึ้น

 

เมื่อรีเลย์ทำงานแล้ว เราสามารถนำ Terminal ของ Relay ไปควบคุมอุปกรณ์ไฟฟ้าได้ (ตามพิกัดกระแสไฟสูงสุดของรีเลย์)
** การทำงานอุปกรณ์ไฟฟ้า (ถึงแม้จะเป็นไฟ 220V แรงต่ำ) ควรใช้ความระมัดระวัง **
** ควรทำการตัดกระแสไฟก่อนทุกครั้ง เพื่อความปลอดภัยของตัวท่านเอง **

 

วิธีการตรวจสอบช่องต่อของรีเลย์
สามารถดูได้จากสัญลักษณ์ ทำให้เรารู้ว่าขาไหนคือ COM, NC หรือ NO (รีเลย์แต่ละตัวจะมี 3 ขา ส่วนใหญ่จะวาง pattern เหมือนกัน เพราะฉะนั้น หาขาแค่ตัวเดียวก็พอครับ)
หรือจะใช้มัลติมิเตอร์วัด เพื่อความมั่นใจ โดยใช้วิธีการดังนี้

เพื่อความเข้าใจที่ตรงกัน ผมขอให้ขาที่ [1] คือขาด้านบน (ของรีเลย์แต่ละตัว) ขาที่ [2] คือ ขาตรงกลาง และขาที่ [3] คือขาด้านล่าง ตามในรูปครับ

1.ใช้โหมดวัดความต้านทาน ลองดูว่าถ้าความต้านทานเป็น 0 (ปลายของโพรบแตะกัน) จะแสดงผลอย่างไร และถ้าไม่แตะกันจะเป็นอย่างไร ถือว่าเป็นการทดสอบสายในตัว
(ในรูปนี้เป็นเพียงตัวอย่างเท่านั้น การแสดงผลของมิเตอร์แต่ละยี่ห้อ แต่ละรุ่น แตกต่างกัน ควรศึกษาและทำความเข้าใจในมิเตอร์ของท่าน)

 

2.ทดสอบเอาปลายโพรบแตะขาที่ [2] [3] พบว่ามีความต้านทานเป็น 0 นั่นหมายถึงว่า สองช่องนี้ติดต่อกันได้ นั่นคือขา [2] และ [3] ทำงานแบบ NC

 

3.ทำการ Energize Relay ตัวที่เราวัดขึ้นมา เพื่อหาขา COM และ NO จากในรูปด้านบนนี้ เห็นว่าขาที่เราเคยวัด [2] และ [3] กลายเป็น Open ไปแล้ว (นั่นคือ ขาทั้งสองไม่แตะกัน – ในรูปที่มัลติมิเตอร์ จะมีมีตัว M (Mega) ขึ้นมา นั่นคือความต้านทานเป็นล้านโอห์ม ซึ่งไม่สามารถวัดได้)

 

4.Energize Relay ทิ้งเอาไว้แบบนั้น เปลี่ยนขาวัดเป็นขา [1] และ [2] ปรากฎว่าความต้านทานเป็น 0 นั่นคือ สองช่องนี้ ไฟสามารถเดินผ่านไปได้

 

จะเห็นว่าขาที่ใช้ร่วมกันเมื่อรีเลย์ทำงานและไม่ทำงานนั่นคือขาที่ [2] ทำให้ขาที่ [2] คือขา COM นั่นเอง และขา [1] ก็คือขา NO และขา [3] ก็คือ NC ครับ
เมื่อเราได้ขามาแล้ว ก็ขึ้นอยู่กับการนำไปประยุกต์ใช้งาน ซึ่งส่วนใหญ่จะทำการต่อขาแบบ COM กับ NO ครับ

 

โดยจะมีเฉพาะเส้น L (Line) เท่านั้น ที่จะผ่านสวิตซ์รีเลย์ ส่วนสาย N (Neutral) สามารถต่อเข้าโหลดได้เลย ซึ่งโหลดอาจจะเป็นหลอดไฟ พัดลม หรือเครื่องใช้ไฟฟ้าอื่นๆ ในพิกัดกระแสที่รีเลย์รับได้

 

ผิดพลาดประการใด ขออภัยมา ณ ที่นี้ครับ

ป.ล. การสั่งงานแบบผ่าน command line ก็ไม่สะดวกนัก สำหรับตอนหน้า จะเป็นการสั่งงาน relay ผ่านทาง web interface และรีโมทเข้ามาผ่านทาง port 80 ได้ด้วยครับ