如何用Arduinos和NRF24L01模块创建发射器和接收器

电子说

1.3w人已加入

描述

此项目所需的组件如下:

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));

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分