用 Arduino 制造一台 FM 调频收音机

网友投稿 2019-08-13 11:27

https://cdn.china-scratch.com/timg/190815/112G0C54-0.jpg

MAKER: indoorgeek/译:趣无尽

这是一个基于 Arduino 的开源的收音机项目,它具备一台标准收音机的全部功能,从控制部分到外壳都可以自己 DIY。在项目中,我们将介绍让 FM 收音机调谐器的 RDA5807 模块与 I2C 协议进行通信的方法,整个过程只需要两根线就可以与 IC 通信,接线非常简单。3D 打印的外壳也非常简洁。总之,是个非常简单和实用的项目,来试试吧!下面是制作过程的视频:

材料清单

Arduino Nano × 1
RDA5807M FM 收音机调谐器IC × 1
I2C OLED 显示屏 × 1
3W 扬声器 × 1
PAM8403 音频放大器模块 × 1
6×6 轻触开关 × 2
100k 电位计 × 1
直流电源插座 × 1
3D 打印机(可选) × 1

细节说明

1、项目构造非常简明,Arduino Nano 是收音机的大脑,模块通信已经是现成的。注意要安装 Radio 库。https://github.com/mathertel/Radio ,该库也适用于 SI4703,SI4705 和 TEA5767。
2、收音机前面的一个按钮用于调节收音机的“频率选择”模式,另一个按钮用于调频。一个小窗口用来滚动显示预设的频率(请根据你所属的地方在代码中设置)。
3、OLED 显示器用于显示调谐频率。
4、无线电模块的输出音频信号非常低,不足以驱动 0W 扬声器。PAM8403 模块将用于放大音频信号。当然,还有许多其他的模块可以选择。

处理收音机模块

1、制作一块比模块稍大一点的板子用来固定,如图所示,这个模块非常的小,不方便直接固定在面包板或者电路板上。
https://cdn.china-scratch.com/timg/190815/112G11091-1.jpg
https://cdn.china-scratch.com/timg/190815/112G14207-2.jpg
2、确保板子的每一侧至少有五个孔并将公头插针焊接。
https://cdn.china-scratch.com/timg/190815/112G14309-3.jpg
3、将模块固定在电路板上并焊接模块上焊盘和插头引脚之间的细线。我使用的是一些配件多余的线。
https://cdn.china-scratch.com/timg/190815/112G1G23-4.jpg
https://cdn.china-scratch.com/timg/190815/112G22F0-5.jpg

打印 3D 外壳

3D 打印外壳使用 Fusion 360 设计并在 Creality Ender3 打印机上打印。
所有 .STL 文件请在项目文件库中下载。
https://make.quwj.com/project/133
外壳前面板将打印成白色。
https://cdn.china-scratch.com/timg/190815/112G24242-6.jpghttps://cdn.china-scratch.com/timg/190815/112G24644-7.jpg
https://cdn.china-scratch.com/timg/190815/112G2B57-8.jpg
当所有组件打印完成后,我使用烙铁将“M3 螺纹插件”焊接到外壳的孔中,然后使用强力胶水固定外壳内部的边缘。
https://cdn.china-scratch.com/timg/190815/112G35X8-9.jpg
https://cdn.china-scratch.com/timg/190815/112G32b8-10.jpg
https://cdn.china-scratch.com/timg/190815/112G354M-11.jpg
https://cdn.china-scratch.com/timg/190815/112G46318-12.jpg
此外,在背板上分别制作一个 6mm 和 2mm 的孔用于放置放大器和天线的按钮。

制作电路板

本项目需要制作两块电路板。
https://cdn.china-scratch.com/timg/190815/112G43464-13.jpg
https://cdn.china-scratch.com/timg/190815/112G421b-14.jpg
1、一块带有 Arduino 和 FM 模块的主板。
https://cdn.china-scratch.com/timg/190815/112G54354-15.jpg
2、一块用于安装在前面板上的按钮。
https://cdn.china-scratch.com/timg/190815/112G562K-16.jpg
每个组件都将公头针与母头针相连,这样可以轻松连接或者断开。根据自己需求,是否选择跳过此步骤。
https://cdn.china-scratch.com/timg/190815/112G564b-17.jpg
最后,请根据原理图进行接线。原理图请在项目文件库中下载。
https://make.quwj.com/project/133

编程

