此項目所需的組件如下:
2 Arduino
2 NRF24L01模塊
操縱桿模塊
連接電線
伺服電機控制如何工作
在變送器側(cè)我們有一個操縱桿模塊,Arduino和NRF24L01,而在接收端我們有一個NRF24L01,Arduino和一個伺服電機。
當我們在水平方向移動操縱桿時,操縱桿模塊將發(fā)送Ardui的模擬值沒有。我們已將NRF24L01模塊設(shè)置為發(fā)射器模式,并將操縱桿移動值發(fā)送到特定地址。
在接收端,我們已將NRF24L01模塊設(shè)置為接收模式。我們在接收端給出了相同的地址,其他NRF24L01模塊正在傳輸數(shù)據(jù)。因此,只要模塊接收數(shù)據(jù),Arduino就會讀取它并根據(jù)它移動伺服電機。
NRF24L01引腳
此模塊的功耗非常低。它在傳輸過程中消耗大約12mA的功率,甚至低于LED。
該模塊工作在3.3V,所以不要直接連接到5V的Arduino,因為它可能會損壞。 NRF24L01模塊的其他引腳具有5V容限,因此您可以將它們直接連接到Arduino。
SCK,MOSI和MISO引腳用于SPI通信,CSN和CE引腳用于設(shè)置待機或激活模式以及設(shè)置發(fā)送或命令模式。
電路圖
連接有點冗長,所以我將分別解釋發(fā)送器和接收器的連接。
對于發(fā)射器
使用Arduino建立發(fā)射器側(cè)的連接,如下所示:
將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的連接 相同作為發(fā)射器側(cè)的那些。使用Arduino進行伺服電機連接如下:
紅線到Arduino的5V電源
Arduino的GND到布線》
黃色電線到Arduino的第6針
代碼發(fā)射器
#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引腳的引腳。之后,我們初始化將發(fā)送和接收數(shù)據(jù)的地址。該地址在發(fā)射機和接收機側(cè)應該相同。該地址可以是任意五個字母的字符串。
RF24 radio(7,8);//CSN,CE
const字節(jié)地址[6] =“00001”;
在發(fā)送器的設(shè)置功能中,我們設(shè)置發(fā)送數(shù)據(jù)的地址。然后我們將功率放大范圍設(shè)置為最小,因為我們的模塊彼此更接近。
radio.openWritingPipe(地址);
radio.setPALevel(RF24_PA_MIN);
對于接收方,我們使用以下命令并設(shè)置模塊以從該地址接收數(shù)據(jù)。
radio.openReadingPipe(0,address);
In發(fā)送器的循環(huán)功能,我們從操縱桿模塊讀取并在我們之前設(shè)置的地址發(fā)送值。
radio.write(& x_pos,sizeof(x_pos));
接收器側(cè)的以下命令將從發(fā)送器獲取數(shù)據(jù),并且在將數(shù)據(jù)映射到0-180之后,我們將移動伺服。
radio.read(& x_pos,sizeof( X_POS));
-
接收器
+關(guān)注
關(guān)注
14文章
2483瀏覽量
72350 -
發(fā)射器
+關(guān)注
關(guān)注
6文章
858瀏覽量
53721 -
nRF24L01
+關(guān)注
關(guān)注
17文章
331瀏覽量
69725 -
Arduino
+關(guān)注
關(guān)注
188文章
6478瀏覽量
188195
發(fā)布評論請先 登錄
相關(guān)推薦
紅外發(fā)射器是什么_紅外發(fā)射器怎么安裝
CW32模塊使用 NRF24L01無線2.4G模塊

有人用過USB轉(zhuǎn)NRF24L01模塊嗎,求指教
nRF24L01P被SI24R1竟然完美兼容替換
TMS320DM6467支持HDMI發(fā)射器/接收器

對射光電怎樣區(qū)分發(fā)射接收
無線充電接收器怎么使用
無線充電接收器對手機有損害嗎
如何將ESP8266-01模塊用作物理層設(shè)備?
TL28L92 3.3V/5V雙通道通用異步接收器/發(fā)射器數(shù)據(jù)表

NRF24L01加個if就發(fā)送不成功的原因?
nrf24l01+自動應答失敗的原因?
無線通信時代nRF24L01無線模塊的應用與特點

評論