产品选型

基于单片机的遥控开关 用24G模块NRF24L01做一个无线遥控开关,远程控制很方便

小编 2025-07-05 产品选型 23 0

用24G模块NRF24L01做一个无线遥控开关,远程控制很方便

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

如下示意图:

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

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

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

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

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

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

最上面两个排针,左边是电源输入引脚,可输入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,如下图:

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

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

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

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

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

好,看接收端,如下图:

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

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

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

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

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

看到下面这张图片:​

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

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

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

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

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

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

最后看一下演示效果图:

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

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

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

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

单片机小制作,DIY多头灯具分段控制器

为了方便和节能,现在很多家庭都会安装分段控制的吊灯,而且很多都是可遥控的。但是有孩子的家庭会发现,小孩经常顽皮地拿着遥控器切换灯玩,遥控器有时也不翼而飞。这个烦恼其实可以用一个简单的单片机搞定,您在家就可以自行制作。

从灯具中取下原有控制器

把灯具拆下取出控制器(见图3.1)。可以看到,简单的功能用了好多元件,要是用单片机不是简单好多吗?电路只包括整流电路、无线接收模块和继电器驱动电路。无线接收模块输出的信号经过2片74HC40系列的芯片处理后驱动9013控制继电器闭合。

图3.1 从灯具中取下的原有控制器

设计单片机控制器

我想实现的功能是开灯后默认点亮2支灯管,要切换灯管数目时只需要关掉开关又马上打开开关,可以按2、3、4、1支方式切换点亮灯管。这样一来就有两个问题需要解决了:一是开关断开后,电源也切断了,电容上的电荷很快被继电器线圈放完电,单片机无法继续工作;二是单片机如何得知开关被关了。图3.2所示是我设计的电路图,带着上面两个问题,我们分析一下电路。

图3.2 单片机设计电路原理图

单片机选用市场上常见的STC出品的12C2052AD,这款芯片在I/O上完全兼容AT89C2051,芯片功能上更扩展了丰富的功能,如I/O的强上拉、高阻,片内RC振荡及复位电路、片内EEPROM等。为了方便制作,我使用了片内的RC振荡及复位电路,这样一来少使用了复位电路及晶体振荡器。9V交流电压器整流后得到约12V的直流,一部分供给继电器驱动,一部分供给78L05稳压后得到5V供单片机使用。在78L05输出端使用一个4700µF(C2)电解电容。使用如此大容量的目的是,在主电源切断后,C1会被继电器线圈很快地放完电,而C2仍有电荷供单片机使用。VD3、R2、VD4构成一个断电检测电路。电源没有切断时,VD3半波整流后经过R2限流,再由VD4稳压在5.1V左右,电源切断时这里则为0V。使用这个电路的要点是C2的容量要远大于C1,这样才能保证在电源切断后P3.7引脚得到的是一个低电平,同时单片机在断电后一段时间后仍能保持工作。另外,P3.7引脚需要设置为高阻态,如果使用准双向模式就算VD3失电,P3.7仍然是处于高电平状态。单片机输出的控制信号通过内部强上拉后,经过10kΩ的电阻使得三极管B极电流在0.5mA,再经过100倍左右的放大,C级电流可以达到50mA,足以驱动继电器。因为电路安装在灯内,LED可以不要,只用于程序的调试作用。完成的电路实物图见图3.3。

软件编程

软件的编写也极为简单。上电后先设置I/O的上拉和高阻态。因为上电后I/O输出为高,所以在完成设置后把I/O拉低,这样就不会有上电瞬间4支灯管片刻间点亮的问题。程序会不停用P3.7引脚检测电源状态,一但电源失电,P3.7检测到为低电平时,这时会延时防抖,确认为失电后应马上切换到下一个灯管开关状态,灯会在1s后点亮。如果开关关闭时间过长,单片机也会因C2放电完成而终止工作,所有电路停止。所以在使用时,开关关闭再打开的时间间隔大约为1s,也就是开关关闭后马上又要打开,只有这样这电路才能正常进行切换。

图3.3 完成的电路实物图

组装

我们从图3.3所示的电路可以看到,它是直接在灯具原配的电路板上修改的,拆除无线接收及其他部分的电路,只保留继电器、继电器驱动电路、电源部分及接口,这样根本不修改原灯具便可以方便地按原路安装新的功能。此项制作要求制作者十分熟悉市电,安装时也一定要先切断电源。图3.4所示是点亮2支灯管的情形。使用学习到的电子知识来方便自己的生活,确实十分有意义。

图3.4 安装后的点亮效果

相关问答

如何用 单片机 制作 遥控 器控制 单片机 ?

电视机遥控器,编码是固定的,空调遥控器编码是不固定的,如设置温度的编码是根据温度的变化编码是不同的,当然你可以测试空调遥控器不同状态的编码来设置单片机...

单片机的遥控 器怎么用?

单片机遥控器是一种无线遥控器,可以通过编程和电路设计控制物品的运动或操作。首先需要将遥控器和被控制的设备连接,然后在单片机控制板上编写程序,将遥控器...

单片机 ,学习型 遥控器 ,只要求学习某一款空调的 开关 即可,做好...

学习型的遥控器必须要有一个学习的过程,就是首先你得知道你的空调的遥控信号是什么,然后给这个信号给遥控器,告诉他这个信号是干什么的,所以当它记忆住了这个信...

led灯的 遥控开关 是通用的吗?

关于这个问题,通常情况下,不同品牌的LED灯的遥控开关是不通用的,因为不同品牌的LED灯遥控开关频率不同,信号编码方式不同,因此不能互相兼容。同时,即使是同...

51 单片机 红外 遥控 最简单编程法?

红外遥控最简单的编程法是使用51单片机的定时器功能和外部中断功能来实现红外接收和解码。首先需要配置定时器和外部中断的相关寄存器,然后编写中断服务程序来...

单片机 如何能解码红外 遥控 器上的按键码?

单片机红外遥控器编码一般由引导码+地址码(16位)+命令码(16位)组成,在普通的遥控器上所有的按键只是命令码不同,地址码是不变的单片机红外遥控器编码一般由引...

单片机 拓扑结构是什么

[最佳回答]问题一:什么叫总线型单片机和非总线型单片机总线型,是局域网所有的pc都在一条线上,但是不能同时收发数据,非总线型的有星型等等!问题二:什么是集成...

51 单片机 和红外 遥控 是怎么连接的?

红外传感器和单片机之间的连接方法:1、红外传感器绝大部分都是通过测引脚电压换算成距离。所以一般红外都有三根引脚,VCC和GND肯定会接噻,然后信号线接到你开...

电源 开关 控制器多少钱

不同品牌、质量,会有不同价格,可以去万能的淘宝逛逛。清风QF-E5便携定时插座定时计时开关电源插座机械式时间控制器35元一个淘宝有卖,家用的带插座30元左右...

51 单片机 红外 遥控 和按键怎么联动?

要实现51单片机红外遥控和按键的联动,可以按照以下步骤进行:1.硬件连接:将红外接收器(红外接收头)连接到51单片机的合适引脚,并将按键连接到单片机的其他...

猜你喜欢