學習目標 : 認識雙聲道喇叭模組的功能及使用方式
學習時間 : 40 mins示範模組 : (1) UNO
(2) 雙聲道喇叭模組
工具 : (1) 樂高底板(相容)
(2) 音源線
====================通能介紹====================
fayalab的雙聲道喇叭模組使用了一顆雙聲道音頻功率放大IC,配合可變電阻與開關的切換,也可將單聲道的音源讓左右喇叭同時撥放,或者讓雙聲道音源各別在左右喇叭撥放,獨立控制左右聲道的音量,。
- 可變電阻 : 兩顆音量旋鈕分別控制左右聲道音量,使用前記得轉到最左邊(最小聲)
- 音源座 : 可透過音源線輸入音源訊號
- 2x1排母座 : 可透過單心線輸入音源訊號
- 切換開關 - MONO: 可將雙聲道音源獨立讓兩個喇叭各別撥放
- 切換開關 - STEREO : 可將單聲道音源讓到兩個喇叭同時撥放
faya雙聲道喇叭模組所使用的核心IC為 TDA2822M,具有低交越失真和低靜態電流的特點,可工作於雙聲道立體聲或單聲道橋式放大模式,有興趣的人可以參考DataSheet
模組電路圖如下,利用TDA2822推動兩顆喇叭,電阻電容則根據datasheet建議,稍作調整後接到周邊電路。輸入部分,分為左右聲道,分別透過兩個10K歐姆的可變電阻改變阻值,控制輸入音量的大小。切換開關SW1,當切換到MONO時,左右聲道的音源各自於左右喇叭撥出,當切換到STEREO時,左右聲道會混單聲道,單聲道音源會同時於左右喇叭撥出。

