Truyền nhận không dây sử dụng Arduino và module RF nRF24L01 2.4GHz

Khi có từ 2 module Arduino trở lên, bạn có thể thiết lập giao tiếp không dây các module này lại với nhau. Chúng ta có thể sử dụng giao tiếp không dây cho các tình huống chẳng hạn như:

  • Lấy thông tin từ xa các cảm biến nhiệt độ, độ ẩm, cảnh báo và nhiều cảm biến khác
  • Điều khiển từ xa robot lên đến 2000 mét
  • Điều khiển từ xa và giám sát các tòa nhà trong khu vực
  • Xe điều khiển từ xa các loại
VIDEO DEMO

Giới thiệu nRF24L01 2.4GHz
 
Module sử dụng bộ truyền nhận 2.4GHz của hãng Nordic Semiconductor. Có thêm vào đó một bộ khuyếch đại công suất PA (Power Amplifier) giúp nâng cao khả năng truyền xa hơn và hoạt động ổn định trong một môi trường chuẩn công nghiệp.
Hình thành 2 đường truyền nhận với bộ khuyếch đại công suất chuyên nghiệp giúp cho quá trình truyền thông tăng lên rất nhiều. Khoảng cách truyền dự liệu lên đến 1000m với tốc độ truyền 250Kbps ở khu vực thông thoáng không có vật cản.
Thông số kỹ thuật:
  • 126 kênh RF.
  • Tốc độ truyền trong không khí: 250Kbps, 1MHz và 2MHz.
  • Điện áp hoạt động: 3 ~ 3.6V.
  • Các chân IO tương thích điện áp 5V
  • Công suất ngõ ra tối đa: +20dBm.
  • Dòng tiêu thụ ở chế độ phát (đỉnh): 115mA.
  • Dòng tiêu thụ ở chế độ nhận (đỉnh): 45mA.
  • Độ nhạy ở chế độ 2Mbps: – 92dBm.
  • Độ nhạy ở chế độ 1Mbps: – 95dBm.
  • Độ nhạy ở chế độ 250Kbps: – 104dBm.
  • Khoảng cách truyền ở tốc độ 2Mbps: 520m
  • Khoảng cách truyền ở tốc độ 1Mbps: 720m
  • Khoảng cách truyền ở tốc độ 250Kbps: 1000m
  • Hoạt động ở dải tần số rộng: 2.4GHz.
Lưu ý về phần nguồn điện:
Khi gặp vấn đề làm việc với nRF24L01 đó là nhiều khi điện áp 3.3V không đủ dòng cung cấp cho module, vì vậy chúng ta có thể xử lý tình huống này như sau:
  • Hàn thêm tụ  .33 uF hoặc 10 uF (MicroFarad) vào 2 chân +3.3V và Gnd, đặc biệt khi các bạn dùng dây cắm để kết nối module.
  • Trong mạch điện, thêm 2 tụ .1uf và 10uf vào 2 chân GND và 3.3V.
Sơ đồ chân 
Chi tiết bảng kết nối module với Arduino UNO và MEGA:
Sau khi đi dây như bảng sau, gắn thêm đèn led vào chân 14 của module MEGA. Chân CE và chân CSN có thể thay đổi và cũng cần thay đổi trong mã nguồn tương ứng.
RF Module
UNO
MEGA2560
GND
1
GND
GND
VCC
2
3.3V
3.3V
CE
3
7
7
CSN
4
8
8
SCK
5
13
52
MOSI
6
11
51
MISO
7
12
50
IRQ
8
2
Từ thư viện
Thư viện và mã nguồn ví dụ cho Arduino:
Giải nén, chép thư mục RF24 vào thư viện của phần mềm Arduino.
Nhiệm vụ của thí nghiệm, module phát sẽ phát tín hiệu 0 hoặc 1 đến module thu. Module thu sẽ nhận tín hiệu nếu là 1 thì làm sáng đèn, nếu là 0 thì tắt nó đi. Do tốc độ khá nhanh nên bộ thu có thêm dòng code delay đèn để có thể thấy được ánh sáng của LED.
CHƯƠNG TRÌNH TRUYỀN TÍN HIỆU

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <SPI.h>
#include <RF24.h>
#define CE   7
#define CSN 8
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE, CSN);
int msg[1];

#define led  14
void setup()
{
  Serial.begin(115200);
  delay(1000);
  Serial.println("Nrf24L01 Receiver Starting");
  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
  pinMode(led, OUTPUT);
}

void loop()
{
  if ( radio.available() )
  {
    bool done = false;
    while (!done)
    {
      radio.read( msg, 1);
      Serial.println(msg[0]);
      if (msg[0] == 1)      {
        digitalWrite(led, HIGH);
        Serial.println("OK");
      }
      if (msg[0] == 0)      {
        digitalWrite(led, LOW);
      }
      delay(500);
    }
  }
  else
  {
     Serial.println("No radio available");
  }

}
CHƯƠNG TRÌNH NHẬN TÍN HIỆU

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <SPI.h>
#include <RF24.h>
#define CE   7
#define CSN 8
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE, CSN);
int msg[1];

#define led  14
void setup()
{
  Serial.begin(115200);
  delay(1000);
  Serial.println("Nrf24L01 Receiver Starting");
  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
  pinMode(led, OUTPUT);
}

void loop()
{
  if ( radio.available() )
  {
    bool done = false;
    while (!done)
    {
      radio.read( msg, 1);
      Serial.println(msg[0]);
      if (msg[0] == 1)      {
        digitalWrite(led, HIGH);
        Serial.println("OK");
      }
      if (msg[0] == 0)      {
        digitalWrite(led, LOW);
      }
      delay(500);
    }
  }
  else
  {
     Serial.println("No radio available");
  }

}

Trả lời

Email của bạn sẽ không được hiển thị công khai.