能够做一副对讲机其实一直是我小时候的梦想,今天就来和大家分享一个小哥做的号称“世界上第一台”罐头对讲机项目。
▲ 文末有完整视频
最后的内部结构大概是这个样子:
项目中的硬件由DFRobot友情赞助!
起因
项目的主人公是个逗比,制作罐头对讲机的初衷是因为自己的香蕉电话坏了,导致错过了一个非常重要的电话,一生气,决定升级一下自己的电话。
准备工具和材料
工具
材料
- DFRduino Uno R3
- Gravity IO 扩展板(可选)
- 模拟声音传感器(麦克风)
- 386AMP音频放大器模块(扬声器)
- 6xAA电池座,带DC2.1电源插孔(5号电池6枚)
- NRF24L01 + PA + LNA(带天线)
- 按钮开关
- 铝制罐头
- 跳线
处理罐头
在连接电子设备之前,我们需要在罐头上先打两个孔。
一个用于天线,另一个用于按钮。
先来给天线钻孔。把天线板放到罐头里面,测量好距离,并用白板笔做好标记,然后在需要钻孔的地方压出一个小凹痕,方便等下钻孔。
根据你使用的天线的不同,需要钻的孔的大小也可能不一样,为了确保尺寸合适,我拿天线上的螺纹和钻头的尺寸进行了比较。
一旦确定好了尺寸、标记好了孔的位置,用电钻快速钻进去,但不要太用力。罐头的壁很薄,钻完之后可以用铁皮剪清理一下孔的边缘,注意手不要被割到。
接下来是给按钮开关钻孔,具体操作如下:
在五个红色叉叉的位置打孔。
用铁皮剪剪掉多余的部分,最后剪成一个圆圈的形状。
我们预计达到的效果是这样的:
粘合组件
现在让我们把组件粘上!
先插上热胶枪,等它热起来,这个时候可以放点音乐。
然后,用胶枪把天线固定在罐体上。
这里建议在天线的金属部分涂上胶水,这样它就不会直接与罐子接触。
注意:对于所有这些组件,可以多用一点热熔胶,不要让任何模块有机会与罐子接地。如果测试的时候听到嗡嗡声或哔哔声,则可能是接地故障。
将DFduino Uno粘到罐子的底部,然后装上电池组。这是所有部件中最重的部分,建议将胶水涂在边缘上,然后把罐子放到你想放的地方,保持天线朝上。
为了方便和美观,我们把扬声器模块粘在电池组的一边,麦克风模块粘在另外一边,像这样:
这边需要重点强调的一点是一定要多用点胶水,保证没有任何引脚与罐头直接接触。
电路接线
模块都牢牢地粘好之后,我们开始接线。
根据上面的原理图,将所有的跳线连接到相应的引脚。(下面提供基于Gravity扩展板的引脚接法)
天线
- MI -> MISO
- MO -> MOSI
- SCK -> SCK
- CE -> Pin 7
- CSE -> Pin 8
- GND -> GND
- 5V -> 5V
注意
NRF24L01是一项出色的技术,但它对电流非常敏感。确保仅使用3.3V的电压为其供电。当使用扩展板时,只能连接到5V,否则会烧坏天线。
模拟声音传感器
扬声器
- +(扬声器输入端) -> 9 或 10 (左或右音频)
- -(扬声器输入端) -> GND
- Gravity pins -> D0
按钮开关
因为我们用的是RF24Audio库,所以麦克风、扬声器、按钮开关和天线的引脚排列也是特定的:
希望这些信息可以帮助你在任何电路板上都有可以连接好电路。
烧录代码
借助RF24Audio库,这个项目的程序非常简单。它甚至不到10行代码!
/* RF24 Audio Library TMRh20 2014
This sketch is intended to demonstrate the most basic functionality of the audio library.
Requirements:
2 Arduinos (Uno,Nano,Mega, etc supported)
2 NRF24LO1 Radio Modules
1 or more input devices (microphone, ipod, etc)
1 or more output devices (speaker, amplifier, etc)
1 or more external buttons or switches to control recording/volume/etc.
Setup:
1. Change the CE,CS pins below to match your chosen pins (I use 7,8 on 328 boards, and 48,49 on Mega boards)
2. Connect buttons as desired to the button pins listed below.
2. Upload this sketch to two or more devices
3. Use external buttons to control all devices
Default Pin Selections:
Speaker: pins 9,10 on UNO, Nano, pins 11,12 on Mega 2560
Input/Microphone: Analog pin A0 on all boards
Transmit button: Pin A1
VolumeUp button: Pin A2
VolumeDn button: Pin A3
Remote Transmission: Pin A4
Note: See http://arduino.cc/en/Tutorial/InputPullupSerial for info on how to wire the buttons to the pins
Note: Pin selections can be overridden by modifying the userConfig.h file included with the library
*/
#include <RF24.h>
#include <SPI.h>
#include <RF24Audio.h>
RF24 radio(7,8); // Set radio up using pins 7 (CE) 8 (CS)
RF24Audio rfAudio(radio,1); // Set up the audio using the radio, and set to radio number 0.
// Setting the radio number is only important if one-to-one communication is desired
// in a multi-node radio group. See the privateBroadcast() function.
void setup() {
rfAudio.begin(); // The only thing to do is initialize the library.
}
void loop() {
// Audio playback and button handling is all managed internally.
// In this example, the radio is controlled by external buttons, so there is nothing to do here
}
/* Documentation and References:
References:
All Library documentation: http://tmrh20.github.io/
New (2014) RF24 Audio Library: https://github.com/TMRh20/RF24Audio
Optimized (2014) RF24 Lib Source Code: https://github.com/TMRh20/RF24
Optimized (2014) RF24 Network Lib: https://github.com/TMRh20/RF24Network
*/
这里就不具体解释它是如何工作的了,如果你想了解有关Arduino IDE的更多信息以及此代码的含义,请查看此链接。
你还需要安装RF24和RF24Audio库,可以在这里下载。
安装好Arduino IDE后,下载提供的Arduino程序并打开代码。查看"Tools(工具)"下拉列表。确保将 "Programmer(编程器)" 设置为 AVR ISP,并将 “开发板” 设置为Arduino UNO(或您使用的任何板卡)。还要确认你的端口正确(应该显示"ArduinoUnoonCom#")
现在我们已经准备好烧录代码了。将USB电缆插入Arduino和计算机,然后单击IDE左上方的上载箭头。
代码上传,你可能会听到安静的嗡嗡声。
试着按下按钮,看看嗡嗡声是否会改变音调。
它还应使IO扩展板上的LED变暗。
如果上面的情况都出现了,那么程序正确运行了,说明各个模块的连接也没有问题。
实地测试
为了测试它,我们需要把两个罐头的开关都打开。按下其中一个罐子上的按钮,使麦克风发出一些噪音。你能听到另一个罐子传来的声音吗?
同样在另一个罐子上也试试。
听到什么了吗?如果听到了,说明你成功了!
注:如果出现干扰或嗡嗡声,请检查接地问题。确保没有任何引线接触到罐子,并且组件之间有足够的胶水。尽量避免相互缠绕,因为这会增加干扰。
我还建议用电工胶带覆盖天线的金属部分,以防止它接地到罐子上。
如果你测试下来有效的话,接着测试一下距离。
如果没有任何阻挡信号的东西,通信的有效距离应该可以达到1000米。