Arduino Điều khiển từ xa bằng hồng ngoại

Bạn có lẽ đã gặp phải điều khiển từ xa hồng ngoại, còn được gọi là điều khiển từ xa IR, khi sử dụng các thiết bị điện tử gia đình như TV và điều hòa không khí... Trong bài hướng dẫn này, chúng ta sẽ học cách sử dụng điều khiển từ xa hồng ngoại (IR) và bộ nhận hồng ngoại để điều khiển Arduino. Cụ thể, chúng ta sẽ học:

Sau đó bạn có thể chỉnh sửa mã để điều khiển LED, quạt, bơm, bộ truyền động... thông qua điều khiển từ xa hồng ngoại.

Điều khiển hồng ngoại - bộ nhận hồng ngoại - Arduino

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×IR Kit (Remote Controller and Receiver)
1×CR2025 Battery
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về điều khiển từ xa hồng ngoại

Một hệ thống điều khiển hồng ngoại gồm hai thành phần:

  • Điều khiển từ xa hồng ngoại
  • Bộ thu hồng ngoại

Một bộ hồng ngoại thường bao gồm hai thành phần được đề cập ở trên.

Điều khiển từ xa hồng ngoại

Điều khiển từ xa hồng ngoại là một thiết bị cầm tay phát ra tín hiệu hồng ngoại. Điều khiển từ xa hồng ngoạibao gồm một bàn phím với các nút khác nhau:

  • Mỗi nút trên điều khiển từ xa tương ứng với một chức năng hoặc lệnh cụ thể.
  • Khi một nút được nhấn, điều khiển từ xa phát ra một tín hiệu hồng ngoại mang một mã hoặc mẫu duy nhất liên quan đến nút được nhấn.
  • Những tín hiệu hồng ngoại này không thể nhìn thấy bằng mắt người vì chúng thuộc quang phổ hồng ngoại.
bộ điều khiển hồng ngoại
image source: diyables.io

Bộ thu hồng ngoại

Mô-đun nhận IR là một cảm biến phát hiện và tiếp nhận các tín hiệu hồng ngoại phát ra từ điều khiển từ xa.

Bộ thu hồng ngoại phát hiện các tín hiệu hồng ngoại đến và chuyển chúng thành mã (lệnh) đại diện cho nút nhấn trên điều khiển từ xa.

Bộ thu hồng ngoại có thể là một cảm biến hoặc một mô-đun. Bạn có thể sử dụng các lựa chọn sau:

  • Chỉ mô-đun thu IR
  • Chỉ cảm biến thu IR
  • Cảm biến thu IR + Adapter
mô-đun cảm biến nhận hồng ngoại
image source: diyables.io
bộ điều hợp cảm biến thu hồng ngoại
image source: diyables.io

Cấu hình chân của bộ nhận IR

Mô-đun nhận tia hồng ngoại hoặc cảm biến có ba chân:

  • Chân VCC: Kết nối chân này với chân 3.3V hoặc 5V của Arduino hoặc nguồn cấp ngoài.
  • Chân GND: Kết nối chân này với chân GND của Arduino hoặc nguồn cấp ngoài.
  • Chân OUT (Output): Đây là chân đầu ra của module nhận IR. Được kết nối với một chân đầu vào kỹ thuật số trên Arduino.

Cách hoạt động

Khi người dùng nhấn một nút trên điều khiển từ xa IR.

  • Điều khiển từ xa IR mã hóa lệnh tương ứng với nút nhấn thành tín hiệu hồng ngoại thông qua một giao thức cụ thể.
  • Điều khiển từ xa IR phát tín hiệu hồng ngoại đã được mã hóa.
  • Bộ thu hồng ngoại nhận tín hiệu hồng ngoại đã được mã hóa.
  • Bộ thu hồng ngoại giải mã tín hiệu hồng ngoại đã được mã hóa thành lệnh.
  • Arduino đọc lệnh từ bộ thu hồng ngoại.
  • Arduino ánh xạ lệnh tới phím được nhấn.

Có vẻ phức tạp nhưng đừng lo. Với sự trợ giúp của thư viện DIYables_IRcontroller library, nó dễ như ăn bánh.

Sơ đồ đấu dây

Sơ đồ nối dây giữa Arduino và mô-đun nhận IR

sơ đồ kết nối điều khiển từ xa hồng ngoại cho Arduino

This image is created using Fritzing. Click to enlarge image

Sơ đồ đấu dây thật sự

mô-đun nhận tín hiệu ir từ điều khiển từ xa cho Arduino
image source: diyables.io

Sơ đồ đấu nối giữa Arduino và bộ thu IR

sơ đồ nối dây điều khiển từ xa hồng ngoại bằng Arduino

