电子说
此项目所需的组件如下:
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));
全部0条评论
快来发表一下你的评论吧 !