- Tìm hiểu về Mô-đun RF nRF24L01
- Giao diện nRF24L01 với Arduino
- Mặt máy thu: Kết nối mô-đun Arduino Uno nRF24L01
- Phía máy phát: Kết nối mô-đun Arduino Nano nRF24L01
- Làm việc với mô-đun thu phát không dây nRF24L01 +
- Lập trình nRF24L01 cho Arduino
- Điều khiển động cơ Servo bằng nRF24L01 không dây
Trong khi Internet vạn vật (IoT), Công nghiệp 4.0, giao tiếp Máy với Máy, v.v. đang ngày càng trở nên phổ biến, nhu cầu giao tiếp không dây đã trở nên quan trọng, với nhiều máy móc / thiết bị giao tiếp với nhau trên đám mây. Các nhà thiết kế sử dụng nhiều hệ thống giao tiếp không dây như Bluetooth Low Energy (BLE 4.0), Zigbee, Mô-đun Wi-Fi ESP43, Mô-đun RF 433MHz, Lora, nRF, v.v. và việc lựa chọn phương tiện phụ thuộc vào loại ứng dụng mà nó đang được sử dụng.
Trong số tất cả, một phương tiện không dây phổ biến cho giao tiếp mạng cục bộ là nRF24L01. Các mô-đun này hoạt động trên băng tần 2.4GHz (ISM) với tốc độ truyền từ 250Kbps đến 2Mbps, được sử dụng hợp pháp ở nhiều quốc gia và có thể được sử dụng trong các ứng dụng công nghiệp và y tế. Người ta cũng tuyên bố rằng với các ăng-ten thích hợp, các mô-đun này có thể truyền và nhận khoảng cách giữa chúng lên đến 100 mét. Thật thú vị phải không !!? Vì vậy, trong hướng dẫn này, chúng ta sẽ tìm hiểu thêm về các mô-đun nRF24l01 này và cách giao diện nó với nền tảng vi điều khiển như Arduino. Chúng tôi cũng sẽ chia sẻ một số giải pháp cho các vấn đề thường gặp phải khi sử dụng mô-đun này.
Tìm hiểu về Mô-đun RF nRF24L01
Các mô-đun nRF24L01 là các mô-đun thu phát, có nghĩa là mỗi mô-đun đều có thể gửi và nhận dữ liệu nhưng vì chúng là bán song công nên chúng có thể gửi hoặc nhận dữ liệu cùng một lúc. Mô-đun có vi mạch nRF24L01 chung từ các chất bán dẫn Bắc Âu chịu trách nhiệm truyền và nhận dữ liệu. IC giao tiếp bằng giao thức SPI và do đó có thể dễ dàng giao tiếp với bất kỳ bộ vi điều khiển nào. Nó trở nên dễ dàng hơn nhiều với Arduino vì các thư viện luôn có sẵn. Các sơ đồ chân của một module nRF24L01 tiêu chuẩn được hiển thị dưới đây
Mô-đun có điện áp hoạt động từ 1,9V đến 3,6V (thường là 3,3V) và tiêu thụ rất ít dòng điện chỉ 12mA trong quá trình hoạt động bình thường, làm cho nó hoạt động hiệu quả về pin và do đó thậm chí có thể chạy trên các ô đồng xu. Mặc dù điện áp hoạt động là 3,3V nhưng hầu hết các chân đều có khả năng chịu được 5V và do đó có thể được giao tiếp trực tiếp với các bộ vi điều khiển 5V như Arduino. Một ưu điểm khác của việc sử dụng các mô-đun này là mỗi mô-đun có 6 đường ống. Có nghĩa, mỗi mô-đun có thể giao tiếp với 6 mô-đun khác để truyền hoặc nhận dữ liệu. Điều này làm cho mô-đun phù hợp để tạo mạng hình sao hoặc lưới trong các ứng dụng IoT. Ngoài ra, chúng có phạm vi địa chỉ rộng gồm 125 ID duy nhất, do đó, trong một khu vực khép kín, chúng ta có thể sử dụng 125 trong số các mô-đun này mà không can thiệp vào nhau.
Giao diện nRF24L01 với Arduino
Trong hướng dẫn này, chúng ta sẽ học cách giao tiếp nRF24L01 với Arduino bằng cách điều khiển động cơ servo được kết nối với một Arduino bằng cách thay đổi chiết áp trên Arduino khác. Để đơn giản, chúng tôi đã sử dụng một mô-đun nRF24L01 làm bộ phát và mô-đun kia là bộ thu, nhưng mỗi mô-đun có thể được lập trình để gửi và nhận dữ liệu riêng lẻ.
Sơ đồ mạch để kết nối mô-đun nRF24L01 với Arduino được hiển thị bên dưới. Đối với nhiều loại, tôi đã sử dụng UNO cho phía thu và Nano cho phía phát. Nhưng logic kết nối vẫn giống nhau đối với các bo mạch Arduino khác như mini, mega.
Mặt máy thu: Kết nối mô-đun Arduino Uno nRF24L01
Như đã nói trước đó, nRF24L01 giao tiếp với sự trợ giúp của giao thức SPI. Trên Arduino Nano và UNO, các chân 11, 12 và 13 được sử dụng cho giao tiếp SPI. Do đó, chúng tôi kết nối các chân MOSI, MISO và SCK từ nRF đến các chân 11, 12 và 13 tương ứng. Các chân CE và CS có thể được cấu hình bởi người dùng, tôi đã sử dụng chân 7 và 8 ở đây, nhưng bạn có thể sử dụng bất kỳ chân nào bằng cách thay đổi chương trình. Mô-đun nRF được cấp nguồn bởi chân 3.3V trên Arduino, trong hầu hết các trường hợp sẽ hoạt động. Nếu không, có thể thử nguồn điện riêng. Ngoài giao diện nRF, tôi cũng đã kết nối động cơ servo với chân 7 và cấp nguồn cho nó qua chân 5V trên Arduino. Tương tự mạch phát như hình bên dưới.
Phía máy phát: Kết nối mô-đun Arduino Nano nRF24L01
Các kết nối cho bộ phát cũng giống nhau, ngoài ra tôi đã sử dụng một chiết áp được kết nối qua chân nối đất quảng cáo 5V của Arduino. Điện áp tương tự đầu ra sẽ thay đổi từ 0-5V được kết nối với chân A7 của Nano. Cả hai bo mạch đều được cấp nguồn qua cổng USB.
Làm việc với mô-đun thu phát không dây nRF24L01 +
Tuy nhiên, để làm cho nRF24L01 của chúng tôi hoạt động không bị ồn, chúng tôi có thể muốn xem xét những điều sau. Tôi đã làm việc trên nRF24L01 + này trong một thời gian dài và học được những điểm sau đây có thể giúp bạn không bị va vào tường. Bạn có thể thử những điều này khi các mô-đun không hoạt động theo cách bình thường.
1. Hầu hết các mô-đun nRF24L01 + trên thị trường là giả mạo. Những thứ giá rẻ mà chúng ta có thể tìm thấy trên Ebay và Amazon là tệ nhất (Đừng lo lắng, với một vài chỉnh sửa, chúng tôi có thể làm cho chúng hoạt động)
2. Vấn đề chính là nguồn điện, không phải mã của bạn. Hầu hết các mã trực tuyến sẽ hoạt động bình thường, bản thân tôi có một mã hoạt động mà tôi đã tự mình kiểm tra, Hãy cho tôi biết nếu bạn cần chúng.
3. Hãy chú ý vì các mô-đun được in là NRF24L01 + thực sự là Si24Ri (Có một sản phẩm của Trung Quốc).
4. Các mô-đun nhái và giả sẽ tiêu thụ nhiều điện năng hơn, do đó không phát triển mạch nguồn của bạn dựa trên biểu dữ liệu nRF24L01 +, vì Si24Ri sẽ có mức tiêu thụ hiện tại cao khoảng 250mA.
5. Cẩn thận với gợn sóng điện áp và dòng điện dâng cao, các mô-đun này rất nhạy cảm và có thể dễ dàng bị cháy. (;-(đã tăng 2 mô-đun cho đến nay)
6. Thêm một vài tụ điện (10uF và 0,1uF) trên Vcc và Gnd của mô-đun giúp làm cho nguồn cung cấp của bạn trở nên tinh khiết và điều này hoạt động đối với hầu hết các mô-đun.
Vẫn nếu bạn gặp sự cố, hãy báo cáo về phần bình luận hoặc đọc qua phần này, hoặc đặt câu hỏi của bạn trên diễn đàn của chúng tôi.
Ngoài ra, hãy kiểm tra dự án lâu dài của chúng tôi về việc tạo Phòng trò chuyện bằng nRF24L01.
Lập trình nRF24L01 cho Arduino
Rất dễ dàng để sử dụng các mô-đun này với Arduino, do thư viện sẵn có được tạo bởi maniacbug trên GitHub. Nhấp vào liên kết để tải xuống thư viện dưới dạng thư mục ZIP và thêm nó vào IDE Arduino của bạn bằng cách sử dụng tùy chọn Phác thảo -> Bao gồm Thư viện -> Thêm thư viện.ZIP . Sau khi thêm thư viện, chúng ta có thể bắt đầu lập trình cho dự án. Chúng ta phải viết hai chương trình, một chương trình cho phía phát và một cho phía thu. Tuy nhiên, như tôi đã nói trước đó, mỗi mô-đun có thể hoạt động như một máy phát và máy thu. Cả hai chương trình được đưa ra ở cuối trang này, trong mã bộ phát, tùy chọn bộ thu sẽ được ghi chú và trong chương trình bộ thu, mã bộ phát sẽ được chú thích. Bạn có thể sử dụng nó nếu bạn đang thử một dự án trong đó mô-đun phải hoạt động như cả hai. Hoạt động của chương trình được giải thích dưới đây.
Giống như tất cả các chương trình, chúng tôi bắt đầu bằng cách bao gồm các tệp tiêu đề. Vì nRF sử dụng giao thức SPI, chúng tôi đã bao gồm tiêu đề SPI và cả thư viện mà chúng tôi vừa tải xuống. Thư viện servo được sử dụng để điều khiển động cơ servo.
#include
Dòng tiếp theo là dòng quan trọng nơi chúng tôi hướng dẫn thư viện về các chân CE và CS. Trong sơ đồ mạch của chúng tôi, chúng tôi đã kết nối CE với chân 7 và CS với chân 8, vì vậy chúng tôi đặt dòng là
RF24 myRadio (7, 8);
Tất cả các biến được liên kết với thư viện RF nên được khai báo dưới dạng cấu trúc biến tổng hợp. Trong chương trình này, msg biến được sử dụng để gửi và nhận dữ liệu từ mô-đun RF.
gói struct { int msg; } typedef struct package Package; Gói dữ liệu;
Mỗi mô-đun RF có một địa chỉ duy nhất mà nó có thể gửi dữ liệu đến thiết bị tương ứng. Vì chúng tôi chỉ có một cặp ở đây, chúng tôi đặt địa chỉ thành 0 ở cả bộ phát và bộ thu nhưng nếu bạn có nhiều mô-đun, bạn có thể đặt ID thành bất kỳ chuỗi 6 chữ số duy nhất nào.
địa chỉ byte = {"0"};
Tiếp theo bên trong chức năng thiết lập void, chúng tôi khởi tạo mô-đun RF và thiết lập hoạt động với băng tần 115 không bị nhiễu và cũng đặt mô-đun hoạt động ở chế độ tiêu thụ điện năng tối thiểu với tốc độ tối thiểu 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // Băng tần 115 phía trên tín hiệu WIFI myRadio.setPALevel (RF24_PA_MIN); // MIN công suất thấp cơn thịnh nộ myRadio.setDataRate (RF24_250KBPS); // Tốc độ tối thiểu myservo.attach (6); Serial.print ("Thiết lập được khởi tạo"); chậm trễ (500); }
Hàm void WriteData () ghi dữ liệu được truyền vào nó. Như đã nói trước đó nRF có 6 đường ống khác nhau mà chúng ta có thể đọc hoặc ghi dữ liệu, ở đây chúng ta đã sử dụng 0xF0F0F0F066 làm địa chỉ để ghi dữ liệu. Ở phía người nhận, chúng ta phải sử dụng cùng một địa chỉ trên hàm ReadData () để nhận dữ liệu đã được ghi.
void WriteData () { myRadio.stopListening (); // Ngừng nhận và khởi động transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Gửi dữ liệu trên địa chỉ 40 bit này myRadio.write (& data, sizeof (data)); chậm trễ (300); }
Hàm void WriteData () đọc dữ liệu và đặt nó vào một biến. Một lần nữa trong số 6 đường ống khác nhau sử dụng mà chúng tôi có thể đọc hoặc ghi dữ liệu ở đây, chúng tôi đã sử dụng 0xF0F0F0F0AA làm địa chỉ để đọc dữ liệu. Điều này có nghĩa là máy phát của mô-đun khác đã viết một cái gì đó trên địa chỉ này và do đó chúng tôi đang đọc nó từ cùng một địa chỉ.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Đọc đường ống nào, 40 bit Địa chỉ myRadio.startListening (); // Dừng Transminting và bắt đầu hiển thị if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Ngoài các dòng này, các dòng khác trong chương trình được sử dụng để đọc POT và chuyển đổi nó thành 0 đến 180 bằng chức năng bản đồ và gửi nó đến mô-đun Bộ thu nơi chúng tôi điều khiển servo tương ứng. Tôi đã không giải thích từng dòng một vì chúng ta đã học được điều đó trong hướng dẫn Giao diện Servo.
Điều khiển động cơ Servo bằng nRF24L01 không dây
Khi bạn đã sẵn sàng với chương trình, hãy tải mã bộ phát và bộ thu (được đưa ra bên dưới) trên các bảng Arduino tương ứng và cấp nguồn cho chúng bằng cổng USB. Bạn cũng có thể khởi chạy màn hình nối tiếp của cả hai bo mạch để kiểm tra giá trị nào đang được truyền và giá trị nào đang được nhận. Nếu mọi thứ hoạt động như mong đợi khi bạn xoay núm POT ở phía máy phát thì servo ở phía bên kia cũng phải xoay theo.
Hoạt động hoàn chỉnh của dự án được minh họa trong video dưới đây. Việc không bắt các mô-đun này hoạt động trong lần thử đầu tiên là điều hoàn toàn bình thường, Nếu bạn gặp bất kỳ sự cố nào, hãy kiểm tra lại mã và hệ thống dây và thử các hướng dẫn xử lý sự cố đã cho ở trên. Nếu không có gì hiệu quả, hãy đăng vấn đề của bạn trên diễn đàn hoặc trong phần bình luận và tôi sẽ cố gắng giải quyết chúng.