วิธีใช้งาน Arduino ควบคุม LED ด้วย IR Remote และ KY-022
วิธีใช้งาน Arduino ควบคุม LED ด้วย IR Remote และ KY-022
บทความนี้จะสอนวิธีใช้ Arduino รับสัญญาณอินฟาเรดจากรีโมท แล้วนำมาควบคุมการเปิด-ปิดหลอด LED 4 ดวง โดยใช้โมดูลรับอินฟาเรด KY-022 ซึ่งเป็นโมดูลที่นิยมใช้กันมากในงาน IoT และระบบควบคุมระยะไกล
อุปกรณ์ที่ต้องเตรียม
- Arduino UNO R3 พร้อมสาย USB
- Infrared Receiver Module KY-022
- รีโมทอินฟาเรด (รีโมททีวีหรือรีโมทอะไรก็ได้ที่มี)
- LED 5mm สีแดง จำนวน 4 ดวง
- ตัวต้านทาน 220 Ohm จำนวน 4 ตัว
- บอร์ดทดลอง MB-102 (830 Point)
- สายจัมเปอร์ ผู้-ผู้, ผู้-เมีย, เมีย-เมีย ยาว 20cm อย่างละ 40 เส้น
วิธีต่อวงจร Arduino กับ KY-022 และ LED
ต่อ KY-022 เข้ากับ Arduino
| Arduino UNO | KY-022 |
|---|---|
| 5V | + (VCC) |
| GND | - (GND) |
| ขา 11 | S (Signal) |
ต่อ LED แต่ละดวงเข้ากับ Arduino
สำหรับ LED แต่ละดวง ให้ต่อแบบนี้ (ดวงละ 1 ตัวต้านทาน):
| Arduino UNO | อุปกรณ์ |
|---|---|
| ขา 2 | ขายาว (Anode) ของ LED ดวงที่ 1 |
| ขา 3 | ขายาว (Anode) ของ LED ดวงที่ 2 |
| ขา 4 | ขายาว (Anode) ของ LED ดวงที่ 3 |
| ขา 5 | ขายาว (Anode) ของ LED ดวงที่ 4 |
| GND | ตัวต้านทาน 220Ω → ขาสั้น (Kathode) ของ LED |
หมายเหตุ: ขายาวของ LED คือขา Anode (+) ส่วนขาสั้นคือ Kathode (-) เวลาต่อต้องระวังเรื่องขั้วถูก
ติดตั้ง Library IRremote
- ดาวน์โหลดไฟล์ IRremote.zip
- แตกไฟล์ด้วย WinRAR หรือ WinZip
- นำโฟลเดอร์ที่ได้ไปวางใน
Documents/Arduino/libraries - เปิด Arduino IDE ใหม่
ข้อแนะนำ: ก่อนใช้งานต้องมีโปรแกรมแตกไฟล์ติดเครื่องก่อน ไม่งั้นแตกไฟล์ไม่ได้
ขั้นตอนแรก: อ่านรหัสปุ่มรีโมท
รีโมทแต่ละตัวมีรหัส Hex ของแต่ละปุ่มไม่เหมือนกัน ดังนั้นต้องอ่านรหัสจากรีโมทที่มีอยู่ก่อน แล้วค่อยนำไปใส่ในโค้ดควบคุม
ให้อัพโหลดโค้ดด้านล่างลงบอร์ดก่อน (นี่คือโค้ดสำหรับอ่านค่ารหัสเท่านั้น ยังไม่ใช่โค้ดควบคุม LED):
#include <IRremote.h>
const int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
Serial.println("กดปุ่มรีโมทเพื่อดูรหัส");
}
void loop(){
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
irrecv.resume();
}
}
วิธีอ่านรหัสปุ่ม
- เปิด Serial Monitor (Tools → Serial Monitor)
- ตั้ง Baud Rate เป็น 9600
- กดปุ่มต่างๆ บนรีโมท แต่ละปุ่มจะแสดงรหัส Hex ออกมา
เคล็ด: รหัสที่เสถียรจะเป็นตัวเลข 8 หลักแบบเดิมทุกครั้ง กดซ้ำๆ จนได้ค่าที่ไม่เปลี่ยนแล้วค่อยเอาไปใช้ ถ้ารหัสเปลี่ยนไปมาให้กดใหม่จนกว่าจะเจอค่าที่คงที่
โค้ดควบคุม LED ด้วยรีโมท
เมื่อได้รหัสปุ่มมาแล้ว ให้นำไปใส่ในโค้ดด้านล่าง โดยแทนที่ค่าที่อยู่ในเครื่องหมาย 0xFFFFFFF ด้วยรหัสที่อ่านได้จากขั้นตอนก่อนหน้า
ตัวอย่าง: ถ้ารีโมทกดปุ่ม 1 ได้รหัส 0xFF6897 ก็นำไปใส่ที่ case 0xFF6897:
#include <IRremote.h>
const int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
// กำหนดขา LED
const int LED1 = 2;
const int LED2 = 3;
const int LED3 = 4;
const int LED4 = 5;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
// ตั้งค่าขา LED เป็น Output
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
// ปิด LED ทั้งหมดเริ่มต้น
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
}
void loop(){
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
switch(results.value){
// ปุ่ม 1 เปิด-ปิด LED 1
case 0xFF6897: // แก้เป็นรหัสปุ่ม 1 ของรีโมท
digitalWrite(LED1, !digitalRead(LED1));
Serial.println(digitalRead(LED1) ? "LED 1 ON" : "LED 1 OFF");
break;
// ปุ่ม 2 เปิด-ปิด LED 2
case 0xFF30CF: // แก้เป็นรหัสปุ่ม 2 ของรีโมท
digitalWrite(LED2, !digitalRead(LED2));
Serial.println(digitalRead(LED2) ? "LED 2 ON" : "LED 2 OFF");
break;
// ปุ่ม 3 เปิด-ปิด LED 3
case 0xFF18E7: // แก้เป็นรหัสปุ่ม 3 ของรีโมท
digitalWrite(LED3, !digitalRead(LED3));
Serial.println(digitalRead(LED3) ? "LED 3 ON" : "LED 3 OFF");
break;
// ปุ่ม 4 เปิด-ปิด LED 4
case 0xFF7A85: // แก้เป็นรหัสปุ่ม 4 ของรีโมท
digitalWrite(LED4, !digitalRead(LED4));
Serial.println(digitalRead(LED4) ? "LED 4 ON" : "LED 4 OFF");
break;
// ปุ่ม 9 เปิด LED ทั้งหมด
case 0xFF9867: // แก้เป็นรหัสปุ่ม 9 ของรีโมท
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
Serial.println("ALL LED ON");
break;
// ปุ่ม 0 ปิด LED ทั้งหมด
case 0xFF4AB5: // แก้เป็นรหัสปุ่ม 0 ของรีโมท
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
Serial.println("ALL LED OFF");
break;
}
irrecv.resume();
}
}
วิธีอัพโหลดโค้ด
- เปิดโค้ดใน Arduino IDE
- เลือก Board: Arduino UNO (Tools → Board)
- เลือก Port ที่เชื่อมต่อ (Tools → Port)
- กดปุ่ม Upload (ไอคอนลูกศรขวา)
- รอจนขึ้น “Done uploading”
ทดสอบการทำงาน
เมื่ออัพโหลดเสร็จแล้ว:
- เปิด Serial Monitor ตั้ง Baud 9600
- กดรีโมทหันเข้าหา KY-022
- กดปุ่ม 1 → LED ดวงที่ 1 ติด/ดับ
- กดปุ่ม 2 → LED ดวงที่ 2 ติด/ดับ
- กดปุ่ม 3 → LED ดวงที่ 3 ติด/ดับ
- กดปุ่ม 4 → LED ดวงที่ 4 ติด/ดับ
- กดปุ่ม 9 → LED ทั้ง 4 ดวงติดพร้อมกัน
- กดปุ่ม 0 → LED ทั้ง 4 ดวงดับพร้อมกัน
สิ่งที่ต้องปรับในโค้ด
- รหัสปุ่มรีโมท - ค่าที่อยู่ใน
case 0x...ต้องเปลี่ยนให้ตรงกับรีโมทที่ใช้จริง - ขาที่ต่อ LED - ถ้าต่อ LED ที่ขาอื่น ให้แก้ค่า LED1, LED2, LED3, LED4
- ขาสัญญาณ KY-022 - ถ้าใช้ขาอื่น ให้แก้ค่า RECV_PIN
สรุป
โมดูล KY-022 รับสัญญาณอินฟาเรดได้ดี ใช้งานง่าย ขอแค่ดาวน์โหลด Library IRremote มาติดตั้ง แล้วกำหนดขาสัญญาณให้ถูกต้อง ก็สามารถรับคำสั่งจากรีโมทมาควบคุมอุปกรณ์ได้ทันที ข้อจำกัดเดียวคือต้องรู้รหัสปุ่มของรีโมทที่ใช้ก่อน เพราะรีโมทแต่ละตัวไม่เหมือนกัน
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก
จ้างทำโปรเจคเลย