กลับหน้าหลัก
views
วิธีใช้งาน Arduino ควบคุม LED ด้วย IR Remote และ KY-022
Last updated on

วิธีใช้งาน Arduino ควบคุม LED ด้วย IR Remote และ KY-022


วิธีใช้งาน Arduino ควบคุม LED ด้วย IR Remote และ KY-022

บทความนี้จะสอนวิธีใช้ Arduino รับสัญญาณอินฟาเรดจากรีโมท แล้วนำมาควบคุมการเปิด-ปิดหลอด LED 4 ดวง โดยใช้โมดูลรับอินฟาเรด KY-022 ซึ่งเป็นโมดูลที่นิยมใช้กันมากในงาน IoT และระบบควบคุมระยะไกล

วงจรเชื่อมต่อ Arduino UNO กับ KY-022 และ LED 4 ดวง พร้อมตัวต้านทาน 220Ω บนบอร์ดทดลอง

อุปกรณ์ที่ต้องเตรียม

  • 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 UNOKY-022
5V+ (VCC)
GND- (GND)
ขา 11S (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 (-) เวลาต่อต้องระวังเรื่องขั้วถูก

รายละเอียดขาของ LED บอกชัดว่าขายาวเป็น Anode ขาสั้นเป็น Kathode

ติดตั้ง Library IRremote

  1. ดาวน์โหลดไฟล์ IRremote.zip
  2. แตกไฟล์ด้วย WinRAR หรือ WinZip
  3. นำโฟลเดอร์ที่ได้ไปวางใน Documents/Arduino/libraries
  4. เปิด 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();
  }
}

วิธีอ่านรหัสปุ่ม

  1. เปิด Serial Monitor (Tools → Serial Monitor)
  2. ตั้ง Baud Rate เป็น 9600
  3. กดปุ่มต่างๆ บนรีโมท แต่ละปุ่มจะแสดงรหัส Hex ออกมา

เคล็ด: รหัสที่เสถียรจะเป็นตัวเลข 8 หลักแบบเดิมทุกครั้ง กดซ้ำๆ จนได้ค่าที่ไม่เปลี่ยนแล้วค่อยเอาไปใช้ ถ้ารหัสเปลี่ยนไปมาให้กดใหม่จนกว่าจะเจอค่าที่คงที่

หน้าต่าง Serial Monitor แสดงรหัส Hex ของปุ่มรีโมทเมื่อกด

โค้ดควบคุม 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();
  }
}

วิธีอัพโหลดโค้ด

  1. เปิดโค้ดใน Arduino IDE
  2. เลือก Board: Arduino UNO (Tools → Board)
  3. เลือก Port ที่เชื่อมต่อ (Tools → Port)
  4. กดปุ่ม Upload (ไอคอนลูกศรขวา)
  5. รอจนขึ้น “Done uploading”

ทดสอบการทำงาน

เมื่ออัพโหลดเสร็จแล้ว:

  1. เปิด Serial Monitor ตั้ง Baud 9600
  2. กดรีโมทหันเข้าหา KY-022
  3. กดปุ่ม 1 → LED ดวงที่ 1 ติด/ดับ
  4. กดปุ่ม 2 → LED ดวงที่ 2 ติด/ดับ
  5. กดปุ่ม 3 → LED ดวงที่ 3 ติด/ดับ
  6. กดปุ่ม 4 → LED ดวงที่ 4 ติด/ดับ
  7. กดปุ่ม 9 → LED ทั้ง 4 ดวงติดพร้อมกัน
  8. กดปุ่ม 0 → LED ทั้ง 4 ดวงดับพร้อมกัน

สิ่งที่ต้องปรับในโค้ด

  1. รหัสปุ่มรีโมท - ค่าที่อยู่ใน case 0x... ต้องเปลี่ยนให้ตรงกับรีโมทที่ใช้จริง
  2. ขาที่ต่อ LED - ถ้าต่อ LED ที่ขาอื่น ให้แก้ค่า LED1, LED2, LED3, LED4
  3. ขาสัญญาณ KY-022 - ถ้าใช้ขาอื่น ให้แก้ค่า RECV_PIN

สรุป

โมดูล KY-022 รับสัญญาณอินฟาเรดได้ดี ใช้งานง่าย ขอแค่ดาวน์โหลด Library IRremote มาติดตั้ง แล้วกำหนดขาสัญญาณให้ถูกต้อง ก็สามารถรับคำสั่งจากรีโมทมาควบคุมอุปกรณ์ได้ทันที ข้อจำกัดเดียวคือต้องรู้รหัสปุ่มของรีโมทที่ใช้ก่อน เพราะรีโมทแต่ละตัวไม่เหมือนกัน

อยากทำโปรเจคแบบนี้?

รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน

หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก

จ้างทำโปรเจคเลย

ความคิดเห็น