Search…

Hướng Dẫn Sử Dụng Module RF315 Truyền Nhận Tín Hiệu Qua Sóng Vô Tuyến Bằng Arduino

10/08/20204 min read
Giới thiệu và code mẫu sử dụng module RF315 thu và phát, code mẫu với Arduino và thư viện VitualWire.

Từ những thập niên cuối của thế kỉ 19 sóng vô tuyến đã được khám phá và ứng dụng mạnh mẽ trong lĩnh vực truyền thông. Ngày nay, nhiều thiết bị truyền thông được ra đời phục vụ trong nhiều nhu cầu khác nhau.

Module RF315 với ưu điểm nhỏ gọn và giá thành thấp nhưng vẫn đáp ứng được nhu cầu truyền tải thông tin bằng sóng vô tuyến là một lựa chọn thích hợp cho việc học tập, nghiên cứu và ứng dụng trong các dự án nhỏ, để truyền nhận thông tin đơn giản.

Sóng vô tuyến và truyền thông bằng sóng vô tuyến là gì?

Một điện tích chuyển động sinh ra một điện trường và từ trường biến thiên xung quanh nó, lan truyền trong không gian gọi là sóng điện từ.

Sóng vô tuyến là một dạng sóng điện từ có bước sóng nằm trong phổ điện từ với tần số nằm trong khoảng 3 kHz đến 300 GHz, tương ứng với bước sóng 1mm đến 100 km và được truyền đi với vận tốc ánh sáng (trong môi trường chân không), có thể lan truyền đi trong môi trường không gian tự do và trên bề mặt Trái Đất nên được ứng dụng nhiều trong truyền thông vô tuyến.

Bản chất của dữ liệu là 1 dải mã nhị phân gồm các kí tự 0 và 1 nối tiếp nhau, vậy để truyền được dữ liệu đi chúng ta cần chuyển dải nhị phân đó thành 1 dạng tín hiệu có thể truyền đi được và nó phải có dao động (có dạng sóng) để bên nhận có thể phân biệt được các bit trong tín hiệu mà nó nhận được. Dạng tín hiệu sau khi được điều chế đó chính là sóng vô tuyến với một biên độ, tần số và pha xác định.

Để sử dụng sóng vô tuyến trong truyền thông cần 1 bộ điều chế sóng (theo một quy luật điều chế nhất định) sau đó phát tín hiệu đi và 1 ăng-ten thu tín hiệu, giải mã và cho ra thông tin ban đầu.

Module RF315 và thư viện hỗ trợ VitualWire

Module RF315 thu phát.
Module phát (trái) - Module thu (phải)

Demo Module thu phát RF315 với Arduino

Thành phần linh kiện

  • 2 board Arduino.
  • Module RF315 gồm 1 module phát (module nhỏ hơn có 3 chân) và 1 module thu (module lớn hơn có 4 chân).
  • BreadBoard x 2.
  • Dây dẫn.

Sơ đồ lắp đặt

SoDoLapDat
Sơ đồ lắp đặt thu phát với module RF315

Thư viện VitualWire và các hàm cơ bản

VitualWire là gì? 

Arduino hỗ trợ thư viện VitualWire giúp cho việc sử dụng Module RF315 dễ dàng và đơn giản hơn.

Download thư viện tại đây, sau đó mở Arduino IDE, chọn Sketch → Import Library... → Add Library ... và chọn file .zip vừa tải về để cài đặt thư viện.

Các hàm config
vw_set_tx_pin(transmit_pin) Chọn chân truyền data trên Arduino (mặc định là D12)
vw_set_rx_pin(receice_pin) Chọn chân nhận data trên Arduino (mặc định là D11)
vw_set_ptt_pin(transmit_en_pin) Chọn chân enable (mặc định là D10)
vw_set_ptt_inverted(true) Đảo giá trị cho chân enable
vw_setup(bits_per_second) Chọn tốc độ truyền nhận dữ liệu, lưu ý tốc độ truyền nhận dữ liệu của module thu và module phát phải bằng nhau
Các hàm dùng cho việc truyền dữ liệu
vw_send(message, length) Gửi 1 message là 1 mảng kiểu byte với length là độ dài của message
vw_tx_active() Trả về true nếu message đang được gửi và trả về false nếu như không nhận được message
vw_wait_tx() Chờ cho đến khi message gửi xong
Các hàm dùng cho việc nhận dữ liệu
vw_rx_start() Cho phép receiver module bắt đầu nhận tín hiệu
vw_have_message() Trả về true nếu message đã được gửi
vw_wait_rx() Chờ cho đến khi nhận xong message và trả về true
vw_wait_rx_max(timeout_ms) Chờ cho đến khi nhận xong message và trả về true hoặc trả về false khi thời gian chờ vượt quá timeout_ms
vw_get_message(buf, &buflen) Đọc message và độ dài của message được nhận gần nhất vào buf và buflen, với buf là 1 mảng kiểu byte
vw_rx_stop() Dừng cho phép nhận tín hiệu

Code thử nghiệm

Code mẫu Module phát
#include <VirtualWire.h>

#define LED_PIN         13;
#define TRANSMIT_PIN    12;
#define TRANSMIT_EN_PIN 10;
#define SPEED           1024;

void setup()
{
  vw_set_ptt_pin(TRANSMIT_EN_PIN);
  vw_set_ptt_inverted(true);
  vw_setup(SPEED);
  vw_set_tx_pin(TRANSMIT_PIN);

  pinMode(LED_PIN, OUTPUT);
}

void loop()
{
  char msg[5] = {'S','T','D','I','O'};   
  
  digitalWrite(LED_PIN, HIGH);

  vw_send((byte *)msg, 5);
  vw_wait_tx();

  digitalWrite(LED_PIN, LOW);
  delay(1000);
}
Code mẫu module thu
#include <VirtualWire.h>
       
#define RECEIVE_PIN 11;
#define SPEED       1024;

byte msg[VW_MAX_MESSAGE_LEN];
byte msgLen = VW_MAX_MESSAGE_LEN;

void setup()
{
  Serial.begin(9600);
  Serial.println("Ready.........");

  vw_setup(SPEED);
  vw_set_rx_pin(RECEIVE_PIN);
  vw_rx_start();
}

void loop()
{
  if (vw_have_message())
  {
    vw_wait_rx();
    vw_get_message(msg, &msgLen);

    Serial.print("Got: ");
    for (int i = 0; i < msgLen; i++)
    {
      Serial.write(msg[i]);
    }
    Serial.println();
  }
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024