无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关

大家好,我是阿乐,今天教大家做一个无线遥控开关。

如下示意图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(1)

我想要实现的功能是,遥控端输出一个高电平或者低电平,接收端也能同时输出一个高电平或者低电平,这样就能隔空控制很多东西,也不用拉线布线。

手头正好有2.4G模块,型号是NRF24L01,那我们就用它来实现。这个模块也不算贵,如下图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(2)

这种外接胶棒天线带PA放大的也就十块钱左右,号称距离可达1100米,当然实际我也没去试过。

然后更常见更便宜的是板载天线的,体积也更小,价格也就四五块钱,非常值得入手玩玩。实物如下图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(3)

今天我以这个外接胶棒天线带PA放大的NRF24L01作为例子来给大家讲解。先来讲讲它的引脚,把它反过来,令光滑没有元器件的一面对着我们,这面就是背面,它的正面有密密麻麻的小小个的元器件。示意图如下:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(4)

将模块翻过来,看到它的背面,它有两排排针,如下图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(5)

最上面两个排针,左边是电源输入引脚,可输入3V-3.6V的直流电,推荐是用3.3V。过来右边是电源地,GND,是电源负极。下来第二排两个排针,左边是CSN,右边是CE。下来第三排两个排针,左边MOSI,右边是SCK。最后一排两个排针,左边是IRQ,右边是MISO。

接下来给大家解释一下这些引脚对应的功能:

CSN,它是Chip Select Not的缩写,是接收端选择引脚, Not代表低电平有效。

CE是Chip Enable的缩写,是发射/接收状态选择引脚。

MOSI是Master Out Slave In的缩写,主出从入,是控制端输出,接收端输入引脚,通常简写成MO。

SCK是Serial Clock的缩写,是时钟信号脚。

IRQ是Interrupt Request的缩写,是中断请求脚,今天我们不会用到这个脚。

MISO是Master In Slave Out的缩写,主入从出,是控制端输入,接收端输出引脚,通常简写成MI。

单独的这个NRF24L01模块自己还不能完成通讯去收发数据,我们需要一个单片机通过编程给它设置,一个当做发射端,另一个当做接收端,这样才能用来一对一通讯收发数据。当然它也可以用来设置一对多通讯。

这样子的话我们就会需要两个NRF24L01模块,两个单片机。单片机我用Arduino pro mini,如下图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(6)

上图中的这个小东西,它相当于一个小开发板,用它来控制设置NRF24L01模块,别人已经写有很多库了,我直接调用就可以,就不用去底层设置寄存器,不用什么都亲历亲为,可以省下很多时间,这对于初学者来说很容易上手,可以快速开发,这个就是用Arduino的好处。一会儿我们直接用别人写好的库,直接修改例程就得了。

好,看硬件连接,我简单画了个接线图,如下图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(7)

Arduino和NRF24L01模块的连线,无论发射端还是接收端都是这样连。

看到下面发射端的接线图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(8)

在发射端我增加了一个按键,当按键没按下时,Arduino的D3号脚检测到的是低电平,因为直接接一个10K电阻到负极了嘛,所以是0。当按键按下时,接通5V的直流电到D3号端口,D3号端口又对地接一个10K电阻,所以在端口这里得到的是高电平,是1。

好,看接收端,如下图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(9)

我在接收端的Arduino D3号脚接了一个4.7K欧姆的电阻和8550三极管,用来驱动蜂鸣器。当我们从D3给一个低电平的时候,蜂鸣器就会响起来,蜂鸣器负极的100Ω的电阻是限流电阻。

接下来讲一下编程思路:当发射端检测到我按下这个按键时,也就是检测到一个高电平时,就把这个高电平的数据发送到接收端,接收端接收到这个高电平的数据后就输出一个低电平,驱动蜂鸣器响起来,否则输出一个高电平,蜂鸣器不响。在这里不详细讲2.4G模块的具体设置方式,我只讲整体程序的实现过程。

在开始编程前我们需要下载一个库,就是别人编好的函数与例程,到时候方便我们直接调用。这个库可以自己到github去下载,也可以私聊我要,库名称是RF24-master,下好后把它丢到我们安装Arduino这个软件的根目录下的libraries文件夹中就可以了。

好,看程序,下图是发射端的程序:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(10)

红色方框1中#include是我们要引用的程序库,把它们包含进来。红色横线2是定义Arduino3号引脚把它命名为buttonPin,后面当出现buttonPin的地方说明是要控制3号引脚。往下,红色横线3是定义一个整型变量buttonState,用来存放按键的键值。

看到下面这张图片:​

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(11)

红色横线1的语句是把7脚设置为CE脚, 8脚设置为CSN脚。红色横线2是设置通讯通道地址00001,接下来红色方框中的是初始化函数,先设置3脚为输入引脚,启动nRF24模组,设定通道地址。在这里多说几句,nRF24L01模块在2.4GHz~2.525GHz这个频带上,在这个频带上划分了0-125個频道,我们通过程序可以自由设定使用的频道,只要发射端和接收端所处的频道相同就可以了。然后每个频道内可容纳6个通道(pipe),每个通道可对应一个发射器;一个接收器可接收来自6个发射器的讯号。一个频道内,至少要有一个发射器和一个接收器,才能连线通讯。发射器可以位于0-5任一通道,并且指定一个唯一的地址值。接下来是设定广播功率,设置功率为RF24_PA_MIN,然后停止侦听,就是设定成发射模式。

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(12)

如上截图,在循环函数中,读取3号脚的状态,使用radio.write()函数将数据发送出去。发射端的完整程序就是这样,内容并不多。验证一下,没问题后选好板子的对应型号,选端口,上传就完成发射端的程序写入。

接下来讲讲接收端的程序,如下图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(13)

前面的设置基本是一样的,不同的是接收端定义3号脚是用来控制蜂鸣器,同样也定义一个整型变量buttonState,用来存放收到的按键的键值。这里设置引脚和通道地址跟前面一样的,发射端和接收端必须处于同一地址。

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(14)

如上截图,在初始化函数中,将3脚设置为输出引脚,将3脚置为高电平,启动NRF24模组,设定通道地址,设定广播功率。

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(15)

如上截图,在循环函数中,开始监听无线广播,检查是否有可用的数据传输过来,当有数据可用时,我们将读取它,将其保存到buttonState中去,if函数判断,如果发射端按下按键了,则输出低电平,驱动蜂鸣器响起;否则,如果发射端没有按下按键,则保持高电平,蜂鸣器不响。这就是接收端的整个程序,也验证一下,没问题后选好板子的对应型号,选端口,上传就完成了。

最后看一下演示效果图:

无线遥控接收模块距离测试 用2.4G模块NRF24L01做一个无线遥控开关(16)

在室内测试,信号传输稳定,通讯效果很好;在室外休闲公园里测试,以发射端为圆心,在大概800米空旷(有一些树和景观石的遮挡)的半径内,信号传输依旧稳定,通讯效果也很好,更远的距离没去测试过。

详细视频教程请移步到我的头条主页观看。

好的,我制作这个无线传输开关的作用可不是为了遥控这个蜂鸣器而已,我是想把语音识别模块和这个结合起来,对家里的家电进行远程无线遥控,这样我们离智能生活岂不是又更近了一步?

好啦,本期教程就讲这么多,我们下期再见,拜拜!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页