Tìm kiếm mã

Bài 21/31: Sử dụng điều khiển từ xa hồng ngoại với Arduino | SunFounder Robojax

Bài 21/31: Sử dụng điều khiển từ xa hồng ngoại với Arduino | SunFounder Robojax

Giới thiệu

Trong bài học này, chúng ta khám phá thế giới hấp dẫn của giao tiếp hồng ngoại (IR) bằng cách xây dựng một dự án giải mã tín hiệu từ một điều khiển từ xa tiêu chuẩn bằng Arduino. Dự án này cho phép bạn phát hiện nút nào được nhấn trên điều khiển IR và kích hoạt các hành động tương ứng, chẳng hạn như bật còi. Khả năng giao tiếp với điều khiển IR mở ra nhiều ứng dụng thực tế, từ tự động hóa gia đình đơn giản đến các hệ thống điều khiển tùy chỉnh.

infrare_remote
IR_receiver_pins

Dưới đây là một số ý tưởng truyền cảm hứng cho những gì bạn có thể xây dựng với công nghệ này:

  • Thay thế điều khiển từ xa đa năng: Tạo điều khiển tùy chỉnh cho TV, hệ thống âm thanh hoặc các thiết bị điều khiển bằng IR khác.
  • Tự động hóa gia đình: Điều khiển đèn, quạt hoặc các thiết bị khác bằng cách nhấn nút trên điều khiển tiêu chuẩn.
  • Dự án tương tác: Xây dựng hệ thống an ninh kích hoạt báo động khi nhấn một nút cụ thể.
  • Điều khiển robot: Sử dụng điều khiển IR để điều khiển chuyển động và hành động của robot không dây.
  • Hỗ trợ tiếp cận: Phát triển điều khiển đơn giản với nút lớn cho người có khả năng vận động hạn chế.

Phần cứng & Linh kiện

Dự án này được xây dựng với một vài linh kiện đơn giản, tất cả thường có trong các bộ khởi động như bộ 3-trong-1 SunFounder. Bạn sẽ cần:

  • Một bo mạch Arduino (ví dụ: Uno)
  • Một mô-đun thu IR (ví dụ: TSOP38238 hoặc tương tự)
  • Một điều khiển từ xa IR tiêu chuẩn (có pin CR2025)
  • Một còi thụ động
  • Dây jumper và bảng mạch breadboard

Hướng dẫn đấu dây

ir_remote_control_wiring

Dưới đây là sơ đồ đấu dây đơn giản cho dự án này. Bộ thu IR là linh kiện chính. Khi bạn nhìn vào bề mặt cong của bộ thu, cách bố trí chân như sau:

  • Chân phải: Kết nối với chân 5V trên Arduino.
  • Chân giữa: Kết nối với chân GND trên Arduino.
  • Chân trái (Tín hiệu): Kết nối với chân kỹ thuật số 11 trên Arduino.

Ngoài ra, cho phần hành động của dự án, kết nối chân dương (dài hơn) của còi với chân kỹ thuật số 2 và chân còn lại với GND.

Giải thích mã

Dự án này dựa vào thư viện IRremote để xử lý nhiệm vụ phức tạp là giải mã tín hiệu hồng ngoại. Mã được cấu trúc để trước tiên học các mã cụ thể từ điều khiển của bạn và sau đó sử dụng chúng để kích hoạt hành động. Hãy phân tích các phần có thể tùy chỉnh của người dùng.

Đầu tiên, chúng ta định nghĩa chân mà dây tín hiệu của bộ thu IR được kết nối. Đây là cấu hình quan trọng mà bạn phải khớp với cách đấu dây vật lý của mình.

const int IR_RECEIVE_PIN = 11;  // Định nghĩa số chân cho cảm biến IR

Trong hàm setup(), bộ thu IR được khởi tạo bằng chân chúng ta vừa định nghĩa. Điều này cho thư viện biết bắt đầu lắng nghe tín hiệu trên chân đó.

IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Khởi động bộ thu IR

Phần cốt lõi của logic thực hiện hành động nằm trong loop(). Mã kiểm tra xem một phím có được nhấn không và giải mã nó. Hàm decodeKeyValue() là một hàm tùy chỉnh chuyển đổi mã thập lục phân thô từ điều khiển thành chuỗi dễ đọc như "POWER" hoặc "MUTE". Đây là phần bạn sẽ sửa đổi để khớp với điều khiển cụ thể của mình. Mã ví dụ định nghĩa một buzzerPin và chỉ bật nó khi nút "POWER" được nhấn.

const int buzzerPin = 2; // Định nghĩa chân cho còi
// ... bên trong loop()
if (decodedValue == "POWER") {
    digitalWrite(buzzerPin, HIGH); // Bật còi
} else {
    digitalWrite(buzzerPin, LOW); // Tắt còi
}

Cách sử dụng: Hàm decodeKeyValue() là chìa khóa để tùy chỉnh dự án này. Để sử dụng với điều khiển của riêng bạn, trước tiên bạn phải chạy mã với Serial Monitor mở. Nhấn từng nút trên điều khiển và ghi lại giá trị thập lục phân được in cho mỗi nút. Sau đó, cập nhật câu lệnh switch trong hàm decodeKeyValue() để ánh xạ các giá trị đó thành tên có ý nghĩa. Bạn có thể sử dụng các tên này trong câu lệnh if của mình để kích hoạt các hành động khác nhau, giống như ví dụ làm cho nút "POWER".

Dự án trực tiếp & Trình diễn

Sau khi mã được tải lên, hãy mở Serial Monitor với tốc độ baud 9600. Hướng điều khiển của bạn vào bộ thu IR và nhấn một nút. Serial Monitor sẽ hiển thị tên phím tương ứng (ví dụ: "POWER", "MUTE"). Để thấy hành động có hiệu lực, hãy nhấn nút "POWER". Bạn sẽ nghe thấy còi bật. Nhấn bất kỳ nút nào khác, chẳng hạn như "MUTE", sẽ tắt còi. Điều này minh họa một khái niệm đơn giản nhưng mạnh mẽ: sử dụng điều khiển từ xa để kích hoạt đầu ra kỹ thuật số trên Arduino của bạn.

Chương

  • [00:00] Giới thiệu về Điều khiển Hồng ngoại từ xa với Arduino
  • [01:25] Tổng quan về Bộ thu và Bộ phát Hồng ngoại
  • [02:24] Hiểu về Mô-đun Thu Hồng ngoại và Cách đấu dây
  • [03:31] Cài đặt Thư viện IRremote
  • [04:22] Mở và Giải thích Mã Giải mã
  • [07:29] Tải mã lên và Kiểm tra các Phím Điều khiển từ xa
  • [08:41] Thêm một Hành động: Điều khiển Còi Buzzer
  • [10:37] Xem trước các Dự án Hồng ngoại Sắp tới

Hình ảnh

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
Ngôn ngữ: 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";
    }
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Thư viện Arduino (tệp nén)