代码请在项目文件库中下载。
https://make.quwj.com/project/133
下载 .ino 文件请在 Arduino IDE 中打开。在上传之前,需要修改两处。
1、无线电台的数量及其频率要修改。通过搜索引擎了解你当地的电台及其频率。如图所示,将它们列出来并添到’stations []’数组中。你可以省略小数点。例如,9110 表示 91.10 MHz,10110 表示101.10 MHz,依此类推。另外,在方括号之间输入电台的总数。本项目中共有十二个电台。因此,格式为 [12]。
https://cdn.china-scratch.com/timg/190815/112G5K56-18.jpg
2、如图所示,在总电台数中减去一个并将其输入代码。我知道肯定还有更好的办法但是除了这个都在不停报错,所以就这样决定吧。
https://cdn.china-scratch.com/timg/190815/112G62102-19.jpg
修改好后就可以上传代码。

#include
#include
#include
#define OLED_RESET 4
#define FIX_BAND RADIO_BAND_FM
int setButton = 5;
int backButton = 6;
int potPin = A7;
Adafruit_SSD1306 display(OLED_RESET);
RDA5807M radio;
int stations[12] = {9110,9190,9270,9350,9430,9830,10010,10280,10400,10480,10640,10710};
void setup() {
 pinMode(backButton, INPUT);
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 display.display();
 delay(2000);
 display.clearDisplay();
   
 radio.init();
 radio.setBandFrequency(FIX_BAND, 10010);
 radio.setVolume(6);
 radio.setMono(true);
 radio.setMute(false);
 display.setTextSize(3);
 display.setTextColor(WHITE);
 display.setCursor(20,10);
 display.print("100.10");
 display.display();
}
void loop() {
 if(digitalRead(backButton)==HIGH){
   setFrequency();
 }
}
void setFrequency(){
 float displayStation;
 int stationNum, val;
 radio.setMute(true);
 while(digitalRead(setButton) != HIGH){
   display.setTextSize(1);
   display.setTextColor(WHITE);
   display.setCursor(0,0);
   display.print("Select Station");
   display.setTextSize(3);
   display.setTextColor(WHITE);
   display.setCursor(20,10);
   val = analogRead(potPin);
   stationNum = map(val, 0, 1023, 0, 11);
   displayStation = stations[stationNum]/100.0;
   display.print(displayStation);
   display.display();
   display.clearDisplay();
 }
 delay(500);
 radio.setBandFrequency(FIX_BAND, stations[stationNum]);
 radio.setMute(false);
 display.setCursor(20,10);
 display.print(displayStation);
 display.display();
 display.clearDisplay();
}

组装所有配件

1、使用热胶枪将 OLED 显示屏和扬声器粘在前面板上。
https://cdn.china-scratch.com/timg/190815/112G633X-20.jpg
https://cdn.china-scratch.com/timg/190815/112GCI7-21.jpg
2、将 3D 打印的按钮放置到位并粘好触觉开关。将电路板放在按钮顶部,确保按钮和开关对齐。
https://cdn.china-scratch.com/timg/190815/112GG960-22.jpg
3、将电位计安装到前面板上。
https://cdn.china-scratch.com/timg/190815/112GI643-23.jpg
4、将外壳内部边缘涂上适量的强力胶并将整个前面板所有部件放在内部的边缘上。
https://cdn.china-scratch.com/timg/190815/112GG634-24.jpg
5、将所有组件与主电路板连接起来。将无线电模块的音频输出连接到背板上的功放上。
注意,固定连接器时使用少量胶水,起到消除应力的作用。
https://cdn.china-scratch.com/timg/190815/112GM392-25.jpg
https://cdn.china-scratch.com/timg/190815/112GQ4E-26.jpg
6、用 M3 螺钉合上后板。如图所示,将热胶棒切成四个圆圈,厚度约为 2-3mm 并将其粘在底部,这样简易的橡胶垫就做好了。
https://cdn.china-scratch.com/timg/190815/112GUK4-27.jpg
https://cdn.china-scratch.com/timg/190815/112GWb9-28.jpg
https://cdn.china-scratch.com/timg/190815/112G960N-29.jpg

完成

最后,使用 5V 电源为收音机供电,收音机就可以正常使用了。如果你无法找到 5V 电源,那么使用带有 12V 输入的 7805 稳压器也可以。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com