Giới thiệu module thu phát RF CC2530 tầm xa (plus CC2591) của Zigbee.

Mô tả dự án: 

Mình mới đặt hàng được module RF này, đây là module truyền sóng 2.4 GHZ, khoảng cách rất xa, sử dụng giao tiếp Serial (TX-RX) rất thông dụng, cắm vào là chạy….Rất phù hợp với các dự án robot thám hiểm, thăm dò, tình báo,…..

Sức mạnh

  • Hãng sản xuất danh tiếng Zigbee
  • Tên phiên bản: Zigbee UART CC2530 +PA V2.
  • IC chính: Zigbee CC2530 từ TI, phiên bản nâng cấp có thêm ic Khuếch đại PA CC2591. (Mình đang viết về loại nâng cấp này)
  • Hoạt động ở cả 2 chế độ phát và thu.
  • Tốc độ truyền tối đa : 3300Bps (Byte per second ) (bằng 26400 bit/s ) . Đối với các ứng dụng Stream như truyền dẫn video hoặc voice (chất lượng thấp) thì bạn có thể sử dụng với tốc độ lên tới 7000 Bps (có thể sẽ mất mát dữ liệu). 
  • Độ nhạy truyền: 20dbm
  • Khoảng cách  truyền xa không dưới 1500m (không vật cản), độ cao truyền sóng không dưới 3.5 km. (không vật cản)
  • Điện áp : 2.8v => 3.5v
  • Dòng tiêu thụ: <50mA.
  • Bộ nhớ flash 256kb
  • Độ nhạy thu : -97dBm với ic PA CC2591 ( -110dBm cho module thường).
  • Tần số sóng mang 2.4GHZ, khả năng bức xạ và xuyên thấu vật cản rất cao.
  • Giao thức Serial (UART) TTL 3.3V, tốc độ giao thức (baudrate) tùy chỉnh từ 2440 tối đa 115200. (2400/4800/9600/14400/19200/38400/57600/115200)
  • Kích thước 1.6 cm x 3.4cm
  •  

