风筝
发表于: 2019-1-28 17:18:38 | 显示全部楼层

基于Arduino和NRF24L01模块制作发射器和接收器,实现使用操纵杆控制伺服电机!


在本篇文章中,我们主要介绍如何使用NRF24L01和Arduino控制伺服电机。我们在发送端移动操纵杆,使用NRF24L01,将操纵杆移动的值发送到接收侧,然后在接收侧接收该值,使用此值移动伺服电机。


必需的组件

●    Arduino开发板

●    NRF24L01模块

●    操纵杆模块

●    伺服电机

●    连接导线

Required components for this project..jpeg


伺服电机控制如何工作

在发送侧,我们有一个操纵杆模块、Arduino和NRF24L01,而在接收侧,我们有一个NRF24L01、Arduino和一个伺服电机。


当我们在水平方向上移动操纵杆时,操纵杆模块将向Arduino发送模拟值。我们已将NRF24L01模块设置为发送模式,并将操纵杆移动值发送到特定地址。


在接收侧,将NRF24L01模块设置为接收模式。我们在接收端给出了相同的地址,其他NRF24L01模块正在传输数据。因此,只要模块接收到数据,Arduino就会读取数据并根据它移动伺服电机。

transmitting.png


NRF24L01引脚说明

该模块的功耗非常低。它在传输过程中消耗大约12mA的功率,甚至低于LED。


该模块工作在3.3V,因此不要将其直接连接到5V的Arduino,因为它可能会损坏。 NRF24L01模块的其他引脚具有5V容限,因此您可以将它们直接连接到Arduino。


SCK、MOSI和MISO引脚用于SPI通信,CSN和CE引脚用于设置待机或活动模式以及设置发送或命令模式。

NRF24L01 Pinout.png


电路原理图

连接有点冗长,因此我将分别介绍发送器和接收器的连接。


在发送器侧,NRF24L01与Arduino的连接如下:

●    将NRF24L01的3.3V引脚与Arduino的3.3V连接

●    将NRF24L01的GND引脚与Arduino的GND连接

●    将NRF24L01的CSN引脚与Arduino的引脚8连接

●    将NRF24L01的CE引脚与Arduino的引脚7连接

●    将NRF24L01的SCK引脚与Arduino的引脚13连接

●    将NRF24L01的MOSI引脚与Arduino的引脚11连接

●    将NRF24L01的MISO引脚与Arduino的引脚12连接

然后将操纵杆模块与Arduino连接如下:

●    操纵杆模块的VCC到Arduino的5V

●    操纵杆模块的GND到Arduino的GND

●    操纵杆模块的VER到Arduino的A1

●    操纵杆模块的HOR到Arduino的A0


在接收器侧,NRF24L01与Arduino的连接与发送器侧的连接相同。使用Arduino连接伺服电机如下:

●    红线到Arduino的5V

●    棕色线到Arduino的GND

●    黄色线到Arduino的引脚6

For the Receiver.png


代码介绍

首先,包括NRF24L01和伺服电机的库

  1. #include <SPI.h>
  2. #include <nRF24L01.h>
  3. #include <RF24.h>
  4. #include <Servo.h>
复制代码

然后,定义我们连接NRF24L01的CSN和CE引脚的引脚。之后,我们初始化将发送和接收数据的地址。该地址在发射机和接收机侧应该相同。该地址可以是任何五个字母的字符串。

  1. RF24 radio(7, 8); // CSN, CE
  2. const byte address[6] = "00001";
复制代码

在发送器的setup()函数中,我们设置了发送数据的地址。然后将功率放大范围设置为最小,因为模块彼此很接近。

  1. radio.openWritingPipe(address);
  2. radio.setPALevel(RF24_PA_MIN);
复制代码

在接收器侧,我们使用以下命令并设置模块以从该地址接收数据。

  1. radio.openReadingPipe(0, address);
复制代码

在发送器的loop()函数中,我们从操纵杆模块读取并在我们之前设置的地址发送值。

  1. radio.write(&x_pos, sizeof(x_pos));
复制代码

接收器侧的以下命令将从发送器获取数据,并且在将数据映射到0-180之后,我们将移动伺服电机。

  1. radio.read(&x_pos, sizeof(x_pos));
复制代码

发送器和接收器的完整代码如下所示: receiver.rar (447 Bytes, 下载次数: 275)

transmitter.rar (399 Bytes, 下载次数: 242)

跳转到指定楼层
wzh2007
发表于: 2019-7-5 08:58:30 | 显示全部楼层

硬件问题,这种便宜的据说要接10UF的电容,我也是买了3种,最后用了带天线的才成功,而且用的RF24的库才行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-24 10:47 , Processed in 0.053398 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表