2017年5月23日 星期二

模組介紹 : faya蜂鳴器模組


學習目標 : 認識faya蜂鳴器模組的功能及使用方式
學習時間 : 50min
示範模組 : (1) fayaduino UNO
                 (2) faya 電源底板
                 (3) faya蜂鳴器模組
工具 : (1) 樂高積木底板 (相容)


====================功能介紹====================
faya 蜂鳴器模組擁有1個數位輸入埠BZ,只要給他規律的頻率,就能輸出對應的音頻,規律的頻率可利用Arduino中的tone()函式達成

    • 當輸入nHz的頻率至BZ埠時,蜂鳴器產生nHz的音頻
    • tone(腳位, 頻率, 輸出時間-微秒)

      註1 : NC代表 No Connection,沒有作用
      註2 : 蜂鳴器廠商大多在表面貼一張貼紙,降低輸出音量,使用者可視情況撕下 

       

      下表為常見用的音頻頻率,Arduino將8個音階的頻率定義在pitches.h 檔裏,可參考範例程式



      ====================原理知識====================
      以下解釋提供給有需要知道背後原理的人:

      蜂鳴器種類有壓電式和電磁式兩種,依驅動方式有可分為自激和他激式,以下兩個連結有非常詳細的說明與比較:

      壓電式和電磁式蜂鳴器的比較
      自激與他激式蜂鳴器的差別

      faya蜂鳴器模組採用的蜂鳴器是他激-電磁式蜂鳴器,因此體積較小,但需要外部的方波訊號讓蜂鳴器產生音頻,這部分的工作就交給Arduino了,也是我們本文討論的重點。fayalab還有另一款[數位式蜂鳴器模組],採用的是自激-壓電式的蜂鳴器,大家可以參考連結文章。

      模組電路很單純,方波訊號由BZ埠輸入經放大後推動蜂鳴器,產生和方波同樣頻率的音頻


      由於蜂鳴器屬於電感式負載,電晶體經輸入方波切換時會因為楞次定律產生逆電壓,此時需要並聯一顆二極體 (fly black diode),消除逆電流,不然對電晶體會造成損害,解釋於下圖中:

      Qon : 輸入方波High周期,電晶體導通,電流方向往下流 ,負載上的電壓上正下負。(下圖左)
      Qff: 方波進入Low周期,電晶體截止瞬間,負載上的電壓因楞次效應變成上負下正,此時如果沒有對地迴路,正端的電壓會穿透半導體空乏區產生對地的電流,造成電晶體損壞,因此我們增加一個二極體讓電流往Vcc回流。(下圖中、右)


      ===================範例實作(1)===================
      了解模組功能(原理)後,我們用以下範例來展示模組的功能:

      目標:
      (1) 利用tone函示讓蜂鳴器產生3秒鐘的Do

      接線:
      (1) 電源線連接
           如下圖所示,連接的說明請看這篇文章 簡易版


      (2) 訊號線連接
            Arduino_8    ===>  蜂鳴器_BZ


      範例程式:

      備註:
      - 第一個範例很簡單,我們呼叫tone()函式,並填入腳位、頻率、時間。

      範例結果:
      成功上傳後蜂鳴器就會發出3秒鐘的第5階Do(C5)音,很直覺的結果,這邊就不提供錄影檔了!

       ===================範例實作(2)===================
      目標:
      (1) 建立一C5到C6的音階陣列
      (2) 利用tone函示重複撥每個音階,每個音長度0.5秒,間隔0.2秒

      接線:
      和上一範例相同,無須更改

      範例程式:

      備註:
      - 這個範例我們把tone()程式從setup{ }區塊裡挪到loop{ }區塊,這樣loop{ }區塊裡面的程式就會一直重複執行。
      - L21~L25利用for迴圈,輪流撥放C5notes[]陣列內的八個音階

      範例結果:



      ===================範例實作(3)===================
      目標:
      (1) 利用Arduino所提供的pitch.h音階列表,撥放小星星

      接線:
      和上一範例相同,無須更改

      範例程式:

      備註:
      - L10: 將Arduino內建的 "pitches.h"檔案中內建了每個音符的音階(含升降音),記得把這個檔案和範例檔案(EMBuzzer_3.ino)放在同一個資料夾。
      - 每個音符需要有音階(發出哪個頻率)和音長(多久時間)資訊,才能完整的撥放一個音,我們建立了兩個陣列,star[ ]和beat[ ]分別存放小星星的音階和每個音階的音長資訊,在L40行的時候一個一個輪流讀取放到tone()函式撥放。

      範例結果:


      我們在這篇範例裡面從一個音開始,一步一步的引導到讓蜂鳴器唱一首歌,希望大家未來能善用蜂鳴器模組,讓自己的作品更生動!

      歡迎大家在底下留言或到我們的粉絲團留言喔!
      ====================================
      fayalab 粉絲團
      FB本篇留言版


       

      沒有留言:

      張貼留言