Page 1

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.1F/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 ผานการควบคุมจากรีโมตคอนโทรลอินฟราเรด (จบ)


Unicon09-193208  
Read more
Read more
Similar to
Popular now
Just for you