This image is created using Fritzing. Click to enlarge image

Sơ đồ nối dây thực tế

cảm biến nhận điều khiển từ xa bằng hồng ngoại cho Arduino
image source: diyables.io

Sơ đồ mạch giữa Arduino và cảm biến nhận IR và Adapter

Bạn cũng có thể kết nối cảm biến nhận IR với bộ adapter trước khi kết nối với Arduino.

bộ thu ir từ xa cho Arduino
image source: diyables.io

Cách Lập Trình Cho Điều Khiển Từ Xa IR

  • Bao gồm thư viện:
#include <DIYables_IRcontroller.h> // Library for IR Receiver
  • Khai báo một đối tượng DIYables_IRcontroller_17 hoặc DIYables_IRcontroller_21 tương ứng với điều khiển từ xa IR 17 phím hoặc 21 phím:
DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms // OR DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms
  • Khởi tạo bộ điều khiển hồng ngoại.
irController.begin();
  • Trong vòng lặp, kiểm tra xem có phím được nhấn hay không. Nếu có, lấy phím được nhấn.
Key17 key = irController.getKey(); // if using 17-key IR controller // OR Key21 key = irController.getKey(); // if using 21-key IR controller
  • Khi bạn đã phát hiện một phím được nhấn, bạn có thể thực hiện các hành động cụ thể dựa trên từng phím.

Mã nguồn Arduino

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 7 // The Arduino pin connected to IR controller DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key17 key = irController.getKey(); if (key != Key17::NONE) { switch (key) { case Key17::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key17::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key17::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key17::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key17::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key17::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key17::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key17::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key17::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; case Key17::KEY_STAR: Serial.println("*"); // TODO: YOUR CONTROL break; case Key17::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key17::KEY_SHARP: Serial.println("#"); // TODO: YOUR CONTROL break; case Key17::KEY_UP: Serial.println("UP"); // TODO: YOUR CONTROL break; case Key17::KEY_DOWN: Serial.println("DOWN"); // TODO: YOUR CONTROL break; case Key17::KEY_LEFT: Serial.println("LEFT"); // TODO: YOUR CONTROL break; case Key17::KEY_RIGHT: Serial.println("RIGHT"); // TODO: YOUR CONTROL break; case Key17::KEY_OK : Serial.println("OK"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }
/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 7 // The Arduino pin connected to IR controller DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key21 key = irController.getKey(); if (key != Key21::NONE) { switch (key) { case Key21::KEY_CH_MINUS: Serial.println("CH-"); // TODO: YOUR CONTROL break; case Key21::KEY_CH: Serial.println("CH"); // TODO: YOUR CONTROL break; case Key21::KEY_CH_PLUS: Serial.println("CH+"); // TODO: YOUR CONTROL break; case Key21::KEY_PREV: Serial.println("<<"); // TODO: YOUR CONTROL break; case Key21::KEY_NEXT: Serial.println(">>"); // TODO: YOUR CONTROL break; case Key21::KEY_PLAY_PAUSE: Serial.println(">||"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_MINUS: Serial.println("–"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_PLUS: Serial.println("+"); // TODO: YOUR CONTROL break; case Key21::KEY_EQ: Serial.println("EQ"); // TODO: YOUR CONTROL break; case Key21::KEY_100_PLUS: Serial.println("100+"); // TODO: YOUR CONTROL break; case Key21::KEY_200_PLUS: Serial.println("200+"); // TODO: YOUR CONTROL break; case Key21::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key21::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key21::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key21::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key21::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key21::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key21::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key21::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key21::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key21::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }

Hướng dẫn từng bước

  • Đi tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm "DIYables_IRcontroller", sau đó tìm thư viện DIYables_IRcontroller của DIYables
  • Nhấn nút Cài đặt để cài đặt thư viện DIYables_IRcontroller.
thư viện Arduino diyables_ircontroller
  • Bạn sẽ được yêu cầu cài đặt phụ thuộc thư viện như hình dưới đây:
thư viện irremote dành cho Arduino
  • Nhấp vào nút Cài đặt tất cả để cài đặt phụ thuộc
  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp vào nút Tải lên trên Arduino IDE để nạp mã vào Arduino
  • Nhấn từng phím trên điều khiển từ xa lần lượt
  • Xem kết quả trên Serial Monitor.
  • Dưới đây là kết quả khi bạn nhấn các phím trên điều khiển IR 21 phím lần lượt:
COM6
Send
CH- CH CH+ << >> >|| – + EQ 100+ 200+ 0 1 2 3 4 5 6 7 8 9
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Bây giờ bạn có thể chỉnh sửa mã để điều khiển LED, quạt, bơm, bộ truyền động... qua các điều khiển từ xa IR.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.