====================範例實作(一)====================
目標:
(1) 利用faya雙聲道喇叭模組播放手機音樂
目標:
(1) 利用faya雙聲道喇叭模組播放手機音樂
接線:
(1) 電源線連接如下圖所示,紅色線接到VCC,黑色線接到GND,詳細連接的說明請看這篇文章 或簡易版
(2) 利用音源線,將模組與手機的耳機孔相連,並利用手機撥放音樂
範例結果:
我們首先撥放周杰倫的告白氣球的MV測試:
(1) 電源線連接如下圖所示,紅色線接到VCC,黑色線接到GND,詳細連接的說明請看這篇文章 或簡易版
(2) 利用音源線,將模組與手機的耳機孔相連,並利用手機撥放音樂
範例結果:
我們首先撥放周杰倫的告白氣球的MV測試:
(1) 當SWITCH切換到MONO時,我們能夠用左邊的旋鈕控制左邊喇叭的聲音,右邊的旋鈕控制右邊喇叭的聲音
(2)當SWITCH切換到STEREO時,左右聲道的音源混在一起了,因此無論調整左邊或右邊旋鈕都能控制喇叭音量。
註: 由於只用一個麥克風收音,錄出來的影片無法辨識是由哪個喇叭發出的聲音,影片只能示意並配和文字解釋。
接著我們撥放左右聲道測試的音源:
接著我們撥放左右聲道測試的音源:
(1) 當SWITCH切換到MONO時,當音源來自左聲道時,我們只能用左邊的旋鈕控制左邊喇叭的音量,右邊的旋鈕是無作用的,同樣的音源來自右聲道時,我們只能用右邊的旋鈕控制右邊喇叭的音量。
(2) 當SWITCH切換到STEREO時,左右聲道的音源混在一起了,因此無論調整左邊或右邊旋鈕皆能控制喇叭音量。
====================範例實作(二)====================
目標:
(1) 利用faya雙聲道喇叭模組播放Arduino產生的和弦音樂,樂譜如下
範例程式:
備註:
- 本程式需要用到Tone函式庫,請在下載後自行解壓縮到libraries資料夾
- 本程式需要用到pitches.h標頭檔,請在下載後放到和本程式同一個專案資料夾
- 程式中撥放音樂的原理和之前的文章[模組介紹:faya蜂鳴器模組]類似,大家可以參考。
- 為了讓左聲道和右聲道的音樂在同一個Loop中撥放,我們修改了一 點點樂譜,讓左聲道和右聲道讀取的音符數量相同 (同樣45個音符)。
範例結果:
討論:
Arduino 內建的Tone()函式,由於功能的限制(Timer數量),只能一次對一個接腳輸出一個音階,無法同時讓兩個接腳發聲,因此我們借用外來的函式庫解決此問題,在UNO上最多可以同時發出三個音階,有興趣的人可以參考函式作者網站上的解釋。我們剛好藉此機會示範此函式庫的使用方式,並且將結果展示在faya雙聲道喇叭模組上。
也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
目標:
(1) 利用faya雙聲道喇叭模組播放Arduino產生的和弦音樂,樂譜如下
接線:
(1) 電源線連接放式和範例實作(一)相同
(2) 訊號線連接
Arduino_D2 ===> 雙聲道喇叭_L
Arduino_D3 ===> 雙聲道喇叭_R
注意到喇叭的G不需要連接
(1) 電源線連接放式和範例實作(一)相同
(2) 訊號線連接
Arduino_D2 ===> 雙聲道喇叭_L
Arduino_D3 ===> 雙聲道喇叭_R
注意到喇叭的G不需要連接
範例程式:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2018/02/23 | |
// Faya-Nugget 範例程式 (twinkle_dual.ino) | |
// 單元: 模組介紹-faya雙聲道喇叭模組 | |
// 網址: https://fayalab.blogspot.com/2018/02/stereospeaker.html | |
// 目標 :(1) 利用Aruino撥放小星星(左聲道)及其和弦(右聲道) | |
// (2) 於faya雙聲道喇叭模組撥放 | |
// 接線: Arduino ==> faya模組 | |
// D2 ==> R (雙聲道喇叭模組) | |
// D3 ==> L (雙聲道喇叭模組) | |
#include "pitches.h" | |
#include <Tone.h> | |
Tone toneLeft; | |
Tone toneRight; | |
//小星星的音階 (左聲道) | |
int starLeft[]={NOTE_C4,NOTE_C4,NOTE_G4,NOTE_G4,NOTE_A4,NOTE_A4,NOTE_G4, \ | |
NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_C4, \ | |
NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4, \ | |
NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_E4,NOTE_D4, \ | |
NOTE_C4,NOTE_C4,NOTE_G4,NOTE_G4,NOTE_A4,NOTE_A4,NOTE_G4, \ | |
NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_C4}; | |
//每個音階的長度 (左聲道) | |
int beatLeft[]={4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,8,8,4,4, \ | |
4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,8,8,2}; | |
//小星星的音階 (右聲道) | |
int starRight[]={NOTE_C3,NOTE_C3,NOTE_E3,NOTE_E3,NOTE_F3,NOTE_F3,NOTE_E3, \ | |
NOTE_D3,NOTE_D3,NOTE_C3,NOTE_C3,NOTE_F3,NOTE_G3,NOTE_E3, \ | |
NOTE_E3,NOTE_E3,NOTE_D3,NOTE_D3,NOTE_C3,NOTE_C3,NOTE_B2, \ | |
NOTE_E3,NOTE_E3,NOTE_D3,NOTE_D3,NOTE_C3,NOTE_C3,NOTE_C3,NOTE_C3,NOTE_B2, \ | |
NOTE_C3,NOTE_C3,NOTE_E3,NOTE_E3,NOTE_F3,NOTE_F3,NOTE_E3, \ | |
NOTE_D3,NOTE_D3,NOTE_C3,NOTE_C3,NOTE_F3,NOTE_G3,NOTE_G3,NOTE_E3}; | |
//每個音階的長度 | |
int beatRight[]={4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,8,8,4,4, \ | |
4,4,4,4, 4,4,2, \ | |
4,4,4,4, 4,8,8,2}; | |
void setup() | |
{ | |
toneLeft.begin(3); | |
toneRight.begin(2); | |
} | |
void loop() { | |
for(int i=0; i<=44; i++) | |
{ | |
int durationLeft = 1000/beatLeft[i]; //左聲道每個音的撥放時間 | |
int durationRight = 1000/beatRight[i]; //右聲道每個音的撥放時間 | |
toneLeft.play(starLeft[i], durationLeft); //撥放左聲道 | |
toneRight.play(starRight[i],durationRight); //撥放右聲道 | |
int pauseBetweenNote=durationLeft * 1.15; //設定每個音中間的間隔 | |
delay(pauseBetweenNote); | |
} | |
delay(3000); //三秒後重複撥放 | |
} | |
備註:
- 本程式需要用到Tone函式庫,請在下載後自行解壓縮到libraries資料夾
- 本程式需要用到pitches.h標頭檔,請在下載後放到和本程式同一個專案資料夾
- 程式中撥放音樂的原理和之前的文章[模組介紹:faya蜂鳴器模組]類似,大家可以參考。
- 為了讓左聲道和右聲道的音樂在同一個Loop中撥放,我們修改了一 點點樂譜,讓左聲道和右聲道讀取的音符數量相同 (同樣45個音符)。
範例結果:
討論:
Arduino 內建的Tone()函式,由於功能的限制(Timer數量),只能一次對一個接腳輸出一個音階,無法同時讓兩個接腳發聲,因此我們借用外來的函式庫解決此問題,在UNO上最多可以同時發出三個音階,有興趣的人可以參考函式作者網站上的解釋。我們剛好藉此機會示範此函式庫的使用方式,並且將結果展示在faya雙聲道喇叭模組上。
也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
沒有留言:
張貼留言