ค้นหาโค้ด

บทเรียน 21/31: การใช้รีโมทคอนโทรลอินฟราเรดกับ Arduino | SunFounder Robojax

บทเรียนนี้เป็นส่วนหนึ่งของ: หลักสูตร Arduino ที่ใช้ชุดการเรียนรู้ 3-in-1 ของ SunFounder

บทเรียน 21/31: การใช้รีโมทคอนโทรลอินฟราเรดกับ Arduino | SunFounder Robojax

บทนำ

ในบทเรียนนี้ เราจะสำรวจโลกอันน่าทึ่งของการสื่อสารด้วยอินฟราเรด (IR) โดยการสร้างโปรเจกต์ที่ถอดรหัสสัญญาณจากรีโมทคอนโทรลมาตรฐานโดยใช้ Arduino โปรเจกต์นี้ช่วยให้คุณตรวจจับได้ว่าปุ่มใดบนรีโมท IR ถูกกด และสั่งให้เกิดการทำงานตามที่ต้องการ เช่น การเปิดออด การเชื่อมต่อกับรีโมท IR เปิดโอกาสให้เกิดการประยุกต์ใช้ได้หลากหลาย ตั้งแต่ระบบอัตโนมัติภายในบ้านไปจนถึงระบบควบคุมที่ออกแบบเอง

infrare_remote
IR_receiver_pins

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

  • รีโมทสากลทดแทน: สร้างรีโมทที่กำหนดเองสำหรับทีวี ระบบเสียง หรืออุปกรณ์อื่นๆ ที่ควบคุมด้วย IR
  • ระบบอัตโนมัติภายในบ้าน: ควบคุมไฟ พัดลม หรือเครื่องใช้ไฟฟ้าอื่นๆ โดยการกดปุ่มบนรีโมทมาตรฐาน
  • โปรเจกต์แบบโต้ตอบ: สร้างระบบรักษาความปลอดภัยที่ส่งสัญญาณเตือนเมื่อมีการกดปุ่มเฉพาะ
  • การควบคุมหุ่นยนต์: ใช้รีโมท IR เพื่อควบคุมการเคลื่อนที่และการทำงานของหุ่นยนต์แบบไร้สาย
  • อุปกรณ์ช่วยเหลือผู้พิการ: พัฒนารีโมทปุ่มใหญ่ที่ใช้งานง่ายสำหรับผู้ที่มีข้อจำกัดด้านการเคลื่อนไหว

ฮาร์ดแวร์และอุปกรณ์

โปรเจกต์นี้สร้างขึ้นจากอุปกรณ์ง่ายๆ ไม่กี่ชิ้น ซึ่งทั้งหมดมักมีอยู่ในชุดเริ่มต้น เช่น ชุด SunFounder 3-in-1 คุณจะต้องมี:

  • บอร์ด Arduino (เช่น Uno)
  • โมดูลรับสัญญาณ IR (เช่น TSOP38238 หรือรุ่นใกล้เคียง)
  • รีโมทคอนโทรล IR มาตรฐาน (พร้อมแบตเตอรี่ CR2025)
  • ออดแบบพาสซีฟ
  • สายจัมเปอร์และเบรดบอร์ด

คู่มือการเดินสายไฟ

ir_remote_control_wiring

นี่คือแผนผังการเดินสายไฟอย่างง่ายสำหรับโปรเจกต์นี้ ตัวรับสัญญาณ IR เป็นส่วนประกอบสำคัญ เมื่อคุณมองที่พื้นผิวโค้งของตัวรับสัญญาณ การจัดเรียงขาจะเป็นดังนี้:

  • ขาขวา: เชื่อมต่อกับขา 5V บน Arduino
  • ขากลาง: เชื่อมต่อกับขา GND บน Arduino
  • ขาซ้าย (สัญญาณ): เชื่อมต่อกับขาดิจิทัล 11 บน Arduino

นอกจากนี้ สำหรับส่วนการทำงานของโปรเจกต์ ให้เชื่อมต่อขาบวก (ยาวกว่า) ของออดเข้ากับขาดิจิทัล 2 และขาอีกข้างเข้ากับ GND

คำอธิบายโค้ด

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

ขั้นแรก เรากำหนดขาที่เชื่อมต่อกับสายสัญญาณของตัวรับสัญญาณ IR ซึ่งเป็นการกำหนดค่าที่สำคัญที่คุณต้องตรงกับการเดินสายไฟจริงของคุณ

const int IR_RECEIVE_PIN = 11;  // กำหนดหมายเลขขาสำหรับเซนเซอร์ IR

ในฟังก์ชัน setup() ตัวรับสัญญาณ IR จะถูกเริ่มต้นโดยใช้ขาที่เรากำหนดไว้ ซึ่งจะบอกให้ไลบรารีเริ่มฟังสัญญาณบนขานั้น

IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // เริ่มการทำงานของตัวรับสัญญาณ IR

แกนหลักของตรรกะการทำงานอยู่ใน loop() โค้ดจะตรวจสอบว่ามีการกดปุ่มหรือไม่และถอดรหัส ฟังก์ชัน decodeKeyValue() เป็นฟังก์ชันที่กำหนดเองซึ่งแปลงรหัสเลขฐานสิบหกดิบจากรีโมทเป็นสตริงที่อ่านเข้าใจได้ เช่น "POWER" หรือ "MUTE" นี่คือส่วนที่คุณจะต้องแก้ไขเพื่อให้ตรงกับรีโมทเฉพาะของคุณ โค้ดตัวอย่างกำหนด buzzerPin และเปิดใช้งานเฉพาะเมื่อกดปุ่ม "POWER"

