Unicon 193
หนึงในการประยุ ่ กตใชงานระบบควบคุมอัตโนมัติคือ การควบคุมอุปกรณทีมี่ ความตองการกระแสไฟฟา และแรงดันไฟฟาสูง อาทิ หลอดไฟ มอเตอร ขดลวดเคลือนที ่ หรื ่ อโซลินอยด ในขณะทีไมโครคอนโทรลเลอร ่ สามารถขับแรงดันไฟฟาและกระแสไฟฟาทางเอาตพุตไมสูง คือ เพียง +3 หรือ +5V 20mA ดังนันจึ ้ งตองมีการเรียนรู ถึงแนวทางในการนําไมโครคอนโทรลเลอรไปขับอุปกรณทีต่ องการพลังงานไฟฟาสูง อุ ปกรณ ที่ นิ ยมนํามาใช ในการขั บโหลดกระแสไฟฟ าสู งร วมกั บไมโครคอนโทรลเลอร คื อ รีเลย (relay) โดยรีเลยทําหนาที่เปนสวิตชแรงดันและกระแสไฟฟาสูง ใชงานไดทั้งกับโหลดไฟฟากระแสตรง และกระแสสลับ
เป นอุ ปกรณ แม เหล็ กไฟฟ าแบบหนึ่ งที่ ทํ าหน าที่ เป นสวิ ตช ตั ดต อหนึ่ งชุ ดหรื อมากกว า ขึ้ น อยูกับจํานวนหนาสัมผัสที่รีเลยตัวหนึง่ ๆ บรรจุอยู รีเลยมีสัญลักษณตามรูปที่ 9-1 (ก) จะเห็นวารีเลยประกอบ ดวยสวนสําคัญ 2 สวนคือ ขดลวด (coil) และหนาสัมผัส (contact) แบงเปนหนาสัมผัสปกติ (Normally Closed :NC) และปกติเปดวงจรหรือไมตอ (Normally Opened :NC) หนาสัมผัส ขดลวด
NC C NO
(ก) แสดงสัญลักษณของรีเลย NC
+ -
C
NC
+V
+ -
NO
รีเลยยังไมทํางาน
(ข) การทํางานของรีเลย รูปที่ 9-1 แสดงสัญลักษณและการทํางานเบืองต ้ นของรีเลย
C NO
รีเลยเริ่มทํา งาน
+V
194
Unicon
การกระตุนให รี เลย ทํ างานทํ าได ง ายมากเพี ยงจายแรงดันให แกขดลวดในปริมาณที่ขดลวดนั้น ตองการ ก็จะทําใหแมเหล็กไฟฟาเกิดขึ้นทีหน ่ าสัมผัส เกิดการดูดหนาสัมผัสจากจุด NC มายังจุด NO ดังนันเมื ้ อ่ รีเลยทํางานหนาสัมผัส NO จะตอวงจร ในขณะที่ NC จะเปดวงจรแทน ในลักษณะนีทํ้ างานเหมือนเปนสวิตช 2 ทางที่ควบคุมดวยแมเหล็กไฟฟา ดังแสดงการทํางานในรูปที่ 9-1 (ข) คุณสมบัติที่สําคัญของรีเลยไดแก 1. แรงดันตกครอมขดลวดทีทํ่ าใหรีเลยทํางาน (Vcoil หรือ Coil Voltage) 2. คาความตานทานของขดลวด (Coil resistance) ปกติมีคาประมาณ 100 ถึง 600W 3. อัตราทนไดสูงสุดทังแรงดั ้ นและกระแสไฟฟาของหนาสัมผัส (Contact rating) 4. อายุการใชงาน (Operating time) 5. ตําแหนงขาของหนาสัมผัส NO, NC และ C รวมทั้งขาตอใชงานของขดลวด
ในการทํางานปกติ พอรตเอาตพุตของไมโครคอนโทรลเลอรไมสามารถนําไปขับอุปกรณเอาตพุต กระแสไฟฟาสูงไดโดยตรงได เนืองจากข ่ อจํากัดดานความสามารถในการจายกระแสไฟฟา ดังนันถ ้ าตองการ นําไมโครคอนโทรลเลอรไปขับโหลดกระแสไฟฟาสูงจะตองมีอุปกรณทีทํ่ าหนาทีจ่ ายแรงดันและกระแสสูงโดย เฉพาะ เรียกอุปกรณเหลานีว้ า อุปกรณขับ หรือ ไดรเวอร (driver)
9.2.1 การใชทรานซิสเตอรขับ 9.2.1.1 การใชทรานซิสเตอรขับแบบเดียว ่ การขับโดยวิธีนีเหมาะสมสํ ้ าหรับโหลดทีมี่ ความตองการกระแสไฟฟาปานกลาง ตังแต ้ 30 ถึง 200mA อาทิ รีเลยกําลังตําไปจนถึ ่ งปานกลางทีมี่ คาความตานทานของขดลวดภายในรีเลยไมตํากว ่ า 100, หลอดไฟกําลัง ตํา่ และมอเตอรไฟตรงขนาดเล็ก มีวงจรตัวอยางตามรูปที่ 9-2 ในรูปที่ 9-2 เปนการตอทรานซิสเตอรเขากับขาพอรตของไมโครคอนโทรลเลอร โดยมีตัวตานทาน R1 ทําหนาทีจํ่ ากัดกระแสไฟฟาทีไหลเข ่ าขาเบสของทรานซิสเตอร Q1 ซึงจะทํ ่ างานก็ตอเมือขาพอร ่ ตจของไมโคร ่ นโหลดตออยูทาง คอนโทรลเลอรมีสถานะลอจิกเปน “1” เมือ่ Q1 ทํางาน ก็จะเกิดกระแสไฟฟาไหลผาน RL ซึงเป เอาตพุตทีขาคอลเล็ ่ กเตอรของ Q1 กระแสโหลดสูงสุด (ILmax) มีคาเทากับ 12V/300= 40mA ถึงแมวา Q1 เบอร 2N3904 มีคากระแสคอลเล็กเตอรสูงสุดถึง 100mA แตในทางปฏิบัติจริงไมควรออกแบบใหทรานซิสเตอรทํางาน ถึงพิกัดสูงสุด ยานปลอดภัยของทรานซิสเตอรควรอยูไม เกินครึงหนึ ่ งของอั ่ ตราการทนไดสูงสุด ดวยการจัดวงจร ตามรูปที่ 9-2 สามารถใชสัญญาณจากพอรตเอาตพุตกระตุนให ทรานซิสเตอรทํางานเพือขั ่ บรีเลยขนาดเล็กไดอยาง ปลอดภัย
Unicon 195 +12V
+12V RL 300 (min) R1 1k
IC 40mA (max)
PORT
RL 16 (min) R1 1k PORT
Q1 2N3904
IC 750mA (max)
Q1 2N6387
รูปที่ 9-2 วงจรขับโหลดกระแสไฟฟาปานกลาง รูปที่ 9-3 การขับโหลดโดยใชทรานซิสเตอรแบบ โดยใชทรานซิสเตอรตัวเดียว ดารลิงตัน 9.2.1.2 การใชทรานซิสเตอรแบบดารลิงตันขับโหลดกระแสสูง จากการใช ทรานซิสเตอรตอกันแบบคาสเคดเพื่อเพิ่มความสามารถในการขับกระแสไฟฟาใหสูง ขึน้ นํามาสูการใชทรานซิสเตอรอีกแบบหนึงที ่ ่บรรจุทรานซิสเตอร 2 ตัวตอกันแบบดารลิงตันภายใตตัวถังเดียว กัน ทําใหขับกระแสไฟฟาทางเอาตพุตไดสูงและมีความเร็วในการทํางานสูงดวย โดยใชอุปกรณเพียงตัวเดียว สงผลใหขนาดของวงจรเล็กลง ดังแสดงวงจรตามรูปที่ 9-3 จากวงจร Q1 ซึงเป ่ นทรานซิสเตอรแบบดารลิงตันสามารถขับกระแสไฟฟาทางเอาตพุตไดสูงถึง 750mA ดวยการตอเขากับพอรตเอาตพุต โดยผานตัวตานทานจํากัดกระแสเพียงตัวเดียวและไมตองตอทรานซิสเตอร แบบคาสเคด ทําใหมีความเร็วในการทํางานสูง ตลอดจนสามารถขับกระแสไฟฟาทางเอาตพุตไดสูงพอสมควร VL(max)
+5V 9 D6 D5 D4 D3 D2 D1 D0
+30V ULN2003
7
10
6
11
5
12
4
13
3
14
2
15
1
16
8
IL(max) Q6
500mA
Q5 Q4 Q3 Q2 Q1 Q1
รูปที่ 9-4 การใชไอซีไดรเวอรเบอร ULN2003 ขับโหลดกระแสสูง
196
Unicon
9.2.2 การใชไอซีขับ ไอซีที่ ใช ในการขับโหลดกระแสสูงมั กจะมี วงจรทางเอาตพุตเป นแบบคอลเล็กเตอรเป ด ทําให ใชกับแรงดันไฟฟาที่สูงได สําหรับไอซีขับหรือไอซีไดรเวอรที่ยกมาอธิบายคือเบอร ULN2003 เปนไอซีที่ภาย ในบรรจุอินเวอรเตอรเกต 7 ตัว มีรูปแบบการจัดขาและวงจรภายในแสดงในรูปที่ 9-4 ใชกับแรงดันไดสูงสุด +30V กระแสเอาตพุตสูงสุดในแตละขาเทากับ 500mA ทั้งนีขึ้ นอยู ้ กั บความสามารถในการจายกระแสไฟฟา ของแหลงจายไฟดวย นอกจากนัน้ ยังมีการตอไดโอดปองกันแรงดันยอนกลับจากอุปกรณเอาตพุตทีมี่ โครงสรางเปนขดลวด ไวที่ทุกขาเอาตพุต ทําใหใชขับโหลดที่เปนขดลวด อาทิ รีเลย หรือมอเตอรไฟตรงขนาดเล็กถึงขนาดกลางได
RELAY4i เปนแผงวงจรขับรีเลย 4 ชอง ราคาประหยัด มีคุณสมบัติทางเทคนิคโดยสรุปแสดงในรูปที่ 9-5 สวนในรูปที่ 9-6 แสดงวงจรสมบูรณและหนาตาของบอรด RELAY4i การใชงานบอรดขับรีเลย RELAY4i สรุปเปนขั้นตอนไดดังนี้ (ใชรูปที่ 9-7 อางอิง) l. ตอโหลดที่ตองการควบคุมเขาที่จุดตอหนาสัมผัสของรีเลย ซึงมี ่ 4 ชอง แตละชองเลือกใหทํางาน แบบตอหรือตัดวงจรก็ได ปกติแลวจะเลือกใชงานแบบตอวงจรมากกวา นันคื ่ อ เมื่อรีเลยทํางานจะเปนการตอ วงจรเพือจ ่ ายไฟเลียงไปยั ้ งโหลดหรืออุปกรณไฟฟาเพือให ่ ทํางานตอไป จากรูปที่ 9-7 จะเห็นวา ผูใชงานสามารถ ตอหนาสัมผัสรีเลยเขากับเครื่องใชไฟฟาไดสูงสุด 220Vac 600W (วัตต) โดยตอผานเตาเสียบ ในขณะทีอี่ ก ชองหนึ่งนันจะต ้ อกับหลอดไฟ 12V ในแตละชองของหนาสัมผัสรีเลยตอกับโหลดไดทังแบบไฟฟ ้ ากระแสตรง หรือกระแสสลับ รวมถึงการตอวงจรเพื่อทําหนาที่เปนเหมือนสวิตชธรรมดาก็สามารถทําได ใชไอซีขับโหลดกระแสสูงเบอร ULN2003 บนบอรดจัด
วงจรเพื่อขับรีเลย 12V 4 ชอง ใชไฟเลี้ยง +12V แยกตางหาก รับสัญญาณลอจิก “1” จากไมโครคอนโทรลเลอรหรือ วงจรภายนอกในการกระตุนใหรีเลยทํางาน มีไฟแสดงการทํางานของรีเลย จุดตอหนาสัมผัสรีเลยเปนแบบขันสกรู ทําใหสามารถ ตอใชงานไดอยางสะดวก อัตราทนไดของหนาสัมผัสรีเลย 220Vac 5A รองรับ โหลดไดไมเกิน 600 วัตต
รูปที่ 9-5 คุณสมบัติทางเทคนิคของ RELAY4i บอรดขับรีเลย 4 ชอง
Unicon 197
+V
10 C1 0.1F/63V
IC1 ULN2003
LED4 RY4
1
IN4
OUT4
C NC
16 +12V
RY4 Relay 12V
LED3 RY3
NO C
R3 1.8k K3 RELAY-3
2
IN3
OUT3
NC
15 +12V
RY3 Relay 12V
LED2 RY2
NO C
R2 1.8k K2 RELAY-2
3
IN2
OUT3
NC
14 +12V
RY2 Relay 12V
LED1 RY1
NO C
R1 1.8k K1 RELAY-1
4
IN1
OUT4
GND
NO
R4 1.8k K4 RELAY-4
+12V
NC
13 RY1 Relay 12V
GND 8
รูปที่ 9-6 วงจรสมบูรณของ RELAY4i บอรดขับรีเลย 4 ชอง
198
Unicon
จุดตอ RELAY-1 ถึง RELAY-4 ตอเขากับขาพอรตเอาตพุตดิจิตอลของไมโครคอนโทรลเลอร ทํางานดวยลอจิก "1"
ไฟแสดงการทํางาน ของรีเลย
RELAY-4
RELAY-3
RELAY-2
RELAY-1
RELAY12V
RELAY12V
RELAY12V
RELAY12V
RELAY4i 4-Ch. Relay Driver
- 12V +
NO
C
NC
NO
C
NC
จุดตอไฟเลี้ยงรีเลย จุดตอโหลดหรืออุปกรณไฟฟา +12Vdc พิกัดสูงสุด 220Vac 5A
NO
C
NC
NO
C
NC
+ +12Vdc -
ตัวอยางการตอสายเพื่อควบคุมหลอดไฟ 12V เตาเสียบ สายปลั๊ก 220Vac
ตัวอยางการตอสายเพือ่ ควบคุมเครื่องใชไฟฟา 220Vac
รูปที่ 9-7 แสดงสวนประกอบของ RELAY4i บอรดขับรีเลย 4 ชองและการตอใชงาน 2. หนาสัมผัส NO หมายถึง ปกติเปดวงจร (Normally Open) เมื่อรีเลยทํางานจะตอวงจรเขากับ ขา C ดังนันหากต ้ องการใชงานในแบบตอวงจร ตองเลือกตอใชงานหนาสัมผัส NO และ C 3. หนาสัมผัส NC หมายถึง ปกติปดวงจร (Normally Close) เมื่อรีเลยทํางานจะเปดวงจรออกจาก กับขา C หากตองการใชงานแบบตัดวงจร ตองเลือกตอใชงานหนาสัมผัส NC และ C 4. จุดตอหนาสัมผัสรีเลยเปนแบบขันสกรู ทําใหสามารถตอใชงานไดอยางสะดวก 5. อัตราทนไดของหนาสัมผัสรีเลย 220Vac 5A สามารถรองรับโหลดไดไมเกิน 600 วัตต 6. ตอไฟเลียง ้ +12V สําหรับเลี้ยงวงจรแยกตางหากจากไฟเลี้ยงของแผงวงจรควบคุม 7. เมื่อตองการใหวงจรขับรีเลยชุดใดทํางาน ใหปอนสัญญาณลอจิก “1” จากไมโครคอนโทรลเลอร เขาที่จุดตออินพุต RELAY-1 ถึง RELAY-4 โดยตอใชงานพรอมกันทัง้ 4 ชอง หรือควบคุมแยกชองก็ได 8. เมือวงจรขั ่ บไดรับสัญญาณลอจิก “1” ไอซีขับบนบอรด RELAY4i ทํางาน จะไดยินเสียงหนาสัมผัส รีเลยตัดตอ พรอมกับไฟแสดงการทํางานของรีเลยติดสวาง หากตองการหยุดการทํางาน ใหสงสัญญาณลอจิก “0” เขามาทีอิ่ นพุตของวงจร
Unicon 199
ลําดับตอไปเปนการนําเสนอตัวอยางการทดลองเพื่อนําบอรด Unicon มาใชงานกับบอรด RELAY4i เพื่อขับโหลดกระแสสูง โดยแบงออกเปน 3 แบบคือ 1. สวิตชไฟฟาแบบโปรแกรมไดอยางงาย เปนการทดลองขับรีเลยอยางงาย โดยผูใชงานสามารถ ปรับเปลียนค ่ าเวลาในการทํางานและหยุดทํางานได 2. ควบคุมการขับรีเลยผานคอมพิวเตอร 3. ควบคุมการขับรีเลยระยะไกลไรสายดวยรีโมตคอนโทรลอินฟราเรด
9.4.1 สวิตชไฟฟาแบบโปรแกรมไดอยางงาย ในการทดลองนี้เปนการสรางระบบควบคุมเปด/ปดอุปกรณไฟฟาตามเวลาอยางงาย เปนการแสดงให เห็นถึงการนําระบบไมโครคอนโทรลเลอรซึงใช ่ ไฟเลียง ้ +5V ในการทํางานไปควบคุมการเปดปดของอุปกรณ ไฟฟาระบบ +12V ซึงสามารถนํ ่ าแนวทางของการทดลองนีไปประยุ ้ กตใชควบคุมอุปกรณไฟฟา 220Vac ได โดยสังเกตผลการทํางานจาก LED แสดงสถานะการทํางานของบอรด RELAY4i รวมถึงเสียงการตัดตอหนา สัมผัสของรีเลยในขณะทํางาน (1) ตอวงจรตามรูปที่ 9-8 ไฟเลียงบอร ้ ด REALY4i คือ +12V (ควรวัดแรงดันจากแหลงจายไฟกอนตอ เขากับบอรดเพือใช ่ งานจริง) (2) เปดโปรแกรม Arduino IDE เขียนโปรแกรมที่ 9-1 จากนั้นคอมไพลและอัปโหลดสูบอร ด Unicon (3) รันโปรแกรม เมือเริ ่ มทํ ่ างาน รีเลยทุกตัวถูกควบคุมใหหยุดทํางาน จากนันรี ้ เลยชอง 1 จะเปนตัวแรกทีทํ่ างานนาน 0.5 วินาที แลวหยุดทํางาน รีเลยชอง 2 จะทํางานตอในลําดับถัดไป เรียงไปตามลําดับจนครบทั้ง 4 ชอง จากนั้น รีเลยทุกชองถูกขับใหทํางานนาน 0.5 วินาที แลวหยุดลงนาน 0.5 วินาที กอนจะเริ่มทํางานในรอบใหม
200
Unicon
1
21
20
19
RELAY-4
RELAY-3
RELAY-2
RELAY-1
RELAY12V
RELAY12V
RELAY12V
RELAY12V
NO C NC
NO C NC
NO C NC
NO C NC
RELAY4i 4-Ch. Relay Driver
-
12V +
รูปที่ 9-8 การเชือมต ่ อวงจรเพือทดลองใช ่ งานบอรด Unicon กับ REALY4i บอรดขับรีเลย 4 ชอง
Unicon 201
int int int int
RELAY1_PIN RELAY2_PIN RELAY3_PIN RELAY4_PIN
= = = =
18; 19; 20; 21;
// // // //
Output Output Output Output
for for for for
driving driving driving driving
relay relay relay relay
pin pin pin pin
1 2 3 4
// Set off state for all relays boolean RELAY_STATE = false; char RelayOut[4] = {RELAY1_PIN,RELAY2_PIN,RELAY3_PIN,RELAY4_PIN}; char i; void setup() { pinMode(RELAY1_PIN, OUTPUT); pinMode(RELAY2_PIN, OUTPUT); pinMode(RELAY3_PIN, OUTPUT); pinMode(RELAY4_PIN, OUTPUT); digitalWrite(RELAY1_PIN, LOW); digitalWrite(RELAY2_PIN, LOW); digitalWrite(RELAY3_PIN, LOW); digitalWrite(RELAY4_PIN, LOW); }
// Set output pin
void loop() { for (i=0;i<4;i++) { digitalWrite(RelayOut[i],HIGH); delay(500); digitalWrite(RelayOut[i],LOW); delay(500); } // Turn-on all relays digitalWrite(RELAY1_PIN,HIGH); digitalWrite(RELAY2_PIN,HIGH); digitalWrite(RELAY3_PIN,HIGH); digitalWrite(RELAY4_PIN,HIGH); delay(500); // Turn-off all relays digitalWrite(RELAY1_PIN,LOW); digitalWrite(RELAY2_PIN,LOW); digitalWrite(RELAY3_PIN,LOW); digitalWrite(RELAY4_PIN,LOW); delay(500); }
// Set default state of relay
// Loop counter // // // //
Turn-on relay Delay 0.5 second Turn-off relay Delay 0.5 second
// Delay 0.5 second
คําอธิบายโปรแกรม ในโปรแกรมใชตัวแปร RelayOut ซึ่งกําหนดเปนตัวแปรแบบอะเรยที่มีสมาชิก 4 ตัว แตละตัวคือ ขาพอร ตที่ใชสงสัญญาณไปยังวงจรขับรีเลย แลวใชการวนลูปเพื่อทําการเขียนคาไปยังขาพอรตเพื่อเปด ปดวงจรขับรีเลย ดวยวิธีนีทํ้ าใหโปรแกรมควบคุมกระชับขึ้น รีเลยแตละตัวจะทํางานและหยุดทํางาน 0.5 วินาทีเรียงลําดับจากการชี้ดวยตัวแปร i จากนันจะทํ ้ าการขับรีเลยทังหมดให ้ ทํางาน 0.5 วินาที และหยุด ทํางานทั้งหมดเปนเวลา 0.5 วินาที จากนันวนกลั ้ บไปเริ่มตนทํางานใหม
โปรแกรมที่ 9-1 ไฟล Relay_Simple.ino โปรแกรมภาษา C/C++ ของ Arduinio สําหรับบอรด Unicon ในการขับรีเลย 4 ตัวผานทางบอรด RELAY4i ตามเงือนไขที ่ กํ่ าหนดในโปรแกรม
202
Unicon
9.4.2 ควบคุมการขับรีเลยผานคอมพิวเตอร ในการทดลองนี้เปนการสรางระบบควบคุมเปด/ปดอุปกรณไฟฟาดวยการควบคุมจากคอมพิวเตอร เปนการแสดงใหเห็นถึงการสือสารข ่ อมูลอนุกรมระหวางคอมพิวเตอรกับระบบไมโครคอนโทรลเลอรเพื่อทํา การควบคุมการเปดปดของอุปกรณไฟฟาผานรีเลย (1) ใชวงจรในรูปที่ 9-8 ทําการทดลอง (2) เปดโปรแกรม Arduino IDE เขียนโปรแกรมที่ 9-2 จากนั้นคอมไพลและอัปโหลดสูบอร ด Unicon (3) เมื่ออัปโหลดโปรแกรมเสร็จ ทําการเปดหนาตาง Serial monitor เลือกอัตราบอดเปน 9600
คลิกที่นี่เพื่อเปดหนาตาง Serial monitor
/* Example sketch to control the RELAY4 4-Channel Relay Driver. * Connect Relay4i inputs to unicon pins 18, 19, 20 and 21 * Open the Serial monitor at 9600 baud * and value to ON/OFF each relay * Credit : http://www.freetronics.com */ int RELAY1_PIN = 18; // Output for driving relay pin 1 int RELAY2_PIN = 19; // Output for driving relay pin 2 int RELAY3_PIN = 20; // Output for driving relay pin 3 int RELAY4_PIN = 21; // Output for driving relay pin 4 byte command = 0; void setup() { Serial.begin(9600); // Set baudrate 9600 bps delay(5000); // Initial delay Serial.println("Arduino with RELAY4i"); // Shows title message Serial.println("Ready. Type 0 to OFF all relays, 1 - 4 to ON each relay."); pinMode(RELAY1_PIN,OUTPUT); // Set output pin pinMode(RELAY2_PIN,OUTPUT); pinMode(RELAY3_PIN,OUTPUT); pinMode(RELAY4_PIN,OUTPUT); resetAllChannels(); // OFF all relay driver delay(1000); // Delay 1 second }
โปรแกรมที่ 9-2 ไฟล Relay_SerialControl.ino โปรแกรมภาษา C/C++ ของ Arduinio สําหรับบอรด Unicon ในการขับรีเลย 4 ตัวผานทางบอรด RELAY4i ดวยการควบคุมจากคอมพิวเตอร (มีตอ)
Unicon 203
void loop() { if (Serial.available()) // Check serial data available { command = Serial.read(); // Read serial data if( command == '0' ) // Check command 0 { resetAllChannels(); // Turn-off all relay outputs Serial.println("Turn-off all relays"); // Show operation messasge } if( command == '1' ) // Check command 1 { digitalWrite(RELAY1_PIN, HIGH); // Turn-on relay 1 Serial.println("Turn-on relay 1"); // Show operation messasge } if( command == '2' ) // Check command 2 { digitalWrite(RELAY2_PIN, HIGH); // Turn-on relay 2 Serial.println("Turn-on relay 2"); // Show operation messasge } if( command == '3' ) // Check command 3 { digitalWrite(RELAY3_PIN, HIGH); // Turn-on relay 3 Serial.println("Turn-on relay 3"); // Show operation messasge } if( command == '4' ) // Check command 4 { digitalWrite(RELAY4_PIN, HIGH); // Turn-on relay4 Serial.println("Turn-on relay 4"); // Show operation messasge } } } void resetAllChannels() { digitalWrite(RELAY1_PIN, digitalWrite(RELAY2_PIN, digitalWrite(RELAY3_PIN, digitalWrite(RELAY4_PIN, }
// Relay-OFF function LOW); LOW); LOW); LOW);
คําอธิบายโปรแกรม ที่ตอนตนของโปรแกรมมีการหนวงเวลานาน 5 วินาทีโดยใชคําสั่ง delay(5000); หลังจากทํา การกําหนดบอดเรตของการสื่อสารขอมูล ทังนี ้ เพื ้ อให ่ มองเห็นขอความเริมต ่ นการทํางานบนหนาตาง Serial monitor ทั้งนี้เนื่องจากตองรอใหระบบพรอมทํางานหลังการรีเซตเนืองจากการอั ่ ปโหลดโปรแกรม Unicon จะเริมต ่ นรับขอมูลเมื่อฟงกชัน่ Serial.available() ตรวจพบการเขามาของขอมูล อนุกรม จากนันจะอ ้ านคาออกมาดวยฟงกชัน่ Serial.read() หากขอมูลทีเข ่ ามาเปนตัวเลข 0 ถึง 4 ก็จะตีความ แลวเขียนคาออกไปยังพอรตเอาตพุตที่กําหนด
โปรแกรมที่ 9-2 ไฟล Relay_SerialControl.ino โปรแกรมภาษา C/C++ ของ Arduinio สําหรับบอรด Unicon ในการขับรีเลย 4 ตัวผานทางบอรด RELAY4i ดวยการควบคุมจากคอมพิวเตอร (จบ)
204
Unicon
(4) รันโปรแกรม เมื่อเริ่มทํางาน ที่หนาตาง Serial monitor จะแสดงขอความ Arduino with RELAY4i Ready. Type 0 to OFF all relays, 1-4 to ON each relay.
(5) พิมพเลข 1 ลงในชองสงขอความที่ดานบนของหนาตาง Serial monitor แลวคลิกปุม Send เพื่อสง คาไปยังบอรด Unicon ที่หนาตาง Serial monitor แสดงขอความ Turn-on realy 1 ในบรรทัดตอมา พรอมกันนั้นรีเลยที่ ชอง 1 ของบอรด RELAY4i จะทํางาน (6) สงเลข 2, 3 และ 4 ตามลําดับ แลวสังเกตการทํางาน ที่หนาตาง Serial monitor จะแสดงขอความเพื่อแจงการทํางานของรีเลยแตละตัว พรอมๆ กับรีเลย แตละชองที่ตรงกันก็จะทํางาน (7) สงเลข 0 ที่หนาตาง Serial monitor แสดงขอความ Turn-off all relays ในบรรทัดตอมา พรอมกันนั้นรีเลย ทั้งหมดของบอรด RELAY4i จะหยุดทํางาน
Unicon 205
9.4.3 ควบคุมการขับรีเลยระยะไกลไรสายดวยรีโมตคอนโทรลอินฟราเรด ในการทดลองนีเป ้ นการนําเสนอตัวอยางการสรางระบบควบคุมเปด/ปดอุปกรณไฟฟาระยะไกลดวย รีโมตคอนโทรลอินฟราเรด เปนการนําความรูจากบทที่วาดวยการอานคาจากรีโมตคอนโทรลอินฟราเรดของ บอรด Unicon มาทําการควบคุมอุปกรณจริงผานบอรดขับรีเลย (1) ใชวงจรในรูปที่ 9-9 ทําการทดลอง (2) เปดโปรแกรม Arduino IDE เขียนโปรแกรมที่ 9-3 จากนั้นคอมไพลและอัปโหลดสูบอร ด Unicon (3) ใชรีโมตคอนโทรลอินฟราเรดที่ใชรหัสของโซนีในการทดสอบ ่ โดยกดปุม 1 ถึง 4 วงจรขับรีเลยแตละชองจะทํางานและหยุดทํางานตามจังหวะการกดสั่งงานจากรีโมตคอนโทรล โดยเมื่อเริ่มทํางาน รีลเยทั้งหมดจะหยุดทํางาน เมื่อกดปุม 1 รีเลยในชองที่ 1 จะทํางาน และทํางานอยางตอเนือง ่ จนกวาจะกดปุม 1 ซึงอี ่ กครั้ง นันคื ่ อ จะใชปุมเดียวในการสั่งการใหรีเลยทํางานและหยุดทํางาน
D
ZX-IRM 38kHz IR module + S
1
+
S
21
20
19
1
2
4
3
5
7
6
8
9
0 VOLU
+ -
ME PRO G
+
-
RELAY-4
MEN U
-
RELAY-3
RELAY-2
RELAY-1
RELAY12V
RELAY12V
RELAY12V
RELAY12V
NO C NC
NO C NC
NO C NC
NO C NC
RELAY4i 4-Ch. Relay Driver
12V +
รูปที่ 9-9 การเชื่อมตอวงจรเพื่อทดลองใชงานบอรด Unicon กับ REALY4i บอรดขับรีเลย 4 ชอง โดยใชการควบคุมระยะไกลไรสายดวยรีโมตคอนโทรลอินฟราเรด
206
Unicon
#include <IRremote.h>
// Include IR remote control library
int RECV_PIN = 6; IRrecv irrecv(RECV_PIN); decode_results results;
// Connect ZX-IRM at pin 6
int int int int
18; 19; 20; 21;
// // // //
// Set off state for boolean RELAY1_STATE boolean RELAY2_STATE boolean RELAY3_STATE boolean RELAY4_STATE
all relays = false; = false; = false; = false;
RELAY1_PIN RELAY2_PIN RELAY3_PIN RELAY4_PIN
= = = =
Output Output Output Output
for for for for
driving driving driving driving
relay relay relay relay
pin pin pin pin
1 2 3 4
void setup() { irrecv.enableIRIn(); // Enable the IR module operation pinMode(RELAY1_PIN, OUTPUT); // Set output pin pinMode(RELAY2_PIN, OUTPUT); pinMode(RELAY3_PIN, OUTPUT); pinMode(RELAY4_PIN, OUTPUT); digitalWrite(RELAY1_PIN, RELAY1_STATE); // Set default state of relay digitalWrite(RELAY2_PIN, RELAY2_STATE); digitalWrite(RELAY3_PIN, RELAY3_STATE); digitalWrite(RELAY4_PIN, RELAY4_STATE); } void loop() { if (irrecv.decode(&results)) // Check the remote control data available { if (results.decode_type == SONY) // Check the remote brand - Sony { if(results.value == 16) // Get the button 1 ? { RELAY1_STATE = !RELAY1_STATE; // Toggle state of relay 1 digitalWrite(RELAY1_PIN, RELAY1_STATE); // Send to control the relay driver channel 1 delay(300); // Delay 0.3 second } else if(results.value == 2064) // Get the button 2? { RELAY2_STATE = !RELAY2_STATE; // Toggle state of relay 2 digitalWrite(RELAY2_PIN, RELAY2_STATE); // Send to control the relay driver channel 2 delay(300); // Delay 0.3 second } else if(results.value == 1040) // Get the button 3? { RELAY3_STATE = !RELAY3_STATE; // Toggle state of relay 2 digitalWrite(RELAY3_PIN, RELAY3_STATE); // Send to control the relay driver channel 2
โปรแกรมที่ 9-3 ไฟล Relay_Remote.ino โปรแกรมภาษา C/C++ ของ Arduinio สําหรับบอรด Unicon ในการขับรีเลย 4 ตัวผานทางบอรด RELAY4i ผานการควบคุมจากรีโมตคอนโทรลอินฟราเรด (มีตอ)
Unicon 207 delay(300); // Delay 0.3 second } else if(results.value == 3088) // Get the button 4? { RELAY4_STATE = !RELAY4_STATE; // Toggle state of relay 2 digitalWrite(RELAY4_PIN, RELAY4_STATE); // Send to control the relay driver channel 2 delay(300); // Delay 0.3 second } } irrecv.resume(); } }
คําอธิบายโปรแกรม โปรแกรมนี้จะมีการผนวกไฟลไลบรารี IRremote.h เพื่อใชในการรับและถอดรหัสสัญาณของรีโมต คอนโทรลอินฟราเรดทีใช ่ รหัสของโซนี่ โดยมีการตรวจสอบรูปแบบของขอมูลวาตรงกับโปรโตคอลของโซนี่ หรือไมดวยคําสั่ง if (results.decode_type == SONY) หากตรงกัน ก็จะตรวจสอบตอไปวา สัญญาณที่รับ ไดตรงกับปุม 1 (คาของขอมูลเทากับ 16), 2 (คาของขอมูลเทากับ 2064), 3 (คาของขอมูลเทากับ 1040) หรือ 4 (คาของขอมูลเทากับ 3088) หรือไม หากตรงกัน ก็จะทําการกลับสถานะของตัวแปร RELAYx_STATE (x คือเลขทีมี่ คา 1 ถึง 4) เพื่อนําไปกําหนดสถานะของขาพอรตที่เชื่อมตอกับวงจรขับรีเลย ในโปรแกรมมีการหนวงเวลา 0.3 วินาทีในแตละสวนของการตรวจสอบเงือนไข ่ ทังนี ้ เพื ้ อลดผลกระทบ ่ จากการกดปุมของรี โมตคอนโทรลทีไม ่ แนนอน
โปรแกรมที่ 9-3 ไฟล Relay_Remote.ino โปรแกรมภาษา C/C++ ของ Arduinio สําหรับบอรด Unicon ในการขับรีเลย 4 ตัวผานทางบอรด RELAY4i ผานการควบคุมจากรีโมตคอนโทรลอินฟราเรด (จบ)