學(xué)習(xí)使用SparkFun FM Tuner和Arduino Uno開發(fā)板制作一個簡單的FM收音機,以接收和顯示廣播信息。
在之前的文章中,我們簡單介紹了一下FM收音機的基礎(chǔ)知識,以及從頭開始制作簡易FM收音機所需的零件。本篇文章將主要介紹如何制作一臺FM收音機,該收音機能夠接收有關(guān)廣播的信息,并集成到您的項目中。
我們將使用Silicon Laboratories Si4703的SparkFun分線板,以及Arduino Uno開發(fā)板和有源揚聲器來制作一個簡單的FM收音機,可以尋找廣播電臺、調(diào)節(jié)音量、保存喜愛的電臺,當(dāng)然還有播放音頻。
Arduino Uno將通過串行通信與計算機連接,允許通過系統(tǒng)進行控制,并向用戶反饋。此外,該系統(tǒng)將能夠接收和顯示嵌入在子載波頻率中的廣播公司的信息。
現(xiàn)在,我們來看看制作過程。
Si4703分線板焊接排針
SparkFun Si4703 FM調(diào)諧器分線板沒有焊接排針,這幾乎是每個SparkFun分線板的出貨方式。這使您可以靈活地將Si4703分線板與您需要的任何類型的連接器結(jié)合到您的項目中。
您可以將導(dǎo)線直接焊接到分線板上的引腳,可以將分線板連接到另一個PCB,或者可以焊接公頭或母頭。在這個項目中,因為我將在面包板上組裝電路,所以焊接一個公頭。但是,如果您不使用面包板,則可能希望使用母頭排針。將排針焊接到電路板上就可以將其插入到面包板。
連接線纜
開始搭建項目時,我們將SparkFun Si4703分線板連接到Arduino Uno和揚聲器。您可以直接將所有內(nèi)容連接在一起,如上一節(jié)所述,或者將電子元件組裝在面包板上。
下面的接線圖和表格顯示了使項目運行所需的所有連接。在接線圖之后,提供了有關(guān)電子設(shè)計和不同連接的更多信息。
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分線板的電源和地連接。
數(shù)據(jù)連接
SparkFun FM Tuner Basic Breakout和Arduino Uno開發(fā)板通過四條線進行通信。 GPIO2連接允許Arduino Uno在不同的設(shè)備模式中進行選擇,如搜索/調(diào)諧和RDS功能。
在本教程中,我們將使用雙線接口來控制Si4703。這兩根線是SDIO和SCLK引腳,分別連接到A4和A5。最后,RST引腳用于啟用和禁用Si4703。當(dāng)D2設(shè)置為LOW時,Si4703被禁用,當(dāng)它設(shè)置為HIGH時,Si4703退出復(fù)位模式。
SparkFun FM Tuner Basic分線板和Arduino Uno的數(shù)據(jù)連接。
揚聲器連接
最后兩個連接是Si4703分線板和有源揚聲器之間的音頻連接。
本項目中,左右音頻通道連接的3.5mm連接器的哪一側(cè)無關(guān)緊要。只需將3.5毫米尾纖連接器插入FM調(diào)諧器分線板上的Lout和Rout引腳即可。
分線板和有源揚聲器之間的音頻連接。
代碼
組裝完電子器件后,下一步是將代碼上傳到Arduino開發(fā)板。共有兩個步驟:
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 ....
然后,導(dǎo)航到存儲Si4703庫的位置并選擇.zip文件。庫安裝成功后,窗口底部會顯示確認(rèn)信息。
上傳代碼
現(xiàn)在Si4703庫已經(jīng)安裝到Arduino開發(fā)環(huán)境中,我們可以使用運行簡單的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
#include
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開發(fā)板。
代碼將使用串行通信連接您的計算機。因此,在代碼成功上傳到Arduino Uno之后,我們需要打開并設(shè)置串行監(jiān)視器。您將在Tools > Serial Monitor中找到串口監(jiān)視器工具。
打開串口監(jiān)視器后,請確保使用窗口右下角的下拉列表將波特率設(shè)置為9600。當(dāng)草圖開始運行時,您應(yīng)該看到來自Arduino的消息,其中包含控制無線電的說明。
控制收音機
Arduino Uno通過串口與計算機通信,以便接收命令并發(fā)送反饋。當(dāng)草圖首次開始運行時,Arduino將使用用于控制系統(tǒng)的各種命令向串行監(jiān)視器打印指令。
連接可選天線
如果您發(fā)現(xiàn)系統(tǒng)很難接收無線電臺,您可以通過將天線連接到分線板上的ANT引腳來提高Si4703的性能。 如果您希望收聽的電臺在您所在地區(qū)有強烈信號,則天線不是絕對必要的。 但是,天線對于拾取更遠的信號非常有用。
天線由單根導(dǎo)線制成。 電線可以焊接到FM Tuner Basic Breakout上的ANT引腳上,也可以用鱷魚夾固定。 連接天線后,您應(yīng)該能夠更輕松地接收無線電信號。
編輯:hfy
-
pcb
+關(guān)注
關(guān)注
4319文章
23105瀏覽量
398137 -
FM收音機
+關(guān)注
關(guān)注
2文章
27瀏覽量
14571
發(fā)布評論請先 登錄
相關(guān)推薦
評論