亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

调频收音机

组件和用品

SparkFun FM 调谐器基本突破 - Si4703
× 1
SparkFun 扬声器 - 0.5 瓦(8 欧姆)
适合小型广播项目的出色音响
× 1
Adafruit Monochrome 0.96" 128x64 OLED 图形显示器
一个很酷的小显示器,对比度非常好
× 1
Texas Instruments LM386 - 音频放大器 - DIP-8
用于小型电池驱动音频项目的著名运算放大器
× 1
Arduino Nano R3
× 1
Adafruit 薄膜 1x4 键盘
× 2
Adafruit 4 通道 I2C 双向逻辑电平转换器
我没有用过那个,但应该可以用
× 1
F 连接器的伸缩天线调频
× 1
面板安装 F 型螺丝
× 1

关于这个项目

小时候,我曾经制作过 AM 收音机,但从未成功制作过 FM 收音机。他们只是太复杂了。如今,您可以在芯片上获得完整的 FM 收音机调谐器,但这些芯片是表面贴装组件,业余爱好者很难使用。幸运的是,Sparkfun 为 Silicon Laboratories Si4703 FM 无线电调谐器芯片(数据表)取得了突破,它突破了所有引脚。我将向您展示如何围绕此突破构建完整的 FM 收音机,并使用 Arduino 通过内置的两线控制接口控制调谐器功能。 Sparkfun 提供了一个完整的库,使其易于编程。

同时,我在项目中添加了一个很酷的小 OLED 显示屏,具有非常高的对比度和非常低的功耗。最后但并非最不重要的一点是,我将向您展示如何用最少的部件构建出音质出色的单声道音频放大器。成品收音机可以使用三节 AA 电池运行很多很多小时。

Sparkfun FM 调谐器基本突破和 I2C 串行总线

基本突破很容易使用。首先在公头上焊接,以便能够使用面包板的突破。请参阅下面的引脚布局。一米细线上的焊料暂时用作ANT的天线。

  • LOUT 和 ROUT 是我们将连接到放大器的左右输出通道。

(如果您不想构建自己的放大器,您可以购买评估板,您可以直接使用您的耳机)。

  • 电源电压 Vcc 为 +3.3 伏。
  • GND 接地或 0 伏。

Si4703 有一个两线接口,它是一个串行总线,允许通过串行通信从 Arduino 控制调谐器。更准确地说,总线称为 I2C(内部集成电路;发音为 I-squared-C 或 I-two-C)并且仅使用两条双向线:

  • 串行数据线 (SDA) 和
  • 串行时钟线 (SCL)。
  • 此外还有重置线 (RST)。

在 Si4703 中,SDA 称为 SDIO,SCL 称为 SCLK。所有 Arduino 都有内置 I2C。如果您想了解有关 I2C 总线的更多信息,Tom Igoe 和 Jeff Feddersen 制作了一个很棒的视频。在我们的 I2C 总线上,Arduino 充当主机,而 Si4703 和 OLED 显示器充当从机。

I2C 总线电压和 Arduino 的选择

Si4703 和 I2C 总线上的 OLED 显示器使用的电压为 3.3 伏。出于这个原因,Sparkfun 在他们的连接指南中建议使用 3.3 伏 Arduino。这意味着使用 Arduino Pro Mini 编程有点困难,因为它没有 USB 连接器,并且必须使用 FTDI 突破进行编程。但还有另一个问题:Arduino Pro Mini 的运行频率为 8 MHz,是 Arduino Uno 或 Nano 速度的一半。我的测试表明,这对于驱动 OLED 显示器来说太慢了。因为我真的想保留显示器,所以我决定使用 Arduino Nano(16 MHz),它在 I2C 总线上具有 5 伏信号电平,并使用双向 I2C 逻辑电平转换器(I2C 转换器)连接到 3.3 伏总线信号显示和无线电芯片。我有一些 I2C 转换器,每个信号都有我在项目中使用的两个信号。我们总共需要对三个信号进行电平转换:SDA、SCL 和 RST。我不得不使用两个 I2C 转换器。 (我在上面的描述中链接到一个带有 4 个信号的 I2C 转换器,它可以帮助您节省一些布线)。

