Tin tức

ỨNG DỤNG GIẢI MÃ SÓNG RF 315
14 Tháng 01
Đăng bởi:  LV Hien

ỨNG DỤNG GIẢI MÃ SÓNG RF 315

HTC-TECH xin giới thiệu 1 ứng dụng điều khiển thiết bị từ xa dùng board HTC-TECH UNO R3 thu phát...

HTC-TECH xin giới thiệu 1 ứng dụng điều khiển thiết bị từ xa dùng board HTC-TECH UNO R3 thu phát sóng RF 315MHz để truyền\nhận dữ liệu điều khiển.
Như chúng ta đã biết về sóng vô tuyến để truyền / thu tín hiệu vẫn nhau thì chúng phải nằm ở cùng tấn số. Nghĩa là, một bộ phát 315Mhz chỉ có thể phát tín hiệu đến những mạch thu nào có thạch anh rung động ở tần số 315Mhz mà thôi (tất nhiên là nó chỉ thu được nếu khoảng cách giữa 2 mạch không quá xa, tùy chất lượng bố thu và bộ phát). Như vậy, nếu bạn đang sở hữu những thiết bị được điều khiển thông qua sóng vô tuyến ở các tần số 315 / 433 Mhz thì bạn có thể "hack" chúng để chúng thông minh hơn (chẳng hạn).
Để truyền phát thông tin qua sóng vô tuyến chúng ta cần 2 module: 1 là thu, và 2 là phát. Tuỳ thuộc vào ứng dụng của ta mà ta lựa chọn tần số cho phù hợp. Những module có tần số cao thường truyền rất xa nhưng không "xuyên tường" được, trong khi đó các loại có tần số thấp hơn thì lại xuyên tường tốt. Cao và thấp ở đây, mình không dám định nghĩa, vì đó chỉ là suy nghĩ của mình, vì vậy mình xin đưa ra một ví dụ: bộ phát sóng Wifi mới nhất ở tần số 5GHZ truyền rất là xa (vài km) nhưng lại xuyên tường cực yếu, còn bộ phát Wifi ở tấn số 2.4GHz thì lại có khoảng cách thu sóng ổn định gần hơn nhưng được cái xuyên tường tốt,...
Thôi chúng ta tiến hành làm để hiểu rõ hơn nhé:
Các bạn cần chuẩn bị:
    Phần cứng
1.    Board HTC-TECH UNO R3

2.     Board HTC-TECH NANO

3.    Module thu RF 315MHz

4.    Module phát RF 315MHz

    Sơ đồ kết nối
Ở đây mình sử dụng HTC-TECH UNO R3 làm bộ phát sóng, HTC-TECH NANO làm bộ thu sóng.
ở bộ phát: mạch phát gồm có 3 chân :DATA (hoặc ATAD), VCC, GND. 
o    Chân data (hoặc ATAD): nối với chân digital pin của HTC-TECH UNO R3.
o    Chân VCC: nối 5V với chân 5V của HTC-TECH UNO R3.
o    Chân GND: nối với chân GND của HTC-TECH UNO R3.
ở bộ thu: mạch thu gồm có 4 chân: GND, DATA, DATA, VCC. (chúng ta chỉ dùng 1 trong 2 chân DATA này)
o    Chân DATA: nối vơi digital pin của HTC-NANO
o    Chân VCC: nối với chân 5V  của HTC-TECH NANO
o    Chân GND nối với chân GND của HTC-TECH NANO
Kết nối như sau:

    Lập trình
Để lập trình được trong arduino IDE  các bạn cần download thư viện VirtualWire
Sau đó, các bạn mở Arduino IDE, chọn Sketch/ Import Library.../ Add Library...  và chọn vào file .zip vừa tải về để cài đặt thư viện.
Ở Transmitter module, mình sẽ nhận dữ liệu từ cổng Serial, sau đó gửi sang Receiver module.
Sau đó, các bạn mở Arduino IDE, chọn Sketch/ Import Library.../ Add Library...  và chọn vào file .zip vừa tải về để cài đặt thư viện.
Ở Transmitter module, mình sẽ nhận dữ liệu từ cổng Serial, sau đó gửi sang Receiver module.

void setup()

{

  Serial.begin(9600);// giao tiếp Serial với baudrate 9600

  Serial.println("Ready.........");

  vw_set_ptt_inverted(true);// yêu cầu cho RF link modules

  vw_setup(1024);// cài đặt tốc độ truyền tín hiệu

  vw_set_tx_pin(8);// cài đặt chân digital để phát tín hiệu

}

