頻率與音高-蜂鳴器發聲原理探討
-
-
我們在使用Arduino控制蜂鳴器發出樂音時,圖形化程式介面提供了我們方便快速的程式方塊,如下圖第2部份可以直接拉出要演奏的音高,不過對應到右側的原始碼其實是tone( )的函式,下的參數分別是( 腳位 , 聲音頻率 , 聲音長度-固定500毫秒 ),再看看第一部份是比較彈性的,可以自定聲音的頻率,這樣就可以有升降音;也可以調整聲音的長度。
-
不過國中生如果已經學過週期及頻率的概念(八年級),在教蜂嗚器時只學聲音模塊的使用是有點可惜的,事實上tone( )中聲音頻率的數字的意義是值得帶孩子一起來探討的。八年級理化在波動與聲音單元提到以下的概念 :
*波的週期 : 產生一個波所需要的時間(秒/次)=一個波峰到下一個波峰出現的時間
*頻率 : 每秒出現的波的數量 (次/秒)-
課本中以繩波的波形來解釋波的頻率是指一秒鐘產生幾個波,用來解釋蜂鳴器的發聲原理可能有點難理解,我會想用電鈴敲擊的方式來帶孩子來具體一點的類化。好好玩物理網用電磁鐵原理實作了槌子不斷敲擊鈴碗的教具,不過這裡沒有調速的功能。
-
下圖我們利用市面上容易購得的直流電可調電阻模組,控制馬達輸出不同的轉速,敲擊旁邊切開了口的保特瓶,而敲擊的做法是利用可活動的積木加上華司墊片來撞擊保特瓶。
-
影片中可以發現敲擊的聲音很像在催機車油門,轉速低時可以分辨出每次敲擊之間的時間間隔,但隨著轉速拉高,每次敲擊的間隔就聽不出來了,且聲音由低轉高。
-
下圖顯示馬達轉盤上有4個活動式鐵片(華司墊片加上積木釦固定),如果馬達在一秒內可以轉100圈,就可以有100X4=400下的敲擊。一次的敲擊到下一次的敲擊之間的時間差就叫做週期,馬達轉速愈快時,一秒鐘內敲擊的次數就會愈多,也就是敲擊頻率愈高,聽到的聲響就會愈高。
-
對照到蜂鳴器的發聲原理也是一樣,Arduino的蜂鳴器腳位給他高電位(訊號=1)時,會有一個噠的聲音。給他低電位(訊號=0)時,則沒有聲音。但在寫程式時要有訊號延遲的概念,只下高電位指令而沒在下一個低電位指令之間加上延遲(delay)的時間是做不出效果的(相同道理,低電位指令到下一個高電位指令之間也要加上延遲(delay)的時間。
-
參照下面的音頻表,赫茲(符號:Hz)是頻率的國際單位制單位,表示每一秒週期性事件發生的次數,以要發出一個Do的音為例,蜂鳴器要在一秒內做出261次敲擊(發聲延遲+無聲延遲)的頻率,也就是每一次(發聲延遲+無聲延遲)的時間長度=1 秒 / 261 次。
音名中央CDEFGAB高音C唱名DoReMiFaSoLaSiDo頻率(Hz)261293329349392440493523-
不過在Arduino用的delay指令的時間單位是亳秒(千分之一秒)以及再把亳秒切成一千份的微秒(百萬分次一秒)。由於delay裡頭的數字必須是整數(若是小數的話會自動只取整數部份),因此若用毫秒來做計時單位時:發出Do的時間間隔為1,000毫秒/261次=3.8314..毫秒。而
發出Re的時間間隔(1,000毫秒/293次=3.4129..毫秒。取整數的結果都同樣3毫秒。發聲的結果都是每隔3毫秒發一次(一秒約333次)。
-
因此我們得用更小的時間單位—微秒,1秒換成1,000,000微秒,算出:發出Do的時間間隔為1,000,000毫秒/261次=3831.4..微秒,取整數3831。而發出Re的時間間隔為1,000,000毫秒/293次=3412.9..微秒,取整數3412。跟Do差了419微秒。
-
到這裡,我們終於進到實作的部份。我們在Arduino接上可調電阻,想利用可調電阻A0的類比值(0~1023)來決定蜂鳴器D9發聲的頻率。
-
回圈中利用快速的控制蜂鳴器高低電壓以及中間延遲的時間,A0腳位從0~1023調變就可以製造出不同音高。而2個高低電壓之間延遲的時間加總起來的時間間隔正好等於1,000,000 / A0 。
-
如果想裝上LCD顯示器顯示目前A0的值,則要考慮LCD顯示程式塊跟蜂鳴器的程式放在一起會有快速閃爍的困擾,可以考慮加上判斷按鈕的按壓與否來做切換。
-
-
-
我們在使用Arduino控制蜂鳴器發出樂音時,圖形化程式介面提供了我們方便快速的程式方塊,如下圖第2部份可以直接拉出要演奏的音高,不過對應到右側的原始碼其實是tone( )的函式,下的參數分別是( 腳位 , 聲音頻率 , 聲音長度-固定500毫秒 ),再看看第一部份是比較彈性的,可以自定聲音的頻率,這樣就可以有升降音;也可以調整聲音的長度。
-
不過國中生如果已經學過週期及頻率的概念(八年級),在教蜂嗚器時只學聲音模塊的使用是有點可惜的,事實上tone( )中聲音頻率的數字的意義是值得帶孩子一起來探討的。八年級理化在波動與聲音單元提到以下的概念 :
*波的週期 : 產生一個波所需要的時間(秒/次)=一個波峰到下一個波峰出現的時間
*頻率 : 每秒出現的波的數量 (次/秒)-
課本中以繩波的波形來解釋波的頻率是指一秒鐘產生幾個波,用來解釋蜂鳴器的發聲原理可能有點難理解,我會想用電鈴敲擊的方式來帶孩子來具體一點的類化。好好玩物理網用電磁鐵原理實作了槌子不斷敲擊鈴碗的教具,不過這裡沒有調速的功能。
-
下圖我們利用市面上容易購得的直流電可調電阻模組,控制馬達輸出不同的轉速,敲擊旁邊切開了口的保特瓶,而敲擊的做法是利用可活動的積木加上華司墊片來撞擊保特瓶。
-
影片中可以發現敲擊的聲音很像在催機車油門,轉速低時可以分辨出每次敲擊之間的時間間隔,但隨著轉速拉高,每次敲擊的間隔就聽不出來了,且聲音由低轉高。
-
下圖顯示馬達轉盤上有4個活動式鐵片(華司墊片加上積木釦固定),如果馬達在一秒內可以轉100圈,就可以有100X4=400下的敲擊。一次的敲擊到下一次的敲擊之間的時間差就叫做週期,馬達轉速愈快時,一秒鐘內敲擊的次數就會愈多,也就是敲擊頻率愈高,聽到的聲響就會愈高。
-
對照到蜂鳴器的發聲原理也是一樣,Arduino的蜂鳴器腳位給他高電位(訊號=1)時,會有一個噠的聲音。給他低電位(訊號=0)時,則沒有聲音。但在寫程式時要有訊號延遲的概念,只下高電位指令而沒在下一個低電位指令之間加上延遲(delay)的時間是做不出效果的(相同道理,低電位指令到下一個高電位指令之間也要加上延遲(delay)的時間。
-
參照下面的音頻表,赫茲(符號:Hz)是頻率的國際單位制單位,表示每一秒週期性事件發生的次數,以要發出一個Do的音為例,蜂鳴器要在一秒內做出261次敲擊(發聲延遲+無聲延遲)的頻率,也就是每一次(發聲延遲+無聲延遲)的時間長度=1 秒 / 261 次。
音名中央CDEFGAB高音C唱名DoReMiFaSoLaSiDo頻率(Hz)261293329349392440493523-
不過在Arduino用的delay指令的時間單位是亳秒(千分之一秒)以及再把亳秒切成一千份的微秒(百萬分次一秒)。由於delay裡頭的數字必須是整數(若是小數的話會自動只取整數部份),因此若用毫秒來做計時單位時:發出Do的時間間隔為1,000毫秒/261次=3.8314..毫秒。而發出Re的時間間隔(1,000毫秒/293次=3.4129..毫秒。取整數的結果都同樣3毫秒。發聲的結果都是每隔3毫秒發一次(一秒約333次)。
-
因此我們得用更小的時間單位—微秒,1秒換成1,000,000微秒,算出:發出Do的時間間隔為1,000,000毫秒/261次=3831.4..微秒,取整數3831。而發出Re的時間間隔為1,000,000毫秒/293次=3412.9..微秒,取整數3412。跟Do差了419微秒。
-
到這裡,我們終於進到實作的部份。我們在Arduino接上可調電阻,想利用可調電阻A0的類比值(0~1023)來決定蜂鳴器D9發聲的頻率。
-
回圈中利用快速的控制蜂鳴器高低電壓以及中間延遲的時間,A0腳位從0~1023調變就可以製造出不同音高。而2個高低電壓之間延遲的時間加總起來的時間間隔正好等於1,000,000 / A0 。
-
如果想裝上LCD顯示器顯示目前A0的值,則要考慮LCD顯示程式塊跟蜂鳴器的程式放在一起會有快速閃爍的困擾,可以考慮加上判斷按鈕的按壓與否來做切換。
-
Please sign in to vote.