Nano 几乎与 Uno 相同,但占地面积要小得多。如果需要,您可以改用 Uno。我是在第一次测试时这样做的。两者都有 USB 连接器,并且易于与 Arduino IDE 一起使用。

Arduino 与收音机和显示器的连接示意图

接下来,让我们看看Nano周围的布线和I2C总线连接的细节。 (如果没有点,电线只是交叉)。

如您所见,该项目由三节 AA 电池(4.5 伏)供电。电池直接连接到 Arduino Nano 的 5 伏引脚,绕过稳压器。这样,Nano 将很乐意使用 3 节 AA 电池运行。 警告!在通过 USB 将 Nano 连接到计算机之前,请务必断开电池连接! 否则计算机的 5 伏电压将与电池短路。在第一个测试阶段,在没有电池的情况下从 USB 电源运行电路!如果您想安全使用,请使用六节 AA 电池(9 伏)并将正极连接到 Nano 的 VIN 引脚(而不是 5 伏引脚) .这样,当您连接 USB 电缆时,Nano 的电源管理将自动关闭电池。 (您可以使用 9 伏特块电池代替,但它可能只能持续几个小时)。

Arduino SDA (A4) 和 SCL (A5) 连接到 I2C 转换器的 5 伏侧。此外,我们使用 D2 作为 RST 信号。在 I2C 转换器的 3.3 伏端,我们连接到 Si4703 的 SDIO、SCLK 和 RST。对于OLED显示器,接SDA和SCL就足够了。 (我在 banggood.com 上买了我的,因为它有两种颜色:黄色(顶行)和蓝色,而且没有 RST 销)。

将所有组件连接到 Nano 的 3.3 伏输出和接地。 I2C 转换器在高压侧还需要 5 伏电压。

IO 引脚 D5-D12 连接到两个键盘。按下按钮将输入连接到地。

低压音频放大器 LM386

我使用 LM386 芯片构建了一个单声道放大器。 LM386 自 70 年代就已问世。它是一种功率放大器,设计用于低压消费类应用(数据表)。增益在内部设置为 20 以保持外部部件数量较少,但在引脚 1 和 8 之间添加外部电阻器和电容器会将增益增加到 20 到 200 之间的任何值。我们将使用最低增益 20,如果您使用 8 欧姆扬声器,这已经足够高了。

下面给出项目音频放大器部分的原理图:

我们先来看看 Si4703。在左侧,指示了与 Arduino 的 I2C 信号连接。音频输出通道的连接方式如下:电阻 R4 连接到 LOUT,R5 连接到 ROUT。然后将这两个信号组合成一个 MONO 信号。分线板上的输出端有电容器,所以我们不需要添加一个。 R2 和 R3 定义了一个分压器,以降低进入放大器的输入信号电平。您当然可以用电位器代替 R2 和 R3 并用它来调节音量。但我们想以数字方式控制音量。 Si4703 输出电平可以在 I2C 上从 1 逐步增加到 15。使用 R2/R3,您可以通过试验不同的电阻将其与放大器相匹配。例如,如果您增加 R3,则音量增加。

该电路直接取自数据表。 C2 必须至少为 220 µF。较小的值会抑制低音响应。如果您想增强低音,请查看数据表。在面包板上构建电路并尝试添加/移除组件:C3 必须靠近芯片放置。 C3和C1是可选的。

youtube 上有很多关于 LM386 项目的视频,很多人抱怨声音不好。他们中的大多数可能缺乏适当的地面布局。如果您查看原理图,您会看到我如何将输入地与输出地分开,这非常重要。它们在引脚 4(芯片的接地引脚)处相遇。如果您想了解更多相关信息,请观看 JohnAudioTech 的这段视频(观看完整 LM386 项目的视频)。