Phân biệt tốc độ giao thức (Baud rate) và tốc độ truyền (Transmission rate):

  • Baud rate: là tốc độ quy ước để truyền 1 bit dữ liệu trong giao tiếp UART giữa arduino và module zigbee. Ví dụ nói tốc độ baud (baudrate) là 2400 thì thời gian để truyền 1 bit dữ liệu là 0.42ms ( 1/2400 ). Baudrate giúp cho máy thu RX hiểu được đâu là bit 1 hay bit 0 trong 1 xung bằng việc xác định thời gian kéo của xung đó. Baudrate càng nhỏ thì việc xác định bit càng chính xác nhưng làm cho thời gian truyền tăng lên. (Hiểu theo nghĩa ngược lại thì trong 1s giao thức này sẽ truyền tối đa 2400 bit. )
  • Transmission rate: là tốc độ truyền dữ liệu giữa 2 module RF zigbee với nhau.  Nó có thể là bps (bit /s) , Bps (byte/s) ,Kbps (kilo bit/s0 , KBps( kilo Byte/s) ...v.v

Trên thị trường rất có nhiều biến thể của module này, chúng đều có lõi là IC CC2530 nhập khẩu chính hãng của Zigbee. Bài viết này giới thiệu loại có thêm ic Khuếch đại PA CC2591 (phần cứng như ảnh dưới).

Đi kèm với nó là một Anten có độ nhạy thu cao.

Không chỉ truyền dẫn đơn thuần, nó còn rất thông minh nữa.

 

Với các thông số như trên nó xứng đáng là một lựa chọn không thể bỏ qua cho các dự án sử dụng truyền dẫn sóng.yesheart

Cài Firmware cho module.

Rất tiếc đây là module được nhà sản xuất nạp sẵn firmware nên bạn không cần làm gì cả, cắm vào là chạy luôn  laughheartwink

Cách cấu hình

Nó có quá nhiều ưu điểm, nên nhà sản xuất cho ta lựa chọn theo sở thích bằng cách tự cài với nút ấn có sẵn trên module (chỉ có 1 nút thôi mà ^^).

Gồm 4 bước chính

  • Bước 1: Chọn baudrate giao tiếp bằng với baudrate đã khai báo trong code arduino.
  • Bước 2: Chọn kênh (tránh nhầm lẫn với đứa hàng xóm cũng chơi module này).
  • Bước 3: Chọn chế độ truyền dẫn Point to point hay Broadcast ?
  • Bước 4: Xác nhận lưu và hoàn tất.

Sau khi cài đặt thành công mọi dữ liệu sẽ được lưu lại mãi mãi kể cả khi mất điện.

Điều đó có nghĩa là bạn chỉ cần làm điều này 1 lần duy nhất.

Hướng dẫn chi tiết

Bước 1

Không cấp nguồn, nhấn giữ nút key, sau đó cấp nguồn.

(4 led trên module sẽ nhấp nháy báo hiệu truy cập chế độ set cấu hình).

Thả nút nhấn ra, rồi lại nhấn nút tuần tự để chọn mức boudrate phù hợp theo bảng dưới.

 

Bước 2

Sau khi chọn Baudrate xong, nhấn tì (nhấn giữ) nút ấn để sang bước 2.

(4 led trên module sẽ nhấp nháy báo hiệu truy cập bước 2).

Thả nút nhấn ra, rồi lại nhấn nút tuần tự để chọn kênh (Chanel), lưu ý để 2 module truyền được cho nhau thì ở bước này bạn cần cài đặt chọn kênh giống nhau.

Bước 3

Sau khi chọn Chanel xong, nhấn tì nút ấn để sang bước 3.

(4 led trên module sẽ nhấp nháy báo hiệu truy cập bước 3).

Thả nút nhấn ra, rồi lại nhấn nút tuần tự để chọn chế độ truyền dẫn.

Nó có 2 chế độ truyền dẫn:

  • Point to Point: Dùng để truyền nhận giữa 2 moudle cho nhau. (Ta có thể lựa chọn địa chỉ (tránh trùng với module của người khác) ở 16 địa chỉ khác nhau.)
  • Broadcast: Người dùng có thể tạo ra một mạng lưới truyền dẫn giữa các Node để tạo ra một nhà mạng cho riêng mình, đúng chất IoT chưa bạn laugh. (cái này bạn nên tìm hiểu thêm)

Nếu bạn chọn Point to Point

  • ở module thứ nhất bạn chọn Cấu hình Point to Point A.

  • Cũng ở bước này, ở module thứ 2 chọn cấu hình Poin to Point B.

Nếu bạn chọn Broadcast

  • Thì chọn trường hợp còn lại như hình giống nhau ở tất cả các module.

(Lưu ý tất cả các module cần được cấu hình Chanel và Broadcast giống nhau, khi 1 module truyền, tất cả các module còn lại sẽ nhận, chức năng của các module là tương đương.

Bước 4

Sau khi chọn kiểu truyền nhận xong, nhấn tì nút ấn để sang bước 4.

4 led trên module sẽ nhấp nháy báo hiệu cài đặt thành công và được lưu mãi mãi.

Lưu ý thiết đặt chỉ được lưu và có hiệu lực khi bạn đến được bước 4.

Để thiết đặt lại hãy rút nguồn và quay về bước 1.

Cách dùng rất đơn giản

Gỉa sử chúng ta đang giao tiếp truyền thống bằng 2 dây TX-RX giữa 2 arduino như thế này.

Bạn chú ý quy tắc nối TX của thiết bị A phải nối với RX của thiết bị B nhé. 

 

Giờ muốn lên đời RF thì ta cũng làm tương tự.

 

Thư viện hỗ trợ

Thực ra bạn không cần thư viện thư viện gì cho 2 module RF kia đâu. 

Tuy nhiên như trong 1 dự án trạm khí tượng, bạn sẽ lên kế hoạch sử dụng 2 board arduino (1 board chính – 1 board phụ). Board chính đặt ở phòng để giám sát và điều khiển, board phụ đặt trên tròi kí tượng đọc các trị cảm biến rồi gửi về qua Serial. Hoặc pro hơn là các dự án về robot thám hiểm.

Một vấn đề mà bạn vấp phải là bạn chỉ biết chỉ biết truyền một số có giá trị trong khoảng từ 0 => 255 angry, trong khi thực tế thì ta luôn cần nhiều hơn vậy.devil

Đó có thể là giá trị của biến (nhiệt , độ ẩm=90%,áp suất=2000atm, tốc độ=4500 rpm, ..v.v ) một kiểu int, long, unsigned long  hay kiểu kiểu số thực như float, double (ví dụ thường thấy ở các module GPS trả về như kinh độ 50.45656 độ, vĩ độ 102.55433).

Hãy đọc bài viết này tải về thư viện hỗ trợ trong giao tiếp UART.

Truyền các số kiểu long, int, float trong giao tiếp Serial (UART).

Test khoảng cách thực

Khoảng cách truyền nhận là tiêu chí được chú ý nhiều nhât.

Code test

Chú ý: Code test sử dụng thư viện tại đây

Truyền các số kiểu long, int, float trong giao tiếp Serial (UART).

#include "UART_ARDUINO.h"
UART vietnam;
void setup()
{
    vietnam.begin(9600); // baud: 200 -> 250,000.
    pinMode(13, 1); //led
    pinMode(5, INPUT_PULLUP); // nut button
}
void nhap_nhay()
{
    for (byte i = 0; i < 3; i++) {
        digitalWrite(13, 1);
        delay(200);
        digitalWrite(13, 0);
        delay(200);
    }
}
char t = 'A'; // truyền 1 kí tự trong bảng ASCII
void loop()
{
    if (digitalRead(5) == 0) {
        nhap_nhay();
        vietnam.write_char(t);
    }

    if (Serial.available() >= 1) {
        if (vietnam.read_char() == 'A') {

            nhap_nhay();
            vietnam.write_char(t);
        }
    }
}

Mạch điện

Cách test

Nạp cùng 1 code bên trên cho cả 2 arduino.

Hai moulde Rf ở chế độ Point to Point, kênh tùy bạn, baudrate với arduino là 9600.

Nối mạch như trên. Nhấn nút để bắt đầu truyền dẫn, quá trình truyền dẫn sẽ diễn ra liên tục cho đến khi 1 trong 2 không bắt được tín hiệu của nhau do khoảng cách quá xa.

Tiêu chí đánh giá

Bạn hãy nhìn code sẽ thấy, ta sẽ đánh giá chất lượng ở cả 2 chế độ Tầm phủ sóng (khi phát) và độ nhạy thu (khi thu).

Đoạn code trên được mô tả: "Nếu một module bắt được tín hiệu của module còn lại thì hãy gửi lại tín hiệu cho module đó"

(Đấy cũng là lí do ta cần nhấn “mồi” cho 1 module ).

Điều đó có ý nghĩa: 2 module có tác dụng trong mọi điều kiện khoảng cách, độ cao.

Kết quả test của cá nhân mình

Khoảng cách truyền nhận là 2km  smiley (mặc dù mục tiêu đề ra là 3kmdevil).

(Như đã nói dòng CC2530 có nhiều loại ,chú ý là module mình dùng trong video là CC2530 có thêm CC2591 mới cho kết quả tốt như vậy).

Bạn cũng có thể bắt gặp lại module này trong dự án UAV của mình, ở đó chúng ta sẽ có cơ hội test độ cao. Càng lên cao tầm phủ sóng sàng xa, hi vọng là nó phủ 4km là ngon. cheeky

Khoảng cách thu nhận giảm xuống chủ yếu do hấp thụ (mưa, mật độ phân tử khí (nhiệt độ và độ cao ,càng lên cao không khí càng loãng nên ít bị hấp thụ), sương mù, bão tuyết, địa hình rừng núi…) hoặc do phản xạ (sóng có thể bị phản xạ (tùy từng bước sóng) bởi các tòa nhà, dãy núi, tầng điện ly…. Các trường hợp giao thoa và tán xạ cũng vậy.

Bạn có thể gõ “Ảnh hưởng của khí quyển đến truyền dẫn vô tuyến” trên google nếu muốn tìm hiểu thêm.

Kết

Khi mua module thì chúng ta buộc phải mua ít nhất 2 module .

Bạn có thể chưa bao giờ hoặc đã từng sử dụng các module RF cự li ngắn hẳn cũng đồng ý với mình đây là module RF đáng để đầu tư nhất phải không .heart

Tất nhiên một tutorial về tăng khoảng cách thu phát bằng đủ chiêu trò sẽ được viết trong thời gian tới.^^

Hi vọng bài viết có ích cho bạn trong tương lai, nhấn like ủng hộ mình và các thành viên để chúng mình có động lực viết bài nhé.   cheekylaughheartyes

Thái Sơn >

lên
37 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

AVR-Xuất xung với tần số và độ rộng theo ý muốn

Tiếp tục chuỗi bài: Điều khiển pin bằng ngôn ngữ chính thống. 

Bài viết này sẽ giúp bạn tạo một xung PWM có tần số và độ rộng xung theo ý muốn. 

lên
29 thành viên đã đánh giá bài viết này hữu ích.

AVR - Điều khiển động cơ SERVO siêu chuẩn với biên độ góc cực nhỏ!

Tận dụng ưu thế của TIMER1 trên arduino, việc ứng dụng nó để xuất ra xung điều khiển servo với độ chính xác cao là rất khả thi. Nó cho phép servo quay với góc cực nhỏ, nhỏ đến cỡ nào ? BẠn hãy đọc bài này sẽ rõ. devil

lên
24 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: