頻率與音高-蜂鳴器發聲原理探討

頻率與音高-蜂鳴器發聲原理探討

    • 我們在使用Arduino控制蜂鳴器發出樂音時,圖形化程式介面提供了我們方便快速的程式方塊,如下圖第2部份可以直接拉出要演奏的音高,不過對應到右側的原始碼其實是tone( )的函式,下的參數分別是( 腳位 , 聲音頻率 , 聲音長度-固定500毫秒 ),再看看第一部份是比較彈性的,可以自定聲音的頻率,這樣就可以有升降音;也可以調整聲音的長度。

    • 不過國中生如果已經學過週期及頻率的概念(八年級),在教蜂嗚器時只學聲音模塊的使用是有點可惜的,事實上tone( )中聲音頻率的數字的意義是值得帶孩子一起來探討的。八年級理化在波動與聲音單元提到以下的概念 :
    *波的週期 : 產生一個波所需要的時間(秒/次)=一個波峰到下一個波峰出現的時間
    *頻率 : 每秒出現的波的數量 (次/秒)
    • 課本中以繩波的波形來解釋波的頻率是指一秒鐘產生幾個波,用來解釋蜂鳴器的發聲原理可能有點難理解,我會想用電鈴敲擊的方式來帶孩子來具體一點的類化。好好玩物理網用電磁鐵原理實作了槌子不斷敲擊鈴碗的教具,不過這裡沒有調速的功能。
    • 下圖我們利用市面上容易購得的直流電可調電阻模組,控制馬達輸出不同的轉速,敲擊旁邊切開了口的保特瓶,而敲擊的做法是利用可活動的積木加上華司墊片來撞擊保特瓶。

    • 影片中可以發現敲擊的聲音很像在催機車油門,轉速低時可以分辨出每次敲擊之間的時間間隔,但隨著轉速拉高,每次敲擊的間隔就聽不出來了,且聲音由低轉高。
    • 下圖顯示馬達轉盤上有4個活動式鐵片(華司墊片加上積木釦固定),如果馬達在一秒內可以轉100圈,就可以有100X4=400下的敲擊。一次的敲擊到下一次的敲擊之間的時間差就叫做週期,馬達轉速愈快時,一秒鐘內敲擊的次數就會愈多,也就是敲擊頻率愈高,聽到的聲響就會愈高。

    • 對照到蜂鳴器的發聲原理也是一樣,Arduino的蜂鳴器腳位給他高電位(訊號=1)時,會有一個噠的聲音。給他低電位(訊號=0)時,則沒有聲音。但在寫程式時要有訊號延遲的概念,只下高電位指令而沒在下一個低電位指令之間加上延遲(delay)的時間是做不出效果的(相同道理,低電位指令到下一個高電位指令之間也要加上延遲(delay)的時間。

    • 參照下面的音頻表,赫茲(符號:Hz)是頻率的國際單位制單位,表示每一秒週期性事件發生的次數,以要發出一個Do的音為例,蜂鳴器要在一秒內做出261次敲擊(發聲延遲+無聲延遲)的頻率,也就是每一次(發聲延遲+無聲延遲)的時間長度=1 秒 / 261 次。
    音名
    中央C
    D
    E
    F
    G
    A
    B
    高音C
    唱名
    Do
    Re
    Mi
    Fa
    So
    La
    Si
    Do
    頻率(Hz)
    261
    293
    329
    349
    392
    440
    493
    523
    • 不過在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 次。
    音名
     
    中央C
     
    D
     
    E
     
    F
     
    G
     
    A
     
    B
     
    高音C
     
    唱名
     
    Do
     
    Re
     
    Mi
     
    Fa
     
    So
     
    La
     
    Si
     
    Do
     
    頻率(Hz)
     
    261
     
    293
     
    329
     
    349
     
    392
     
    440
     
    493
     
    523
     
    • 不過在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.