LM386N-1 至少需要 4 伏电压并提供几百毫瓦。我用 3 节 AA 电池(4.5 伏)运行它,音量可以在 1 到 10 之间变化,听起来非常好。但是,对于如此低的电源电压,使用 8 欧姆(而非 4 欧姆)扬声器非常重要。如果我将音量增加到 15,它开始听起来失真。如果您想大声播放收音机,请将电源电压增加到 9 伏。

原型制作

我强烈建议您首先在两个面包板上构建整个项目。将 Arduino、I2C 转换器和 OLED 显示器放在一个面包板上,同时将 Si4703 分线器和音频放大器放在另一块面包板上,以将声学失真保持在最低限度。在我的第一个原型中,我将 Si4703 靠近 Arduino,并使用长信号电缆连接到音频部分(见图),这导致了失真。

使用来自 Arduino 的稳压 3.3 伏输出从 USB 为 Arduino 供电,为显示器和无线电芯片供电。使用电池(4.5 - 9 伏)为 LM386 供电。

程序代码

必须包含以下库:

#include  #include  #include  #include  #include   

如果您不知道如何安装库,请查看以下指南。 Sparkfun 库可在此处找到,它提供高级函数来与 Si4703 对话,而无需关心所有微小细节。可以在此处找到带有教程的 Adafruit 显示库。

接下来,我们需要做一些定义:

// 无线电输入按钮 #define volDown 9 #define volUp 10 #define channelDown 11 #define channelUp 12 // Si4703 无线电芯片 #define resetPin 2 #define SDIO A4 #define SCLK A5 Si4703_Breakout radio(resetPin, SDIO, SCLK); #define SI4703Address 0x10 // Si4703 I2C 地址。  

使用#define 是一种使源代码更具可读性的方法。在你一劳永逸地定义了 volDown 指的是引脚 9 之后,你每次指的是 D9 时都写上 volDown。

接下来我们看设置部分:

// 变量定义 int channel;整数; void setup() { // 在输入 pinMode(volDown, INPUT_PULLUP) 上设置内部上拉电阻; pinMode(volUp, INPUT_PULLUP); pinMode(channelUp, INPUT_PULLUP); pinMode(channelDown, INPUT_PULLUP); // 初始化无线电 radio.powerOn();频道 =882; radio.setChannel(channel);体积 =4; radio.setVolume(音量); }  

引脚 9-12 定义为输入引脚。参数 INPUT_PULLUP 将一个内部上拉电阻(ATmega 芯片内部)从 +5V 连接到输入引脚。因此,除非您按下按钮(按下按钮 =低),否则引脚的信号电平将为高电平。

Sparkfun 库通过主要函数 powerOn()、setChannel() 和 setVolume() 可以轻松地通过 I2C 控制无线电。

主循环监听按钮被按下,然后采取相应的行动:

