Hướng Dẫn Module Điều Khiển Từ Xa Hồng Ngoại HX1838 Bằng Arduino

Giới thiệu

Module Điều Khiển Từ Xa Hồng Ngoại Thumbnail

Remote HX1838 là một thiết bị điều khiển từ xa phổ biến, được sử dụng rộng rãi trong các dự án Arduino và các ứng dụng điều khiển từ xa khác nhau. Sử dụng cảm biến hồng ngoại HX1838, bạn có thể thu được dữ liệu từ remote và giải mã chúng để điều khiển các thiết bị khác nhau, như đèn, quạt, hoặc bất kỳ thiết bị nào tương thích với Arduino.

Bộ Điều Khiển Từ Xa Hồng Ngoại HX1838 VS1838

Hướng dẫn sử dụng Arduino với Remote HX1838

Bước 1: Kết nối phần cứng

Đảm bảo bạn đã kết nối chính xác các chân của HX1838 với Arduino như sau:

  • Chân OUT của HX1838 kết nối với một chân của Arduino (ví dụ: chân A0).
  • Chân VCC và GND của HX1838 kết nối với nguồn cung 5V và GND của Arduino.
Arduino HX1838
5V +
GND -
A0 S
Sơ đồ kết nối 1
Sơ đồ kết nối Arduino với Led thu hồng ngoại

Bước 2: Cài đặt thư viện IRremote

Sử dụng thư viện IRremote để giải mã dữ liệu từ remote. Cài đặt thư viện bằng cách:

  1. Mở Arduino IDE.
  2. Chọn "Sketch" -> "Include Library" -> "Manage Libraries..."
  3. Tìm "IRremote" và cài đặt thư viện.

Bước 3: Code Arduino

  • Hiển thị dữ liệu từ remote trên Serial Monitor:
#include <IRremote.h>

int RECV_PIN = A0; // Chân số kết nối với HX1838

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Bật chế độ nhận IR
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // Hiển thị dữ liệu được giải mã lên Serial Monitor
    irrecv.resume(); // Tiếp tục nhận dữ liệu IR
  }
}

*Lưu ý: Với remote mã NEC như trong bài viết này nếu khi nạp code trên bị lỗi nút nào cũng in ra mã FFFFFFFF thì bạn có thể dùng code dưới đây

#include <IRremote.h>
const int RECV_PIN = A0;
unsigned long lastTime = millis();
//=================================================
void setup() {
  Serial.begin(9600);
  //Khởi động bộ thu
  IrReceiver.begin(RECV_PIN, true, 13); 
}
//=================================================
void loop() {
  if (IrReceiver.decode()) {
    uint32_t dataRemote = IrReceiver.decodedIRData.decodedRawData;
    if(dataRemote>0){
      Serial.println(dataRemote);
    }
    lastTime = millis();
    IrReceiver.resume(); // Cho phép nhận giá trị tiếp theo
  }
}

Bước 4: Kiểm tra và sử dụng dữ liệu

  • Upload chương trình vào Arduino.
  • Mở Serial Monitor để xem giá trị được đọc từ remote khi bạn nhấn các nút trên remote.
  • Ghi lại giá trị tương ứng với mỗi nút để sử dụng trong các dự án sau này.

Kiểm tra loại remote

Để biết remote bạn đang dùng là loại nào, bạn có thể sử dụng đoạn code dưới đây:

#include <IRremote.h>
 
const int RECV_PIN = A0;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
  irrecv.blink13(true);
}
 
void loop(){
  if (irrecv.decode(&results)){
        //Serial.println(results.value, HEX);
        switch (results.decode_type){
            case NEC: Serial.println("NEC"); break ;
            case SONY: Serial.println("SONY"); break ;
            case RC5: Serial.println("RC5"); break ;
            case RC6: Serial.println("RC6"); break ;
            case SHARP: Serial.println("SHARP"); break ;
            case JVC: Serial.println("JVC"); break ;
            case SAMSUNG: Serial.println("SAMSUNG"); break ;
            case LG: Serial.println("LG"); break ;
            case WHYNTER: Serial.println("WHYNTER"); break ;
            case PANASONIC: Serial.println("PANASONIC"); break ;
            case DENON: Serial.println("DENON"); break ;
          default:
            case UNKNOWN: Serial.println("UNKNOWN"); break ;
          }
        irrecv.resume();
 }
}

Code mẫu: Bật tắt LED dùng Remote hồng ngoại HX1838

Kết nối phần cứng

Sơ đồ kết nối 2 - Bật tắt LED
Arduino HX1838
5V +
GND -
A0 S

