Trương Trọng Thân gửi vào
- 30015 lượt xem
I. Lượn vài vòng
Nhiều bạn đã và đang tìm hiểu những ứng dụng của module nRF24L01 và đang gặp rắc rối, hay không biết liệu nó có làm được gì hay hơn không. Ở bài viết này tôi xin hướng dẫn một cách tiếp theo để điều khiển động cơ Servo thông qua module nRF24L01 và biến trở. Nó làm được gì không? Ở đây tác giả tạm giữ bí mật về ứng dụng của nó trên dự án của mình. Nhưng với bài viết này hoàn toàn bạn có thể nghĩ ra ứng dụng cho nó chẳng hạn tăng tốc độ máy quạt từ xa, điều chỉnh van nước,... Chả có gì khó cả, ta bắt đầu thôi nào!
II. Nhắc lại một ít kiến thức về Module NRF24L01
Các bạn có thể dễ dàng tìm kiếm thông số của module này trên Cộng đồng Arduino Việt Nam qua từ khóa NRF24L01. Tôi xin giới thiệu sơ qua một số đặc điểm mà tôi quan tâm như sau:
- Khoảng cách thu phát khoảng 100m (với điều kiện trống trải), khoảng 30-50m (trong nhà). Với một số phiên bản đặc biệt ví dụ như loại NRF24L01+ thì khoảng cách có thể lên tới 1km. Khá thích hợp cho các bộ điều khiển cầm tay.
- Có anten sẵn trên bảng mạch rất tiện và đẹp.
- Có khả năng truyền tín hiệu 2 chiều. Tức là một module vừa có thể là transmitter vừa có thể là receiver. Khác biệt so với loại 433Mhz là phải có 2 module riêng biệt.
- Giá thành thấp khoảng 10k VNĐ/cái (tôi mua trên Aliexpress.com) tức rẻ hơn module 433Mhz một chút.
- Ít gặp sự cố (hiện tại tới lúc này)
III. Phần cứng
IV. Lắp mạch
Ở đây tôi nói về cách nối module NRF24 với Arduino cách nối dây này dùng cho cả hai bên mạch thu và phát đừng quên nhé !
1. Module nRF24L01
NRF24 | Arduino |
1 | GND |
2 | 3.3V |
3 | D9 |
4 | D10 |
5 | D13 |
6 | D11 |
7 | D12 |
2. Cách nối dây dành cho transmitter (mạch phát):
3. Cách nối dây dành cho receiver (mạch thu):
V. Lập trình
Lưu ý: Cần tải và cài đặt thư viện nRF24L01 thì mới nạp code được nhá !
Để tải và cài đặt bạn quay lại bài viết Sử dụng Module NRF24L01 - Thu phát sóng vô tuyến 2.4GHz với Arduino
1. Dành cho transmitter (mạch phát):
#include <SPI.h> #include "RF24.h" const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ để phát RF24 radio(9,10); unsigned char msg[1]; //số dương kiểu unsigned char, tương đương với byte msg[1]. Dùng để lưu trữ nội dung sẽ gửi. const int potpin_1 = A0; // chân biến trở int val_1; void setup(){ //========Module NRF24 Serial.begin(9600); radio.begin(); radio.setAutoAck(1); radio.setRetries(1,1); radio.setDataRate(RF24_1MBPS); // Tốc độ truyền radio.setPALevel(RF24_PA_MAX); // Dung lượng tối đa radio.setChannel(10); // Đặt kênh radio.openWritingPipe(pipe); // mở kênh } void loop() { val_1 = analogRead(potpin_1); //đọc giá trị biến trở val_1 = map(val_1, 0, 1023, 0, 180); msg[0] = val_1; Serial.println(msg[0]); radio.write(&msg, sizeof(msg)); }
2. Dành cho receiver (mạch thu):
#include <SPI.h> #include <Servo.h> #include "RF24.h" const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ phát RF24 radio(9,10); unsigned char msg[1]; Servo servo1;// servo1 int data; int pos; void setup(){ Serial.begin(9600); radio.begin(); radio.setAutoAck(1); radio.setDataRate(RF24_1MBPS); // Tốc độ dữ liệu radio.setChannel(10); // Đặt kênh radio.openReadingPipe(1,pipe); radio.startListening(); servo1.attach(3); // sử dụng chân số 3 để điều khiển servo } void loop(){ if (radio.available()) { radio.read(&msg, sizeof(msg)); servo1.write(msg[0]); Serial.println(msg[0]); } }
VI. Kết luận cuối cùng
Từ những công cụ và kiến thức mình cung cấp ở trên bạn có thể tự nghĩ ra ý tưởng của mình về ứng dụng nó đi nào ! Cảm ơn đã đọc bài bạn có thể đóng góp ý kiến bên dưới
Video demo hoạt động quay gấp buổi tối có gì thông cảm HAHA :