void loop() { // 音量减小 if (digitalRead(volDown) ==LOW) { if (volume> 0) volume--; radio.setVolume(音量);更新显示();延迟(100); } // 音量增大 if (digitalRead(volUp) ==LOW) { if (volume <15) volume++; radio.setVolume(音量);更新显示();延迟(100); } // 频道下降 if (digitalRead(channelDown) ==LOW) { channel =radio.seekDown();更新显示();延迟(100); } // 通道向上 if (digitalRead(channelUp) ==LOW) { channel =radio.seekUp();更新显示();延迟(100); } }  

看看下面的完整源代码。它包括四个用于预设电台的按钮(您可以在其中放置您最喜欢的电台)以及更新 OLED 显示屏所需的所有代码,这几乎耗尽了所有可用的 RAM。如果您想了解 SSD1306 库,我会向您推荐优秀的 Adafruit 教程。请注意,库无法通过软件确定显示器的屏幕尺寸。您必须在安装 Adafruit_SSD1306.h 后指定它。打开库文件,阅读注释中的说明并相应地编辑文件。

源代码中有一项“高级”功能,可通过将电池电量与 AVR 芯片内部的 1.1 伏参考电压进行比较来测量电池电量。当我们使用电池运行时,我们没有恒定的 5 伏参考电压来测量电池电压。如果你想了解更多,我推荐你阅读以下文章:Secret Arduino Voltmeter and the Gammon forum。

从面包板原型到成品收音机

如果你已经走到了这一步,你就会在两个面包板上拥有一个功能齐全的原型。让我们将电路转移到两个穿孔板上,然后将整个收音机放入一个漂亮的项目箱中。如果您以前没有这样做过,请不要害怕尝试。没有什么是你真的可以做错的,你会在前进的过程中学习必要的技能。 Adafruit 的 Collin 制作了两个不错的介绍视频,您可以观看:Breadboards&perfboards 和 Perfboard 原型。

我决定将 Nano 与 I2C 转换器(我必须使用两个转换器,见上文)放在一个穿孔板上:

为了制作这个原型穿孔板,我遵循了一个教程,我建议详细研究该教程:如何在不使用印刷电路板的情况下制作原型。尤其重要的是第 3 步:制定您的布线计划!计划是最重要的一步,也是失败与成功的区别。一些进一步的提示:我使用了黑色 22 AWG 电线,它太粗且难以使用,正如您在图片中看到的那样。换一些不同颜色的细“绕线”(30 AWG)。并使用更大的穿孔板!我制作了排针并使用杜邦跳线将不同的部分连接在一起。

将 Si4703 和音频放大器放在第二个穿孔板上。这是一个关于 LM386 放大器的小教程,您可以将其用作灵感:从原理图到 Veroboard。但是,我建议您为 LM386 使用 IC 插座!或者,JohnAudioTech 为完整的 LM386 放大器项目制作了一个不错的视频,其中包含良好的布局,其中电源地与信号地分开。

接下来,您的收音机需要一个漂亮的项目外壳。再次,柯林在这个视频中展示了如何做到这一点。我特别喜欢用胶带标记钻孔位置的想法。我买了Painter的胶带,不太粘。除了美纹纸胶带和钻头,还可以使用热胶枪。只需将扬声器、穿孔板、电池组等粘合到外壳中,然后用杜邦跳线连接这些部件。最终产品如下所示:

如您所见,我太乐观了,买了一个相当小的项目框。为了在前面板上为显示器制作一个方形开口,我用斯坦利刀片从里面切割(以避免外面出现难看的痕迹)。不是很优雅,但它工作得很好。然后我用热胶将显示器粘在开口处。我在前面板上标记了扬声器的尺寸,为声音钻了很多 3 毫米的孔,然后从背面粘上了扬声器。

在图片中,您仍然可以看到天线线。接下来,我买了一个面板安装的 F 型连接器和一个伸缩式 FM 天线。尽管天线只有 50 厘米长,但接收效果非常好,小扬声器的声音也出奇的好。最令人惊奇的是,尽管我已经听我的小收音机很多天了,但我还没有换过一次电池。

其他广播项目

当我看到 Great Scott 的视频时,我最初受到启发去做这个项目,他还在后来的视频中为他的收音机建造了一个漂亮的木制项目箱。然而,更接近我的收音机的细节是约翰欧文的 Si4703 袖珍调频收音机,因为他使用了 Sparkfun 突破,你应该仔细看看他的项目描述。我已经将他的源代码用于 Mono 功能和电池电压的测量。

代码

调频收音机
包含 Arduino Nano 源代码的 Github 存储库 https://github.com/Notthemarsian/FM-radio

示意图

Fritzing 图调频收音机
原始 Fritzing 文件和图片/PDF https://github.com/Notthemarsian/FM-radio/tree/master/Fritzing%20diagrams

制造工艺

  1. B 类音频放大器
  2. 555 滞后振荡器
  3. 无线电电路
  4. 无线电原理
  5. 无线电
  6. 地对地无线电传播
  7. UnifiedWater v1
  8. Pi-Arduino Internet Radio
  9. 基于 Arduino 的淋浴间调频收音机
  10. 移动投票箱
  11. Whac-A-Mole(按钮版)
  12. 基于原子的无线电通信