此項目所需的組件如下:
2 Arduino
2 NRF24L01模塊
操縱桿模塊
連接電線
伺服電機控制如何工作
在變送器側我們有一個操縱桿模塊,Arduino和NRF24L01,而在接收端我們有一個NRF24L01,Arduino和一個伺服電機。
當我們在水平方向移動操縱桿時,操縱桿模塊將發送Ardui的模擬值沒有。我們已將NRF24L01模塊設置為發射器模式,并將操縱桿移動值發送到特定地址。
在接收端,我們已將NRF24L01模塊設置為接收模式。我們在接收端給出了相同的地址,其他NRF24L01模塊正在傳輸數據。因此,只要模塊接收數據,Arduino就會讀取它并根據它移動伺服電機。
NRF24L01引腳
此模塊的功耗非常低。它在傳輸過程中消耗大約12mA的功率,甚至低于LED。
該模塊工作在3.3V,所以不要直接連接到5V的Arduino,因為它可能會損壞。 NRF24L01模塊的其他引腳具有5V容限,因此您可以將它們直接連接到Arduino。
SCK,MOSI和MISO引腳用于SPI通信,CSN和CE引腳用于設置待機或激活模式以及設置發送或命令模式。
電路圖
連接有點冗長,所以我將分別解釋發送器和接收器的連接。
對于發射器
使用Arduino建立發射器側的連接,如下所示:
將NRF24L01的3.3V引腳與3.3V的Arduino連接
將NRF24L01的GND引腳與Arduino的GND連接
將NRF24L01的CSN引腳連接到Arduino的引腳8
將NRF24L01的CE引腳與Arduino的引腳7連接
連接NRF24L01的SCK引腳Arduino的第13針
將NRF24L01的MOSI引腳與Arduino的引腳11連接
將NRF24L01的MISO引腳與Arduino的引腳12連接?/li》
然后將操縱桿模塊與Arduino連接如下:
操縱桿模塊的VCC到Arduino的5V電源
GND of操縱桿模塊到Arduino的GND
操縱桿模塊的VER到Arduino的A1
操縱桿模塊的HOR到Arduino的A0
對于接收器
在接收器端,NRF24L01與Arduino的連接 相同作為發射器側的那些。使用Arduino進行伺服電機連接如下:
紅線到Arduino的5V電源
Arduino的GND到布線》
黃色電線到Arduino的第6針
代碼發射器
#include
#include
#include
RF24 radio(7, 8); // CSN, CE
const byte address[6] = “00001”;
int x_key = A1;
int y_key = A0;
int x_pos;
int y_pos;
void setup() {
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
pinMode (x_key, INPUT) ;
pinMode (y_key, INPUT) ;
}
void loop() {
x_pos = analogRead (x_key) ;
y_pos = analogRead (y_key) ;
radio.write(&x_pos, sizeof(x_pos));
delay(100);
}
接收者代碼
#include
#include
#include
#include
Servo servo;
RF24 radio(7, 8); // CSN, CE
const byte address[6] = “00001”;
int servo_pin = 6;
void setup() {
Serial.begin(9600);
radio.begin();
servo.attach (servo_pin ) ;
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
if (radio.available()) {
int x_pos ;
radio.read(&x_pos, sizeof(x_pos));
Serial.println(x_pos);
x_pos = map(x_pos, 0, 1023, 0, 180);
if (x_pos》400 && x_pos《600)
{
}
else{
servo.write (x_pos) ;
}
}
}
代碼細分和解釋
首先,包含庫對于NRF24L01和伺服電機。
#include
#include
#include
#include
然后,定義我們連接NRF24L01的CSN和CE引腳的引腳。之后,我們初始化將發送和接收數據的地址。該地址在發射機和接收機側應該相同。該地址可以是任意五個字母的字符串。
RF24 radio(7,8);//CSN,CE
const字節地址[6] =“00001”;
在發送器的設置功能中,我們設置發送數據的地址。然后我們將功率放大范圍設置為最小,因為我們的模塊彼此更接近。
radio.openWritingPipe(地址);
radio.setPALevel(RF24_PA_MIN);
對于接收方,我們使用以下命令并設置模塊以從該地址接收數據。
radio.openReadingPipe(0,address);
In發送器的循環功能,我們從操縱桿模塊讀取并在我們之前設置的地址發送值。
radio.write(& x_pos,sizeof(x_pos));
接收器側的以下命令將從發送器獲取數據,并且在將數據映射到0-180之后,我們將移動伺服。
radio.read(& x_pos,sizeof( X_POS));
-
接收器
+關注
關注
14文章
2481瀏覽量
72222 -
發射器
+關注
關注
6文章
856瀏覽量
53654 -
nRF24L01
+關注
關注
17文章
331瀏覽量
69661 -
Arduino
+關注
關注
188文章
6477瀏覽量
187841
發布評論請先 登錄
相關推薦
紅外發射器是什么_紅外發射器怎么安裝
CW32模塊使用 NRF24L01無線2.4G模塊
![CW32<b class='flag-5'>模塊</b>使用 <b class='flag-5'>NRF24L01</b>無線2.4G<b class='flag-5'>模塊</b>](https://file1.elecfans.com//web3/M00/06/F9/wKgZPGeRzPWADRgnAAAd2Oxu8cY97.webp)
有人用過USB轉NRF24L01模塊嗎,求指教
nRF24L01P被SI24R1竟然完美兼容替換
無線充電接收器怎么使用
無線充電接收器對手機有損害嗎
TL28L92 3.3V/5V雙通道通用異步接收器/發射器數據表
![TL28<b class='flag-5'>L</b>92 3.3V/5V雙通道通用異步<b class='flag-5'>接收器</b>/<b class='flag-5'>發射器</b>數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
NRF24L01加個if就發送不成功的原因?
nrf24l01+自動應答失敗的原因?
無線通信時代nRF24L01無線模塊的應用與特點
![無線通信時代<b class='flag-5'>nRF24L01</b>無線<b class='flag-5'>模塊</b>的應用與特點](https://file1.elecfans.com/web2/M00/C9/9A/wKgaomYeMWGAVhrkAABK6QQdhrI161.png)
評論