在此帖子中,我们将根据ISM(工业,科学和医疗)频段构建一个10通道遥控器。
介绍
的ISM波段工作在2.4 GHz,无需授权即可使用,功率输出合理。
建议的项目是通用的ON/OFF无线开关,可以用来打开/关闭灯,风扇,家电到家庭自动化,如果有足够的信心带来硬件或软件的改变,这个项目。
该项目分为两部分:遥控器和接收器。
遥控器:
遥控器由10个按钮组成,用于控制接收器上的10个独立继电器。遥控器由9V电池操作,便于携带。
项目项目的核心是2.4 GHz收发器模块NRF24L01,它可以在可能的两个Arduinos之间进行通信。
远程运动一个确认LED。
当我们每次按遥控器上的按钮时,确认LED会瞬间亮起,只有当发送的信号被接收器接收到,然后接收器向遥控器发送反馈信号来触发LED。
此过程将确保遥控器的开/关命令达到目的地的目的地。
在遥控器的电路中提供了一个ON/OFF开关,以防止闲置时多余的能量损失。
建议使用Arduino Nano或Arduino Pro-mini来构建遥控器,因为它的体积更小,便于携带。
线路图:

以上是遥控器的完整电路图。NRF24L01的引脚连接图也在原理图中给出。
当你完成的时候,关掉遥控器。
请在这里下载图书馆文件:github.com/nRF24/RF24.git
远程程序:
//----- r.g riish开发的程序----//
#include
# include < SPI.h >
RF24电台(9、10);
Const byte address[][6] = {"00001", "00002"};
Const int ip1 = 2;
Const int ip2 = 3;
const int ip3 = 4;
Const int ip4 = 5;
Const int ip5 = 6;
Const int ip6 = 7;
Const int ip7 = 8;
const int ip8 = A0;
const int ip9 = A1;
const int ip10 = A2;
const int buzzer = A3;
Char buzzchar[32] = "";
Const char constbuzzer[32] = "buzz";
Const char button1[32] = "activate_1";
const char button2 [32] =“Activate_2”;
Const char button3[32] = "activate_3";
const char button4 [32] =“Activate_4”;
Const char button5[32] = "activate_5";
Const char button6[32] = "activate_6";
Const char button7[32] = "activate_7";
Const char button8[32] = "activate_8";
Const char button9[32] = "activate_9";
Const char button10[32] = "activate_10";
无效的设置()
{
PINMODE(IP1,输入);
pinMode (ip2、输入);
pinMode (ip3、输入);
pinMode (ip4、输入);
pinMode (ip5、输入);
pinMode (ip6、输入);
PinMode(IP7,输入);
pinMode (ip8、输入);
pinMode (ip9、输入);
pinMode (ip10、输入);
pinMode(蜂鸣器、输出);
digitalWrite (ip1、高);
digitalWrite (ip2、高);
digitalWrite (ip3、高);
DigitalWrite(IP4,高);
DigitalWrite(IP5,高);
digitalWrite (ip6、高);
digitalWrite (ip7、高);
digitalWrite (ip8、高);
digitalWrite (ip9、高);
digitalWrite (ip10、高);
radio.begin ();
radio.openwritingPipe(地址[1]);
收音机。openReadingPipe(1、地址[0]);
radio.setChannel (100);
radio.setDataRate (RF24_250KBPS);
radio.setPALevel (RF24_PA_MAX);
radio.stopListening ();
}
无效循环()
{
if(DigitalRead(IP1)==低)
{
收音机。写(button1 sizeof (button1));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip2) = =低)
{
Radio.Write(&button2,sizeof(button2));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip3) = =低)
{
收音机。写(&button3 sizeof (button3));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip4) = =低)
{
收音机。写(&button4 sizeof (button4));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip5) = =低)
{
Radio.Write(&Button5,SizeFof(Button5));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip6) = =低)
{
收音机。写(&button6 sizeof (button6));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
if(DigitalRead(IP7)==低)
{
Radio.Write(&button7,sizeof(button7));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip8) = =低)
{
收音机。写(&button8 sizeof (button8));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip9) = =低)
{
收音机。写(&button9 sizeof (button9));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
如果(digitalRead (ip10) = =低)
{
收音机。写(&button10 sizeof (button10));
radio.startListening ();
而(! radio.available ());
收音机。读(&buzzchar sizeof (buzzchar));
如果(strcmp (buzzchar constbuzzer) = = 0)
{
DigitalWrite(蜂鸣器,高);
延迟(500);
digitalWrite(蜂鸣器、低);
}
radio.stopListening ();
}
}
//----- r.g riish开发的程序----//
这就是遥控器电路。
收件人:
接收器电路由Arduino组成,可以是您的选择,330欧姆,10个晶体管和10继电器的10个电流限制电阻形成输出级。
Arduino的10个输出引脚每一个都通过电阻和晶体管连接到10个继电器。
请确保您的电源能够提供至少1A的电流,这是在瞬间操作多个继电器所必需的。
2.4 GHz收发模块NRF24L01提供远程通信。
线路图:

如果你对Arduino和NRF24L01模块之间的接线图有疑惑,请看原理图旁边的表格,遥控器电路也是一样的。
输出顺序和输出引脚如下:
Arduino PIN -输出序列
引脚2 -输出1
引脚3 -输出2
引脚4 -输出3
PIN 5 - 输出4
引脚6 -输出5
引脚7 -输出6
引脚8 -输出7
引脚a0 -输出
引脚a1 -输出9
引脚a2 -输出10
输出级:
为了简化图表,只显示了两个输出阶段的输出。如果你使用了所有10个通道,你必须将它扩展到10个。
接收方案:
//----- r.g riish开发的程序----//
#include
# include < SPI.h >
RF24电台(9、10);
Const byte address[][6] = {"00001", "00002"};
Const int op1 = 2;
Const int op2 = 3;
const int op3 = 4;
Const int op4 = 5;
Const int op5 = 6;
Const int OP6 = 7;
Const int op7 = 8;
const int op8 = A0;
const int op9 = A1;
const int op10 = a2;
Const char buzzer[32] = "buzz";
Char buttonstate[32] = "";
Const char button1[32] = "activate_1";
const char button2 [32] =“Activate_2”;
Const char button3[32] = "activate_3";
const char button4 [32] =“Activate_4”;
Const char button5[32] = "activate_5";
Const char button6[32] = "activate_6";
Const char button7[32] = "activate_7";
Const char button8[32] = "activate_8";
Const char button9[32] = "activate_9";
Const char button10[32] = "activate_10";
Boolean Status1 = false;
Boolean status2 = false;
Boolean status3 = false;
Boolean status4 = false;
Boolean status5 = false;
Boolean status6 = false;
Boolean Status7 = false;
Boolean status8 = false;
Boolean status9 = false;
Boolean status10 = false;
无效的设置()
{
Serial.begin (9600);
pinMode(凤凰社第一章、输出);
PinMode(OP2,输出);
PinMode(OP3,输出);
pinMode (op4、输出);
pinMode (op5、输出);
《凤凰社》第六章pinMode(输出);
pinMode (op7、输出);
PinMode(OP8,输出);
pinMode (op9、输出);
pinMode (op10、输出);
radio.begin ();
radio.openreadingpipe(1,地址[1]);
radio.openWritingPipe(地址[0]);
radio.setChannel (100);
radio.setDataRate (RF24_250KBPS);
radio.setPALevel (RF24_PA_MAX);
radio.startListening ();
}
无效循环()
{
而(! radio.available ());
radio.read(&buttonstate,sizeof(buttonstate));
以buttonstate);
If ((strcmp(buttonstate,button1) == 0) && status1 == false
{
digitalWrite(凤凰社第一章、高);
status1 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
否则if((strcmp(buttonstate,button1)== 0)&& status1 == true)
{
digitalWrite(凤凰社第一章、低);
status1 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button2) == 0) && status2 == false)
{
DigitalWrite(OP2,高);
status2 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button2) == 0) && status2 == true)
{
digitalWrite(《凤凰社》第2章、低);
status2 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button3) == 0) && status3 == false)
{
digitalWrite (op3、高);
status3 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button3) == 0) && status3 == true)
{
digitalWrite (op3、低);
status3 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button4) == 0) && status4 == false)
{
DigitalWrite(OP4,高);
status4 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button4) == 0) && status4 == true)
{
DigitalWrite(OP4,低);
status4 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
否则if((strcmp(buttonstate,button5)== 0)&& status5 == false)
{
digitalWrite (op5、高);
status5 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button5) == 0) && status5 == true)
{
DigitalWrite(OP5,低);
status5 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button6) == 0) && status6 == false)
{
《凤凰社》第六章digitalWrite(高);
status6 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
否则if((strcmp(buttrstate,button6)== 0)&& status6 == true)
{
《凤凰社》第六章digitalWrite(低);
status6 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button7) == 0) && status7 == false)
{
digitalWrite (op7、高);
status7 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button7) == 0) && status7 == true)
{
digitalWrite (op7、低);
status7 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
否则if((strcmp(buttrstate,button8)== 0)&& status8 == false)
{
DigitalWrite(OP8,高);
status8 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button8) == 0) && status8 == true)
{
digitalWrite (op8、低);
status8 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button9) == 0) && status9 == false)
{
digitalWrite (op9、高);
status9 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button9) == 0) && status9 == true)
{
DigitalWrite(OP9,低);
status9 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button10) == 0) && status10 == false)
{
digitalWrite (op10、高);
status10 = true;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
Else if((strcmp(buttonstate,button10) == 0) && status10 == true)
{
digitalWrite (op10、低);
status10 = false;
radio.stopListening ();
for(int i = 0; i <10; i ++)
{
收音机。写(蜂鸣器,sizeof(蜂鸣器));
延迟(10);
}
radio.startListening ();
}
}
//----- r.g riish开发的程序----//
收信人就到这里。
理论射程100米;实际上,它可以在30米或以上工作,它可能会因遥控器和接收器之间的固体障碍而有所不同。
该项目如何运作:
•先打开Receiver,然后是Remote。
•一次按下远程中的任何按钮。
•如果按下第一个按钮,则相应的输出被触发即I.输出1打开。如果再次在遥控器上按相同的按钮,它将在接收器处关闭输出1。
•它适用于所有按钮和10个输出。
•使用后请关闭遥控器。
如果您对以上讨论的2.4 GHz 10频道遥控开关有任何进一步的问题,请在评论部分表达。
是否可以将LED放置在遥控器上的每个12个按钮上,以便通过遥控器上的LED监视接收器端的发生时发生的情况例如,当所有LED都关闭时,接收器上的所有设备都已关闭。当发射器上的LED接通时,接收器上的相应设备将打开。如果没有从电池中排出大量电力的情况下就如何实现。
嗨丹尼,
这是不可能的,我们没有10个GPIO引脚来做到这一点,这将肯定会耗尽电池。如果我们使用Arduino Mega,我们有很多针脚,但我们不能携带遥控器。
问候
这是一件了不起的作品。祝你好运。
亲爱的GR,我希望分别在四个单独的位置上运行很少的渠道。什么是可以在TX&Rx上运行的最大通道数分别在TX&Rx上进行末端。如果我们使用Arduino Mega 2560对于TX&Rx的Arduino Mega 2560可以运行,用于增加各种TX模块的RX&Arduino UNO上的通道或Mega的数量。
你好
为什么每次都需要重置Arduino Nano ?
启动远程控制器后
它将工作。
你好汤姆,
你不需要重置远程。
我想你指的是遥控器的关闭开关。用完后必须关掉。
问候
嗨GR
为什么每次我开始使用遥控器的时候它都不工作。
每次开机我都要按下Arduino Nano板上的复位按钮。
什么导致了它
嗨,汤姆,
这是不寻常的,我从未面临过这样的问题,尝试改变Arduino Nano Board,让我们知道。
问候
嗨GR
在视频中,蓝色按钮是重置按钮。
你会发现第一次启动时,它是正常的。
但当关闭Arduino板电源时。
然后再次向Arduino板电源。
可以看到Arduino板无法运行。
我必须在Arduino面板上按一下重置键。
Arduino Board将恢复正常运行。
我测试了Arduino Uno板和Arduino Nano板。
测试视频
https://www.youtube.com/watch?v=6d5ymqarpc.
嗨,汤姆,
我理解你的问题。尝试使用Arduino Nano作为远程,Arduino UNO作为接收器,如果问题仍然存在,请再次告诉我们。
问候
嗨GR
我按照你的建议进行了测试。
结果是一样的。
测试视频2
https://www.youtube.com/watch?v=l4Ehsg2znxc&feature=youtu.be
嗨,汤姆,
这确实是一个奇怪的问题,因为当你切断电源时,这是一个硬复位,相当于按下复位按钮,我在制作原型时从未遇到过这样的问题。
我会看一下问题然后回复你,但需要一些时间。
但这不是一个理想的断路器,可以继续在遥控器上继续重置按钮并继续工作。谢谢你让我们知道你的问题。
问候。
嗨,汤姆,
从视频中,我可以看到电阻器连接到遥控器的按钮上。为什么它们是相连的?电路图中没有显示的
你应该去掉那些电阻,按钮应该直接连接到GND。
问候
嗨GR
我按照你的建议进行了测试。
我把电阻拿出来了。
测试是相同的。
你好GR,
你通过发布非常好的项目来做得很好。如何使同一项目的瞬间设备上的手段
推进到ON行动?
嗨,Pranav,
谢谢,很高兴你喜欢这个项目。
我们可以继续进行您的要求,但您必须为您支付定制项目文章,如上面的价格,或者您可以通过您的定制购买来自我们的Arduino套件。
如果你感兴趣,请回复我们。
问候
我要付多少钱?
嗨,Pranav,
你有两种选择,你可以从我们这里购买你定制的套件,价格为3500到4000卢比。
(或者)
对于定制的文章,项目解释是每字1卢比,一行代码10卢比。
如果你有兴趣评论你的全部要求清楚,我们将很快进行。
问候
你好先生
你正在为这个网站做好工作。我想将GSM模块添加到此电路。怎么可能是可能的?您已经完成了此类项目。请在您的论坛中分享电子机智派的信息。谢谢您的支持。
谢谢你Karthick,很高兴你喜欢我的网站,但是我很抱歉,上面的文章是从外部作者获得的,所以我现在可能无法更新新的修改。
亲爱的先生. .我已经与上述代码。。这是完美的工作. .但我需要一些修改…如果我按下按钮,继电器就会启动,如果我再次按下相同的按钮,继电器就会关闭。我需要这个…当我按下按钮时,继电器将启动,当我松开按钮时,继电器将关闭。如何修改代码以获得此结果。请帮我. .