const int buzzerPin = 2; // กำหนดขาสำหรับออด
// ... ภายใน loop()
if (decodedValue == "POWER") {
    digitalWrite(buzzerPin, HIGH); // เปิดออด
} else {
    digitalWrite(buzzerPin, LOW); // ปิดออด
}

วิธีใช้งาน: ฟังก์ชัน decodeKeyValue() เป็นกุญแจสำคัญในการปรับแต่งโปรเจกต์นี้ หากต้องการใช้กับรีโมทของคุณเอง คุณต้องรันโค้ดโดยเปิด Serial Monitor ก่อน กดแต่ละปุ่มบนรีโมทของคุณและจดค่าเลขฐานสิบหกที่แสดงสำหรับแต่ละปุ่ม จากนั้นอัปเดตคำสั่ง switch ในฟังก์ชัน decodeKeyValue() เพื่อแมปค่าเหล่านั้นกับชื่อที่มีความหมาย จากนั้นคุณสามารถใช้ชื่อเหล่านี้ในคำสั่ง if ของคุณเพื่อสั่งให้เกิดการทำงานที่แตกต่างกัน เช่นเดียวกับตัวอย่างที่ทำกับปุ่ม "POWER"

โปรเจกต์สดและการสาธิต

เมื่ออัปโหลดโค้ดแล้ว ให้เปิด Serial Monitor ที่อัตราบอด 9600 ชี้รีโมทของคุณไปที่ตัวรับสัญญาณ IR แล้วกดปุ่ม Serial Monitor จะแสดงชื่อปุ่มที่เกี่ยวข้อง (เช่น "POWER", "MUTE") หากต้องการเห็นการทำงานจริง ให้กดปุ่ม "POWER" คุณจะได้ยินเสียงออดดังขึ้น การกดปุ่มอื่นๆ เช่น "MUTE" จะทำให้ออดปิด ซึ่งแสดงให้เห็นแนวคิดที่เรียบง่ายแต่ทรงพลัง: การใช้รีโมทคอนโทรลเพื่อสั่งการเอาต์พุตดิจิทัลบน Arduino ของคุณ

บทต่างๆ

  • [00:00] แนะนำการควบคุมอินฟราเรดรีโมทด้วย Arduino
  • [01:25] ภาพรวมของตัวรับและตัวส่งอินฟราเรด
  • [02:24] ทำความเข้าใจโมดูลตัวรับอินฟราเรดและการเดินสายไฟ
  • [03:31] การติดตั้งไลบรารี IRremote
  • [04:22] การเปิดและอธิบายโค้ดการถอดรหัส
  • [07:29] การอัปโหลดโค้ดและทดสอบปุ่มรีโมท
  • [08:41] การเพิ่มการทำงาน: การควบคุมออด
  • [10:37] ตัวอย่างโปรเจกต์อินฟราเรดที่จะมาถึง

ภาพ

IR_receiver_pins
IR_receiver_pins
infrare_remote
infrare_remote
ir_remote_control_wiring
ir_remote_control_wiring
904-Lesson 21/31: Arduino code fpor decoding Infrared from remote signal
ภาษา: C++
/*
Lesson 21/31: Decoding Infrared from remote
Get this code and watch video Download and resource page https://robojax.com/RJT604
YouTube video https://www.youtube.com/watch?v=EAlqaVy8fYY

*/
#include <IRremote.h>

const int IR_RECEIVE_PIN = 11;  // Define the pin number for the IR Sensor
String lastDecodedValue = "";  // Variable to store the last decoded value

void setup() {
  Serial.begin(9600);                                     // Start serial communication at 9600 baud rate
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Start the IR receiver
}

void loop() {
  if (IrReceiver.decode()) {
    String decodedValue = decodeKeyValue(IrReceiver.decodedIRData.command);
    if (decodedValue != "ERROR") {
      Serial.println(decodedValue);
      delay(100);
    }
    IrReceiver.resume();  // Enable receiving of the next value
  }
}

String decodeKeyValue(long result)
{
  switch(result){
    case 0x16:
      return "0";
    case 0xC:
      return "1"; 
    case 0x18:
      return "2"; 
    case 0x5E:
      return "3"; 
    case 0x8:
      return "4"; 
    case 0x1C:
      return "5"; 
    case 0x5A:
      return "6"; 
    case 0x42:
      return "7"; 
    case 0x52:
      return "8"; 
    case 0x4A:
      return "9"; 
    case 0x9:
      return "+"; 
    case 0x15:
      return "-"; 
    case 0x7:
      return "EQ"; 
    case 0xD:
      return "U/SD";
    case 0x19:
      return "CYCLE";         
    case 0x44:
      return "PLAY/PAUSE";   
    case 0x43:
      return "FORWARD";   
    case 0x40:
      return "BACKWARD";   
    case 0x45:
      return "POWER";   
    case 0x47:
      return "MUTE";   
    case 0x46:
      return "MODE";       
    case 0x0:
      return "ERROR";   
    default :
      return "ERROR";
    }
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

ไลบรารี Arduino (zip)