我们生活在5G和支持5G的设备时代。但是,在需要远程,短距离,廉价和低成本通信的情况下,诸如对讲机系统和RF通信系统之类的旧技术仍然是最重要的。例如,如果您有建筑公司或重型轴承建筑公司,则您的工人需要相互沟通以进行协调工作。在对讲机的帮助下,他们可以相互交流并通过按“ PTT”按钮传播简短的按摩或指示,以向其他工人传送声音,让他们听和听。另一个应用可能是在智能头盔中为了在长途行驶中在一群骑手之间进行交流,这里建议的模型可以一次在六个人之间进行交流。如果要查看其他类型的短距离无线音频传输项目,请使用链接访问基于IR的无线音频传输器和Li-Fi音频传输器项目。
使用nRF24L01射频模块的对讲机
该项目的主要组件是NRF24L01 RF模块和Arduino Uno,后者是大脑或处理器。我们已经学习了如何通过远程控制伺服电机来将Nrf24L01与Arduino接口。对于该项目,选择NRF24L01 RF模块是因为它比数字通信介质具有多个优势。它具有2.4 GHz高频ISM频段,数据速率可以为250kbps,1Mbps,2 Mbps。它在1Mhz间隔之间有125个可能的信道,因此该模块可以使用125个不同的信道,这使得在一个地方拥有125个独立工作的调制解调器网络成为可能。
最重要的是,NRF24L01信号不会与警察对讲机和铁路对讲机等其他对讲机系统重叠或交叉接口,并且不会干扰其他对讲机。单个nrf24l01模块可以在其他6个nrf24l01模块处于接收状态时与它们进行通信。而且,它是一个低功耗模块,这是一个额外的优势。 NRF24L01模块有两种类型,可广泛使用且常用,一种是NRF24L01 +,另一种是带有内置天线的NRF24L01 + PA + LNA(如下所示)。
该 NRF24L01 +具有板载天线和仅100米范围内。仅适用于室内使用,不适用于室外长途通信。此外,如果在发射器和接收器之间存在隔离墙,则信号传输非常差。带有外部天线的 NRF24L01 + PA + LNA具有一个 PA,可以在传输之前增强信号的功率。 LNA代表低噪声放大器。显然,可以滤除噪声并增强从天线接收到的信号的极弱和不确定的低电平。它有助于产生有用的信号电平,并具有 2dB的外部天线,通过它可以 传输1000米的空中覆盖范围, 因此非常适合我们的户外对讲机通信项目。
基于Arduino的Walkie Talkie所需的组件
- NRF24L01 + PA + LNA带有外部2DB天线(2个)
- Arduino UNO或任何版本的Arduino
- 音频放大器(2个)
- 麦克风电路:您可以自己制作(稍后讨论)或购买声音传感器模块。
- DC至DC升压升压模块(2个)
- 3.3V AMS1117稳压器模块
- 电源指示灯LED(2个)
- 470欧姆电阻(2个)
- 4英寸扬声器(2个)
- 按钮(用于PTT按钮)
- 用于制作PTT按钮的104 PF(2个)
- 用于NRF24L01的100 NF电容器(2个)
- PTT按钮1k电阻(2个)
- 2套锂离子电池
- 锂离子电池充电和电池保护模块(2个)
- 一些跳线,公头针,点缀Vero板
Arduino Walkie Talkie电路图
下图显示了Arduino Walkie Talkie的完整电路图。电路图显示了所有连接,包括PTT按钮,麦克风电路和立体声音频输出。
重要信息: NRF24L01模块的电压输入范围为1.9v至最大3.6伏,为了获得电压和电流稳定性,您必须在+ VCC和-GND中使用100nf电容器,而nrf24l01模块的其他引脚可以承受5伏信号水平。
步骤1:我开始制作自制的定制PCB和Arduino Atmega328p板。我已经将IC Atmega328p放在编程器上并对其进行了刷新,然后上传了代码。然后,我在(PB6,PB7)引脚9和10的Atmega328p IC上添加了16 MHz晶振。下面显示了我定制的PCB和带有已编程IC的组装板的图片。
步骤2:按照电路图所示的顺序连接NRF24L01模块。CE到数字引脚7,CSN到引脚8,SCK到数字引脚13,MOSI到数字引脚11,MISO到数字引脚12,IRQ到数字引脚2。
对于电源,您需要先将电压从5伏降至3.3v,同时保持良好的电流稳定性。另外,您还必须在nrf24l01模块的VCC和接地上放置一个100nF电容器。因此,我使用 了3.3伏电压调节器AMS1117,该模块还可以减小您的项目规模并使它紧凑。
如果您想自己制作此稳压器板,则只能购买3.3伏稳压器IC,并且可以通过添加一些电容,输入和输出电阻来制造它,因为这对RF模块非常重要,因为它是一个敏感的设备。或者,您可以像在面包板电源项目中一样使用LM317可变电压调节器来构建3.3V稳压电路。
步骤3:您可以购买声音传感器或制作简单的麦克风电路,如电路图所示。它仅由一个晶体管2n3904 NPN晶体管组成。下图显示了在Vero板上构建的自制麦克风电路。您也可以检查此简单的音频前置放大器电路以了解更多信息。
为了更好地理解,我用组件值对整个连接进行了另一种表示,如下所示
步骤4:为实现从9号和10号微控制器数字引脚到音频放大器的连接,我使用了PAM8403立体声音频放大器,因为默认情况下Arduino音频输出非常低(通常您只能使用耳机听到声音) ,而不是扬声器,因此我们需要一个放大级)。该模块可以轻松驱动两个笔记本电脑扬声器,并且价格非常低廉。此外,它还带有SMD封装的功能非常强大的音频放大器,所需空间很小。PAM8403音频放大器模块如下所示。
连接非常简单,需要3.7V至5V的电源为音频放大器供电。来自Arduino引脚9和10的左声道和右声道音频输入以及接地引脚应作为此放大器模块的输入,如电路图所示。就我而言,我只使用了一个4英寸8欧姆扬声器,只使用了右声道输出。如果需要,您可以在此模块中使用两个扬声器。
步骤5:接下来,我使用一个简单的按钮构建了PTT开关。我添加了一个104PF或0.1uf电容器来防止按下开关时开关弹跳或信号不稳定。由于已将中断的引脚分配给编码,因此引脚4现在直接与Arduino数字引脚D3连接。
NRF24L01 + PA + LNA在传输音频信号或DATA数据包时会消耗更多功率,因此会消耗更多电流。当您突然按下PTT按钮时,功耗会增加。要处理突然增加的负载,必须在+ vcc和地上使用100nF电容器,以确保NRF24L01 + PA + LNA模块的传输稳定性。
按下开关后,Arduino板的D3引脚上会收到Arduino中断。在程序中,我们将声明Arduino的数字引脚3不断检查其输入电压。如果输入电压低,则将对讲机保持在接收模式;如果数字引脚号3高,则将对讲机切换到发送模式,以通过微控制器发送麦克风过程拾取的语音信号,然后通过NRF24L01 + PA + LNA带有外部天线。
步骤6:对于电源,我选择了此锂离子电池。为了给所有组件供电,例如Arduino IC Atmega328p,NRF24L01 + PA + LNA,音频放大器,PTT按钮和麦克风电路,我为该项目使用了两组锂离子电池,如下所示。
优质电池的电压电平为3.8v至4.2伏,充电电压仅为4v至4.2伏。要了解有关锂电池的更多信息,请查看链接的文章。这些电池非常普遍地用于便携式电子设备和电动车辆中。但是锂离子电池单体不如其他电池那样坚固,它们需要防止过充电和过快放电的保护,这意味着充电/放电电流和电压应保持在安全范围内。因此,我使用了最推进的锂离子电池充电模块-TP4056。我们之前曾使用此模块构建便携式移动电源,您可以在此板上查看更多信息。
步骤7: 我使用了2 Amp DC至DC升压升压器 模块,因为Arduino atmega328p,音频放大器,麦克风电路,PTT按钮都需要5伏特,但我的电池只能提供3.7V至4.2V,所以我需要一个升压转换器在超过1A的稳定电源输出时达到5V。
搭建好电路后,您可以将其组装在一个小机箱中。我用一个塑料盒放置电路,如下图所示
对讲机Arduino代码
您的Arduino对讲机的完整程序可在本页底部找到。在本节中,让我们讨论程序的工作方式。在到达那里之前,您需要包括下面列出的一些库。
- nRF24库
- nRF24音频库
- Maniaxbug RF24库
通过包括广播和音频库标题开始编程,如下所示
#包括
初始化引脚7和8上的RF Radio,并将音频无线电编号设置为0。此外,初始化引脚3上的ppt按钮。
RF24收音机(7,8); //使用引脚7(CE)8(CS)设置无线电RF24Audio rfAudio(radio,0); //使用收音机设置音频,并将其设置为收音机编号0 int talkButton = 3;
在设置功能中,以115200波特率开始串行监控以进行调试。然后初始化连接到引脚3的ppt按钮作为中断引脚。
void setup(){Serial.begin(115200); printf_begin(); radio.begin(); radio.printDetails(); rfAudio.begin(); pinMode(talkButton,INPUT); //设置中断以检查按键通话abutton按下attachInterrupt(digitalPinToInterrupt(talkButton),talk,CHANGE); //设置每个模块的默认状态以接收rfAudio.receive(); }
接下来,我们有一个称为talk()的函数,该函数将响应中断而被调用。如果按住按钮,程序会检查按钮的状态,然后进入发送模式以发送音频。如果释放按钮,它将进入接收模式。
void talk(){if(digitalRead(talkButton))rfAudio.transmit(); 否则rfAudio.receive(); } void loop(){}
可以在下面的视频中找到该项目的完整工作。对讲机在操作过程中会产生一些噪音,这是nRF24L01模块载波频率产生的噪音。可以通过使用优质的声音传感器或麦克风模块来减少噪声。如果您对此项目有任何疑问,可以在下面的评论部分中保留。您还可以使用我们的论坛来快速解决其他技术问题。