-
-
-
Tổng tiền thanh toán:
-
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
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
|
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:
-
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.
-
Sai thời gian xung: Đang đặt
474 µs, nhưng RX500 có thể yêu cầu thời gian xung khác. -
Sai cách vào chế độ học lệnh: RX500 phải ở đúng trạng thái Learning khi Arduino phát.
-
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 |
|
|
Độ 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);
}