学习使用SparkFunFMTuner和ArduinoUno开发板制作一个简单的FM收音机,以接收和显示广播信息。
在之前的文章中,我们简单介绍了一下FM收音机的基础知识,以及从头开始制作简易FM收音机所需的零件。本篇文章将主要介绍如何制作一台FM收音机,该收音机能够接收有关广播的信息,并集成到您的项目中。
我们将使用SiliconLaboratoriesSi4703的SparkFun分线板,以及ArduinoUno开发板和有源扬声器来制作一个简单的FM收音机,可以寻找广播电台、调节音量、保存喜爱的电台,当然还有播放音频。
ArduinoUno将通过串行通信与计算机连接,允许通过系统进行控制,并向用户反馈。此外,该系统将能够接收和显示嵌入在子载波频率中的广播公司的信息。
现在,我们来看看制作过程。
Si4703分线板焊接排针
SparkFunSi4703FM调谐器分线板没有焊接排针,这几乎是每个SparkFun分线板的出货方式。这使您可以灵活地将Si4703分线板与您需要的任何类型的连接器结合到您的项目中。
您可以将导线直接焊接到分线板上的引脚,可以将分线板连接到另一个PCB,或者可以焊接公头或母头。在这个项目中,因为我将在面包板上组装电路,所以焊接一个公头。但是,如果您不使用面包板,则可能希望使用母头排针。将排针焊接到电路板上就可以将其插入到面包板。
连接线缆
开始搭建项目时,我们将SparkFunSi4703分线板连接到ArduinoUno和扬声器。您可以直接将所有内容连接在一起,如上一节所述,或者将电子元件组装在面包板上。
下面的接线图和表格显示了使项目运行所需的所有连接。在接线图之后,提供了有关电子设计和不同连接的更多信息。
Si4703和ArduinoUno的接线表格
ArduinoUNO和Si4703之间连接的电路图。
电源
首先,我们将电源和地连接到SparkFunSi4703FMTunerBasic分线板。
**请注意,Si4703的工作电源是3.3V,而不是5V。
将Arduino3.3V引脚连接到Si4703分线板的VCC引脚。然后,将Arduino其中一个GND引脚连接到Si4703的GND引脚。
parkFunSi4703FMTunerBasic分线板的电源和地连接。
数据连接
SparkFunFMTunerBasicBreakout和ArduinoUno开发板通过四条线进行通信。GPIO2连接允许ArduinoUno在不同的设备模式中进行选择,如搜索/调谐和RDS功能。
在本教程中,我们将使用双线接口来控制Si4703。这两根线是SDIO和SCLK引脚,分别连接到A4和A5。最后,RST引脚用于启用和禁用Si4703。当D2设置为LOW时,Si4703被禁用,当它设置为HIGH时,Si4703退出复位模式。
SparkFunFMTunerBasic分线板和ArduinoUno的数据连接。
扬声器连接
最后两个连接是Si4703分线板和有源扬声器之间的音频连接。
本项目中,左右音频通道连接的3.5mm连接器的哪一侧无关紧要。只需将3.5毫米尾纤连接器插入FM调谐器分线板上的Lout和Rout引脚即可。
分线板和有源扬声器之间的音频连接。
代码
组装完电子器件后,下一步是将代码上传到Arduino开发板。共有两个步骤:
1.安装Si4703库
2.将Si4703_test草图上传到ArduinoUno
安装库
为了更容易控制SparkFunFMTunerBasicBreakout,以及项目代码更简洁,我们将使用具有控制Si4703功能的库。
首先下载Si4703库.zip文件夹并将其保存在计算机上的某个位置,以便稍后查找。然后,打开ArduinoIDE。在ArduinoIDE中,从菜单中选择Sketch>IncludeLibrary>Add.ZIPLibrary....
然后,导航到存储Si4703库的位置并选择.zip文件。库安装成功后,窗口底部会显示确认信息。
上传代码
现在Si4703库已经安装到Arduino开发环境中,我们可以使用运行简单的FM收音机的代码对ArduinoUno进行编程。首先,下载草图并在ArduinoIDE中打开它。
//ArduinoUnoBasicFMRadiousingSparkFunSi4703Breakout
//Author:ScottHatfield(akaToglefritz)
/*
DESCRIPTION:
ThissketchfortheArduinoUnocontrolsasimpleFMradiousinganSi4703radio
receiver.Thesketchallowscontrolofthesystemandfeedbacktotheuserover
serial.Thesystemcanseekradiostations,storethreefavoritedradiostations,
adjustvolume,andprintRDSinformation.
PARTS:
*ArduinoUnoR3:< https://www.sparkfun.com/products/11021 >
*SparkFunFMTunerBasicBreakout:< https://www.sparkfun.com/products/11083 >
*Genericpoweredspeaker
HARDWARECONNECTIONS:
*Si4703VCC-->3.3V
*Si4703GND-->GND
*Si4703SDIO-->A4
*Si4703SCLK-->A5
*Si4703RST-->D2
*Si4703GPIO2-->D3
*Si4703ROUT-->Speaker
*Si4703LOUT-->Speaker
*/
#include
#include
intresetPin=2;//TheSi4703breakoutRSTpinconnectstotheArduinoD2pin
intSDIO=A4;//TheSi4703breakoutSDIOpinconnectstotheArduinoA4pin
intSCLK=A5;//TheSi4703breakoutSCLKpinconnectstotheArduinoA5pin
//InitializetheSi4703_Breakoutobject
Si4703_Breakoutradio(resetPin,SDIO,SCLK);
intchannel;
intvolume=5;
charrdsBuffer[10];
//Favoritestations
intfavA=1041;//SetyourfavoritestationsbyinputtingtheirFMfrequency(omittingtheperiod)
intfavB=931;
intfavC=937;
voidsetup()
{
//TheArduinocommunicateswiththecomputerviaserial
Serial.begin(9600);
Serial.println("\n\nSi4703_BreakoutBasicRadio");
Serial.println("\n\nControls:");
Serial.println("a,b,cFavouritestations");//Intheconfigurationabove,youcansetthreefavoritestations
Serial.println("+,-Volume(max15)");
Serial.println("u,dSeekup/down");
Serial.println("r,PrintRDSData(15sectimeout)");
Serial.println("\n\n");
radio.powerOn();//EnabletheSi4703
radio.setVolume(5);//Setthestartingvolumeto5(outof15)
}
voidloop()
{
//Listenforserialcommands
{
charch=Serial.read();
//u=seekup
if(ch=='u')
{
channel=radio.seekUp();
displayInfo();
}
//d=seekdown
elseif(ch=='d')
{
channel=radio.seekDown();
displayInfo();
}
//+=increasevolume
elseif(ch=='+')
{
volume++;
if(volume==16)volume=15;
radio.setVolume(volume);
displayInfo();
}
//-=decreasevolume
elseif(ch=='-')
{
volume--;
if(volume< 0) volume = 0;
radio.setVolume(volume);
displayInfo();
}
//a=favoritestationa
elseif(ch=='a')
{
channel=favA;
radio.setChannel(channel);
displayInfo();
}
//b=favoritestationb
elseif(ch=='b')
{
channel=favB;
radio.setChannel(channel);
displayInfo();
}
//c=favoritestationc
elseif(ch=='c')
{
channel=favC;
radio.setChannel(channel);
displayInfo();
}
//r=printRDSinformation
elseif(ch=='r')
{
Serial.println("RDSlistening...");
radio.readRDS(rdsBuffer,15000);
Serial.print("RDSinfo:");
Serial.println(rdsBuffer);
}
}
}
//ThedisplayInfofunctionprintsthecurrentchannelandvolumeoverserial
voiddisplayInfo()
{
Serial.print("Channel:");
Serial.print(channel);
Serial.print("Volume:");
Serial.println(volume);
}
代码可以像任何其他草图一样通过USB上传到ArduinoUno开发板。
代码将使用串行通信连接您的计算机。因此,在代码成功上传到ArduinoUno之后,我们需要打开并设置串行监视器。您将在Tools>SerialMonitor中找到串口监视器工具。
打开串口监视器后,请确保使用窗口右下角的下拉列表将波特率设置为9600。当草图开始运行时,您应该看到来自Arduino的消息,其中包含控制无线电的说明。
控制收音机
ArduinoUno通过串口与计算机通信,以便接收命令并发送反馈。当草图首次开始运行时,Arduino将使用用于控制系统的各种命令向串行监视器打印指令。
连接可选天线
如果您发现系统很难接收无线电台,您可以通过将天线连接到分线板上的ANT引脚来提高Si4703的性能。如果您希望收听的电台在您所在地区有强烈信号,则天线不是绝对必要的。但是,天线对于拾取更远的信号非常有用。
天线由单根导线制成。电线可以焊接到FMTunerBasicBreakout上的ANT引脚上,也可以用鳄鱼夹固定。连接天线后,您应该能够更轻松地接收无线电信号。
编辑:hfy
评论