Sửa dụng mạch phát RF 433hz với arduino để phát sóng kích cho mạch thu RF khác

19/10/2026
sua-dung-mach-phat-rf-433hz-voi-arduino-de-phat-song-kich-cho-mach-thu-rf-khac

Sửa dụng mạch phát RF 433hz với arduino để phát sóng kích cho mạch thu RF khác

Module phát RF 433 MHz loại ASK/OOK, thường được gọi là FS1000A hoặc module tương đương. Có thể dùng Arduino Uno, Nano hoặc ESP32 để phát mã RF điều khiển một mạch thu 433 MHz khác.

Tuy nhiên, mạch thu phải tương thích tần số và kiểu điều chế, đồng thời nếu là mạch thu có chức năng học lệnh thì cần phát đúng mã để nó nhận.

1. Sơ đồ đấu nối Arduino với module RF 433 MHz

Buy RF-link 433MHz transmitter and reciever at the right price @ electrokit

RF 433 MHz

Arduino Nano/Uno

VCC

5V

DATA

D10

GND

GND

ANT

Anten 17,3 cm

Lưu ý: Kiểm tra ký hiệu chân in trên mạch thực tế trước khi cấp nguồn. Chân ANT thường là điểm hàn anten, không phải chân nguồn.

2. Code Arduino phát mã RF 433 MHz

Sử dụng thư viện RCSwitch trong Arduino IDE.

Vào Library Manager, tìm RCSwitch và cài đặt.

Chương trình dưới đây phát mã 5592323 liên tục, mỗi lần cách nhau 1 giây.

Mã trên sử dụng cấu hình 24 bit, Protocol 1, pulse 474 µs. Đây cũng là dạng mã có thể sử dụng với bộ thu RF433 dùng thư viện RCSwitch.

3. Phát nhiều mã RF khác nhau

Ví dụ Arduino phát 4 mã tương ứng 4 nút A, B, C, D.

Mở Serial Monitor, chọn baud 9600, nhập A, B, C hoặc D để phát mã. Hai mã C và D hiện là mã ví dụ, chưa phải mã được xác nhận từ tay điều khiển.

4. Có thể kích hoạt những loại mạch thu nào?

Loại mạch thu

Khả năng điều khiển

RF433 RXB6, RXB8

Có, nếu giải mã tương thích

RF433 có relay học lệnh EV1527

Có thể, nếu đúng định dạng mã và quy trình học

RF433 dùng PT2262

Cần cấu hình mã và giao thức phù hợp

RF433 rolling code

Không thể chỉ phát mã cố định để thay thế

 

Arduino đã chạy lệnh phát RF, nhưng chưa chứng minh được module RF433 thực sự phát sóng hoặc bộ thu RX500 nhận được tín hiệu.

Có 4 nguyên nhân cần kiểm tra:

  1. Sai giao thức mã hóa: RX500 có thể học mã EV1527 hoặc PT2262, trong khi Arduino đang phát theo Protocol 1 của thư viện RCSwitch.

  2. Sai thời gian xung: Đang đặt 474 µs, nhưng RX500 có thể yêu cầu thời gian xung khác.

  3. Sai cách vào chế độ học lệnh: RX500 phải ở đúng trạng thái Learning khi Arduino phát.

  4. Phần cứng phát: Sai chân DATA, điện áp cấp, anten hoặc module phát bị lỗi.

Tôi đề xuất thử phát mã EV1527 với nhiều độ rộng xung để xác định RX500 có nhận được hay không.

1. Code thử phát RF với nhiều độ rộng xung

Code dưới đây phát lần lượt các xung 250, 300, 350, 400, 450 và 500 µs. Mỗi lần thử đều có khoảng nghỉ để bạn đưa RX500 vào chế độ học.


#include <RCSwitch.h>

RCSwitch rf = RCSwitch();

#define RF_TX 10

// Ma 24 bit, nibble cuoi = 0001
const unsigned long RF_CODE = 0x555501;

const int pulseList[] = {
  250, 300, 350, 400, 450, 500
};

int indexPulse = 0;

void setup() {
  Serial.begin(9600);

  rf.enableTransmit(RF_TX);
  rf.setProtocol(1);
  rf.setRepeatTransmit(12);

  Serial.println("TEST RF433 - RX500");
}

void loop() {

  int pulse = pulseList[indexPulse];

  Serial.println("-------------------");
  Serial.print("Pulse: ");
  Serial.println(pulse);

  rf.setPulseLength(pulse);

  // Phat trong khoang 3 giay
  unsigned long start = millis();

  while (millis() - start < 3000) {
    rf.send(RF_CODE, 24);
    delay(60);
  }

  // Dung phat de chuyen che do hoc
  rf.disableTransmit();

  Serial.println("Tam dung 5 giay");
  delay(5000);

  rf.enableTransmit(RF_TX);

  indexPulse++;

  if (indexPulse >= 6) {
    indexPulse = 0;
  }
}
 

Cách thử: Đặt hai module cách nhau khoảng 1–2 m. Theo dõi Serial Monitor, đưa RX500 vào chế độ học ngay trước một đợt phát 3 giây. Nếu không nhận, thử đợt tiếp theo.

Đây là phép thử dò xung, không bảo đảm RX500 nhận được nếu giao thức của nó khác. Nhiều bộ thu học lệnh sử dụng EV1527/PT2262, nhưng quy trình học và khả năng tương thích tùy model.

Đã nhận ở: 

Pulse: 250

01:31:09.335 -> Tam dung 5 giay

01:31:14.369 -> -------------------

01:31:14.369 -> Pulse: 300

01:31:17.510 -> Tam dung 5 giay

01:31:22.560 -> -------------------

01:31:22.560 -> Pulse: 350

01:31:25.555 -> Tam dung 5 giay bộ thu nhận

Như vậy Arduino đã phát RF433 thành công và bộ thu RX500 đã nhận được mã.

Cấu hình đang hoạt động:

Thông số

Giá trị

Chân phát RF

D8

Tần số module

433 MHz

Giao thức

Protocol 1

Độ rộng xung

350 µs

Mã RF

0x555501

Độ dài mã

24 bit

Số lần lặp

12

Chu kỳ phát

3 giây

Baud Serial

115200

Nên giữ nguyên các thông số này khi phát triển chương trình tiếp theo.

Lưu ý: Code hiện tại tự động phát 3 giây một lần. Nếu RX500 điều khiển relay ở chế độ đảo trạng thái (toggle), mỗi lần phát có thể làm relay đổi trạng thái ON/OFF.

 

#include <RCSwitch.h>

 

RCSwitch rf = RCSwitch();

 

#define RF_TX 8

 

#define RF_CODE 0x555501

 

void setup() {

  Serial.begin(115200);

 

  rf.enableTransmit(RF_TX);

 

  rf.setProtocol(1);

  rf.setPulseLength(350);

  rf.setRepeatTransmit(12);

 

  Serial.println("RF433 READY");

  Serial.println("Protocol: 1");

  Serial.println("Pulse: 350 us");

}

 

void loop() {

  rf.send(RF_CODE, 24);

 

  Serial.println("Da phat RF433");

 

  delay(3000);

}

 

 

Bình luận
Nội dung này chưa có bình luận, hãy gửi bình luận đầu tiên của bạn.
VIẾT BÌNH LUẬN CỦA BẠN