Code

Chương trình này mình sẽ dùng 6 phím (1, 2, 3, 4, *, #) để khiển bật tắt LED. Với Remote có mã khác thì các bạn thay các mã tương ứng vào là được.

#include <IRremote.h>
const int RECV_PIN = A0;
const int pinLed1 = 3;
const int pinLed2 = 4;
const int pinLed3 = 5;
const int pinLed4 = 6;
unsigned long lastTime = millis();
//=================================================
void setup() {
  Serial.begin(9600);
  pinMode(pinLed1, OUTPUT);
  pinMode(pinLed2, OUTPUT);
  pinMode(pinLed3, OUTPUT);
  pinMode(pinLed4, OUTPUT);
  digitalWrite(pinLed1,LOW);
  digitalWrite(pinLed2,LOW);
  digitalWrite(pinLed3,LOW);
  digitalWrite(pinLed4,LOW);
  //Khởi động bộ thu
  IrReceiver.begin(RECV_PIN, true, 13); 
}
//=================================================
void loop() {
  if (IrReceiver.decode()) {
    uint32_t dataRemote = IrReceiver.decodedIRData.decodedRawData;
    if(dataRemote>0){
      Serial.println(dataRemote);
      if (millis() - lastTime > 250) {
        switch(dataRemote){
          case 3125149440://so1
            digitalWrite(pinLed1, !digitalRead(pinLed1));
          break;
          case 3108437760://so2
            digitalWrite(pinLed2, !digitalRead(pinLed2));
          break;
          case 3091726080://so3
            digitalWrite(pinLed3, !digitalRead(pinLed3));
          break;
          case 3141861120://so4
            digitalWrite(pinLed4, !digitalRead(pinLed4));
          break;
          case 3910598400://phím * Tắt hết
            digitalWrite(pinLed1, LOW);
            digitalWrite(pinLed2, LOW);
            digitalWrite(pinLed3, LOW);
            digitalWrite(pinLed4, LOW);
          break;
          case 4061003520://Phím # Bật hết
            digitalWrite(pinLed1, HIGH);
            digitalWrite(pinLed2, HIGH);
            digitalWrite(pinLed3, HIGH);
            digitalWrite(pinLed4, HIGH);
          break;
        }
      }
    }
    lastTime = millis();
    IrReceiver.resume(); // Cho phép nhận giá trị tiếp theo
  }
}

Một số hàm quan trọng trong thư viện IRremote:

  1. IRrecv:
    • Chức năng: Khởi tạo đối tượng IRrecv để nhận tín hiệu hồng ngoại.
    • Cú pháp: IRrecv receiver(pin)
  2. decode_results:
    • Chức năng: Lưu trữ kết quả của quá trình giải mã tín hiệu hồng ngoại.
    • Cú pháp: decode_results results
  3. enableIRIn:
    • Chức năng: Bắt đầu quá trình lắng nghe và giải mã tín hiệu hồng ngoại.
    • Cú pháp: enableIRIn()
  4. resume:
    • Chức năng: Tiếp tục quá trình lắng nghe và giải mã tín hiệu hồng ngoại sau khi đã giải mã xong.
    • Cú pháp: resume()
  5. decode:
    • Chức năng: Giải mã tín hiệu hồng ngoại và lưu kết quả vào đối tượng decode_results.
    • Cú pháp: decode_results decode(decode_results *results)
  6. IRsend:
    • Chức năng: Khởi tạo đối tượng IRsend để gửi tín hiệu hồng ngoại từ Arduino.
    • Cú pháp: IRsend irsend
  7. sendNEC:
    • Chức năng: Gửi tín hiệu hồng ngoại với mã định dạng NEC.
    • Cú pháp: sendNEC(unsigned long data, int nbits)
  8. sendSony:
    • Chức năng: Gửi tín hiệu hồng ngoại với mã định dạng Sony.
    • Cú pháp: sendSony(unsigned long data, int nbits)
  9. sendRaw:
    • Chức năng: Gửi tín hiệu hồng ngoại dưới dạng chuỗi mã RAW.
    • Cú pháp: sendRaw(const unsigned int buf[], int len, int hz)
  10. sendRC5:
    • Chức năng: Gửi tín hiệu hồng ngoại với mã định dạng RC5.
    • Cú pháp: sendRC5(unsigned long data, int nbits)
  11. sendRC6:
    • Chức năng: Gửi tín hiệu hồng ngoại với mã định dạng RC6.
    • Cú pháp: sendRC6(unsigned long data, int nbits)

Video

Nhận xét

Mới hơn Cũ hơn