此項(xiàng)目所需的組件如下:
2 Arduino
2 NRF24L01模塊
操縱桿模塊
連接電線
伺服電機(jī)控制如何工作
在變送器側(cè)我們有一個(gè)操縱桿模塊,Arduino和NRF24L01,而在接收端我們有一個(gè)NRF24L01,Arduino和一個(gè)伺服電機(jī)。
當(dāng)我們?cè)谒椒较蛞苿?dòng)操縱桿時(shí),操縱桿模塊將發(fā)送Ardui的模擬值沒有。我們已將NRF24L01模塊設(shè)置為發(fā)射器模式,并將操縱桿移動(dòng)值發(fā)送到特定地址。
在接收端,我們已將NRF24L01模塊設(shè)置為接收模式。我們?cè)诮邮斩私o出了相同的地址,其他NRF24L01模塊正在傳輸數(shù)據(jù)。因此,只要模塊接收數(shù)據(jù),Arduino就會(huì)讀取它并根據(jù)它移動(dòng)伺服電機(jī)。
NRF24L01引腳
此模塊的功耗非常低。它在傳輸過程中消耗大約12mA的功率,甚至低于LED。
該模塊工作在3.3V,所以不要直接連接到5V的Arduino,因?yàn)樗赡軙?huì)損壞。 NRF24L01模塊的其他引腳具有5V容限,因此您可以將它們直接連接到Arduino。
SCK,MOSI和MISO引腳用于SPI通信,CSN和CE引腳用于設(shè)置待機(jī)或激活模式以及設(shè)置發(fā)送或命令模式。
電路圖
連接有點(diǎn)冗長,所以我將分別解釋發(fā)送器和接收器的連接。
對(duì)于發(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
對(duì)于接收器
在接收器端,NRF24L01與Arduino的連接 相同作為發(fā)射器側(cè)的那些。使用Arduino進(jìn)行伺服電機(jī)連接如下:
紅線到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) ;
}
}
}
代碼細(xì)分和解釋
首先,包含庫對(duì)于NRF24L01和伺服電機(jī)。
#include
#include
#include
#include
然后,定義我們連接NRF24L01的CSN和CE引腳的引腳。之后,我們初始化將發(fā)送和接收數(shù)據(jù)的地址。該地址在發(fā)射機(jī)和接收機(jī)側(cè)應(yīng)該相同。該地址可以是任意五個(gè)字母的字符串。
RF24 radio(7,8);//CSN,CE
const字節(jié)地址[6] =“00001”;
在發(fā)送器的設(shè)置功能中,我們?cè)O(shè)置發(fā)送數(shù)據(jù)的地址。然后我們將功率放大范圍設(shè)置為最小,因?yàn)槲覀兊哪K彼此更接近。
radio.openWritingPipe(地址);
radio.setPALevel(RF24_PA_MIN);
對(duì)于接收方,我們使用以下命令并設(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之后,我們將移動(dòng)伺服。
radio.read(& x_pos,sizeof( X_POS));
-
接收器
+關(guān)注
關(guān)注
14文章
2474瀏覽量
72041 -
發(fā)射器
+關(guān)注
關(guān)注
6文章
852瀏覽量
53536 -
nRF24L01
+關(guān)注
關(guān)注
17文章
330瀏覽量
69548 -
Arduino
+關(guān)注
關(guān)注
188文章
6473瀏覽量
187424
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論