|
学习使用SparkFun FM Tuner和Arduino Uno开发板制作一个简单的FM收音机,以接收和显示广播信息。
在之前的文章中,我们简单介绍了一下FM收音机的基础知识,以及从头开始制作简易FM收音机所需的零件。本篇文章将主要介绍如何制作一台FM收音机,该收音机能够接收有关广播的信息,并集成到您的项目中。
我们将使用Silicon Laboratories Si4703的SparkFun分线板,以及Arduino Uno开发板和有源扬声器来制作一个简单的FM收音机,可以寻找广播电台、调节音量、保存喜爱的电台,当然还有播放音频。
Arduino Uno将通过串行通信与计算机连接,允许通过系统进行控制,并向用户反馈。此外,该系统将能够接收和显示嵌入在子载波频率中的广播公司的信息。
现在,我们来看看制作过程。
Si4703分线板焊接排针 SparkFun Si4703 FM调谐器分线板没有焊接排针,这几乎是每个SparkFun分线板的出货方式。这使您可以灵活地将Si4703分线板与您需要的任何类型的连接器结合到您的项目中。
您可以将导线直接焊接到分线板上的引脚,可以将分线板连接到另一个PCB,或者可以焊接公头或母头。在这个项目中,因为我将在面包板上组装电路,所以焊接一个公头。但是,如果您不使用面包板,则可能希望使用母头排针。
Si4703分线板
将排针焊接到电路板上就可以将其插入到面包板。
连接线缆 开始搭建项目时,我们将SparkFun Si4703分线板连接到Arduino Uno和扬声器。您可以直接将所有内容连接在一起,如上一节所述,或者将电子元件组装在面包板上。
下面的接线图和表格显示了使项目运行所需的所有连接。在接线图之后,提供了有关电子设计和不同连接的更多信息。
Si4703和Arduino Uno的接线表格
Arduino UNO和Si4703之间连接的电路图。
电源 首先,我们将电源和地连接到SparkFun Si4703 FM Tuner Basic分线板。
**请注意,Si4703的工作电源是3.3V,而不是5V。
将Arduino 3.3V引脚连接到Si4703分线板的VCC引脚。然后,将Arduino其中一个GND引脚连接到Si4703的GND引脚。
parkFun Si4703 FM Tuner Basic分线板的电源和地连接。
数据连接 SparkFun FM Tuner Basic Breakout和Arduino Uno开发板通过四条线进行通信。 GPIO2连接允许Arduino Uno在不同的设备模式中进行选择,如搜索/调谐和RDS功能。
在本教程中,我们将使用双线接口来控制Si4703。这两根线是SDIO和SCLK引脚,分别连接到A4和A5。最后,RST引脚用于启用和禁用Si4703。当D2设置为LOW时,Si4703被禁用,当它设置为HIGH时,Si4703退出复位模式。
SparkFun FM Tuner Basic分线板和Arduino Uno的数据连接。
扬声器连接 最后两个连接是Si4703分线板和有源扬声器之间的音频连接。
本项目中,左右音频通道连接的3.5mm连接器的哪一侧无关紧要。只需将3.5毫米尾纤连接器插入FM调谐器分线板上的Lout和Rout引脚即可。
分线板和有源扬声器之间的音频连接。
代码 组装完电子器件后,下一步是将代码上传到Arduino开发板。共有两个步骤: 1. 安装Si4703库 2. 将Si4703_test草图上传到Arduino Uno
安装库 为了更容易控制SparkFun FM Tuner Basic Breakout,以及项目代码更简洁,我们将使用具有控制Si4703功能的库。
首先下载Si4703库.zip文件夹并将其保存在计算机上的某个位置,以便稍后查找。然后,打开Arduino IDE。在Arduino IDE中,从菜单中选择Sketch> Include Library> Add .ZIP Library ....
然后,导航到存储Si4703库的位置并选择.zip文件。库安装成功后,窗口底部会显示确认信息。
上传代码 现在Si4703库已经安装到Arduino开发环境中,我们可以使用运行简单的FM收音机的代码对Arduino Uno进行编程。首先,下载草图并在Arduino IDE中打开它。 - // Arduino Uno Basic FM Radio using SparkFun Si4703 Breakout
- // Author: Scott Hatfield (aka Toglefritz)
- /*
- DESCRIPTION:
- This sketch for the Arduino Uno controls a simple FM radio using an Si4703 radio
- receiver. The sketch allows control of the system and feedback to the user over
- serial. The system can seek radio stations, store three favorited radio stations,
- adjust volume, and print RDS information.
- PARTS:
- * Arduino Uno R3: < https://www.sparkfun.com/products/11021 >
- * SparkFun FM Tuner Basic Breakout: < https://www.sparkfun.com/products/11083 >
- * Generic powered speaker
- HARDWARE CONNECTIONS:
- * Si4703 VCC --> 3.3V
- * Si4703 GND --> GND
- * Si4703 SDIO --> A4
- * Si4703 SCLK --> A5
- * Si4703 RST --> D2
- * Si4703 GPIO2 --> D3
- * Si4703 ROUT --> Speaker
- * Si4703 LOUT --> Speaker
- */
- #include <Si4703_Breakout.h> // Load the SparkFun Si4703 library < https://cdn.sparkfun.com/assets/learn_tutorials/2/7/4/Si4703_Breakout.zip >
- #include <Wire.h>
- int resetPin = 2; // The Si4703 breakout RST pin connects to the Arduino D2 pin
- int SDIO = A4; // The Si4703 breakout SDIO pin connects to the Arduino A4 pin
- int SCLK = A5; // The Si4703 breakout SCLK pin connects to the Arduino A5 pin
- // Initialize the Si4703_Breakout object
- Si4703_Breakout radio(resetPin, SDIO, SCLK);
- int channel;
- int volume = 5;
- char rdsBuffer[10];
- // Favorite stations
- int favA = 1041; // Set your favorite stations by inputting their FM frequency (omitting the period)
- int favB = 931;
- int favC = 937;
- void setup()
- {
- // The Arduino communicates with the computer via serial
- Serial.begin(9600);
- Serial.println("\n\nSi4703_Breakout Basic Radio");
- Serial.println("\n\nControls:");
- Serial.println("a, b, c Favourite stations"); // In the configuration above, you can set three favorite stations
- Serial.println("+, - Volume (max 15)");
- Serial.println("u, d Seek up / down");
- Serial.println("r, Print RDS Data (15 sec timeout)");
- Serial.println("\n\n");
- radio.powerOn(); // Enable the Si4703
- radio.setVolume(5); // Set the starting volume to 5 (out of 15)
- }
- void loop()
- {
- // Listen for serial commands
- if (Serial.available())
- {
- char ch = Serial.read();
- // u = seek up
- if (ch == 'u')
- {
- channel = radio.seekUp();
- displayInfo();
- }
- // d = seek down
- else if (ch == 'd')
- {
- channel = radio.seekDown();
- displayInfo();
- }
- // + = increase volume
- else if (ch == '+')
- {
- volume ++;
- if (volume == 16) volume = 15;
- radio.setVolume(volume);
- displayInfo();
- }
- // - = decrease volume
- else if (ch == '-')
- {
- volume --;
- if (volume < 0) volume = 0;
- radio.setVolume(volume);
- displayInfo();
- }
- // a = favorite station a
- else if (ch == 'a')
- {
- channel = favA;
- radio.setChannel(channel);
- displayInfo();
- }
- // b = favorite station b
- else if (ch == 'b')
- {
- channel = favB;
- radio.setChannel(channel);
- displayInfo();
- }
- // c = favorite station c
- else if (ch == 'c')
- {
- channel = favC;
- radio.setChannel(channel);
- displayInfo();
- }
- // r = print RDS information
- else if (ch == 'r')
- {
- Serial.println("RDS listening...");
- radio.readRDS(rdsBuffer, 15000);
- Serial.print("RDS info: ");
- Serial.println(rdsBuffer);
- }
- }
- }
- // The displayInfo function prints the current channel and volume over serial
- void displayInfo()
- {
- Serial.print("Channel:");
- Serial.print(channel);
- Serial.print(" Volume:");
- Serial.println(volume);
- }
复制代码
代码可以像任何其他草图一样通过USB上传到Arduino Uno开发板。
代码将使用串行通信连接您的计算机。因此,在代码成功上传到Arduino Uno之后,我们需要打开并设置串行监视器。您将在Tools > Serial Monitor中找到串口监视器工具。
打开串口监视器后,请确保使用窗口右下角的下拉列表将波特率设置为9600。当草图开始运行时,您应该看到来自Arduino的消息,其中包含控制无线电的说明。
控制收音机 Arduino Uno通过串口与计算机通信,以便接收命令并发送反馈。当草图首次开始运行时,Arduino将使用用于控制系统的各种命令向串行监视器打印指令。
连接可选天线 如果您发现系统很难接收无线电台,您可以通过将天线连接到分线板上的ANT引脚来提高Si4703的性能。 如果您希望收听的电台在您所在地区有强烈信号,则天线不是绝对必要的。 但是,天线对于拾取更远的信号非常有用。
天线由单根导线制成。 电线可以焊接到FM Tuner Basic Breakout上的ANT引脚上,也可以用鳄鱼夹固定。 连接天线后,您应该能够更轻松地接收无线电信号。 |