void loop()

{

  char text[20] = "";// khai báo string dạng array

  byte i = 0;

  while (Serial.available() == 0)

  {

    // nothing

  }

  while (Serial.available() > 0)

  {

    char ch = Serial.read();

    text[i] = ch;

    i++;

    delay(5);

  }

  Serial.print("sent: ");

  Serial.println(text);

  vw_send((byte *)text, sizeof(text));// gửi tín hiệu đi

  vw_wait_tx();

  delay(100);

}

Receiver module, mình sẽ nhận dữ liệuTransmittermodule.

#include <VirtualWire.h> // khai báo thư viện VirtualWire
byte msg[VW_MAX_MESSAGE_LEN];// biến lưu dữ liệu nhận được
byte msgLen = VW_MAX_MESSAGE_LEN;
void setup()
{
  Serial.begin(9600);
  Serial.println("READY..........");
  vw_setup(1024); // cài đặt tốc độ truyền tín hiệu
  vw_set_rx_pin(8);// cài đặt chân digital để nhận tín hiệu
  vw_rx_start();// bắt đầu nhận tín hiệu
}
void loop()
{
  if (vw_get_message(msg, &msgLen)) // nếu có tín hiệu được truyền đến
  {
    Serial.print("got: ");
    for (int i = 0; i < msgLen; i++)
    {
      Serial.write(msg[i]);// in ký tự ra màn hình
    }
    Serial.println();
  }
}

Chú ý: Khi upload 2 đoạn code trên lên 2 boards Arduino, các bạn cần bật 2 cửa sổ Arduino IDE riêng biệt (tức là phải 2 lần double click vào biểu tượng Arduino IDE), vì mỗi board sẽ có 1 cổng COM riêng, nên các bạn chú ý vào Tools / Serial Port... để chọn đúng cổng COM cho board.
Ví dụ bạn lấy mã ON để bật đèn và mã OFF để tắt đèn

    Giải thích keywords
•    vw_set_ptt_inverted(true): cần phải có đối với RF link modules, có thể không cần thiết đối với các loại modules khác.
•    vw_setup(speed): thiết lập tốc độ truyền dữ liệu giữa Transmitter và Receiver, đơn vị: bits/s. Chú ý: tốc độ của Transmitter và Receiver phải bằng nhau.
•    vw_set_tx_pin(pin): thiết lập chân phát tín hiệu.
•    vw_set_rx_pin(pin): thiết lập chân nhận tín hiệu.
•    vw_rx_start(): bắt đầu nhận tín hiệu.
•    vw_send((byte *)data, sizeof(data)): hàm gửi tín hiệu đi, gồm 2 tham số là:
•    (byte *)data: biến con trỏ (byte *)data, trong đó: data là biến chứa dữ liệu cần được truyền đi, biến data cần được khai báo là biến mảng. Cụ thể ở ví dụ trên là biến text[20].
•    sizeof(data): kích thước của dữ liệu được truyền đi, tính theo byte. Chú ý: nếu bạn khai báo string kiểu con trỏ, VD: const char *text = "hello"; lúc này bạn sẽ phải dùng strlen(text) thay vì sizeof(text).
•    vw_get_message(msg, &msgLen): hàm nhận tín hiệu, sẽ trả về giá trị true khi có tín hiệu được gửi tới, gồm 2 tham số là:
•    msg: biến con trỏ msg, trong đó: msg là biến chứa dữ liệu vừa nhận được, biến msg cần được khai báo là biến mảng. Ở ví dụ trên là biến msg[VW_MAX_MASSAGE_LEN].
•    &msgLen: địa chỉ của biến msgLen, biến msgLen chứ kích thước của dữ liệu nhận được.
•    vw_wait_tx(): đợi trước khi truyền tín hiệu tiếp theo.
•    VW_MAX_MASSAGE_LEN: thư viện VirtualWire đã define sẵn kích thước tối đa của dữ liệu là 30 bytes.
Vậy là chúng ta có thể giao tiếp giữa 2 board HTC-TECH UNO R3 và HTC-TECH NANO qua sóng RF 315MHZ rồi đúng không nào, các bạn hãy test thử và tiếp nối dự án của các bạn nhé.
 

Viết bình luận của bạn:
popup

Số lượng:

Tổng tiền: