聲音檢測∕聲音放大器(一):模組介紹與自製LM386麥克風聲音放大器

本文旨在補充《超圖解Arduino互動設計入門》第六章「麥克風聲音放大器」單元,書本使用LM358運算放大器自製一個「半波」聲音放大器,並且透過它來製作「拍手聲控」開關。如果不打算自己DIY麥克風聲音放大器,可以選用現成的「聲音偵測」模組。

下圖是筆者選購的兩個聲音偵測模組,左邊是「高感度麥克風傳感器模塊」,在產品說明頁提到它可以檢測聲音的大小、工作電壓5V、增益可調、類比輸出。

高感度麥克風傳感器模塊和聲音檢測傳感器模塊

右邊那一款是「聲音檢測傳感器模塊」,工作電壓4V~6V,當有聲音時輸出低電位,可用於聲控燈、聲音控制和聲音檢測等場合。

這兩個模組其實是一樣的東西,它們的電路都採用LM393這個「比較器」IC。當此模組偵測到音量大於某個程度時,就輸出低電位、平時則輸出高電位;換句話說,它們用於偵測「有沒有」聲音,而不是放大聲音訊號。

使用Arduino的「序列繪圖家」描繪類比訊號波型

為了清楚比較「聲音偵測」和「聲音放大器」模組的差別,我們可以寫一個簡單的程式碼,把類比輸入腳(A0)輸出到序列埠,並透過Arduino IDE內建的「序列繪圖家(Serial Plotter)」工具描繪出類比資料:

unsigned int snd = 0;

void setup() {
    Serial.begin(9600);
}

void loop() {
    snd = analogRead(A0);
 
    Serial.println(snd);
    delay(10);
}

把書本的LM358聲音放大器電路的輸出,接在Arduino Uno的類比A0腳,然後在Uno控制板執行上面的程式碼,並選擇IDE裡的「工具→序列繪圖家」指令,呈現的「聲波圖」如下:

LM358聲音放大器電路的波形輸出

同一個程式碼,將「聲音檢測傳感器模塊」的輸出連接在Arduino板的A0腳,呈現的訊號波形像「數位」訊號,幾乎只有高、低電位變化

聲音檢測傳感器模塊的波形輸出

製作如書本的「拍手聲控」開關應用,可使用「聲音檢測傳感器模塊」;但如果要製作隨音量大小變化的互動效果,例如,口形隨音量變化的玩偶,或者隨音量變化的燈光效果,上面兩個「聲音檢測」模組就不適合了。

口形變化的人偶

動手做:自製LM386麥克風聲音放大器

市面上的「聲音放大器」模組,大多是採用LM386電路的「全波」放大器。模組的外型跟「聲音檢測器」很像,購買之前請確認模組上面的IC型號,不是LM393。當然,我們也可以自己買零件從頭組裝。

LM386的電路符號和運算放大器相同,但它實際上是聲頻功率放大器,而且輸出端自動偏壓到電源電壓的一半,也就是說,聲頻放大的輸出是全波,不是只有正半波。LM386預設20倍電壓增益,只要外加少許被動元件,即可組成20~200倍增益的放大器。

全波形放大器

LM386的特點:

  • 工作電壓:4-12V或5-18V(LM386N-4型)
  • 靜態功耗(代表「無訊號輸入」)低,約4mA。
  • 外圍元件少。
  • 電壓增益可調,20-200。
  • 低失真度。

底下是LM386的接腳圖:

LM386的接腳圖

自製LM386聲音放大器的電路如下,關於LM386與此電路的進一步說明,請參閱下一篇文章。

自製LM386聲音放大器的電路

LM386麥克風聲音放大器的材料清單:

  • LM386聲頻放大器IC × 1
  • 電阻10Ω(棕黑黑)× 1
  • 電阻2.2KΩ(紅紅紅)× 1
  • 電容0.056µF (563) × 1
  • 電容0.1µF (104) × 2
  • 電容10µF × 2
  • 電容220µF × 1

電阻採1/4W,電容耐壓要大於6.3V。用麵包板組裝LM386聲音放大電路的示範:

LM386聲音放大器麵包板電路

同樣執行上一節的程式碼,連接LM386聲音放大電路所呈現的訊號波形:

LM386聲音放大電路的訊號波形

Posts created 467

20 thoughts on “聲音檢測∕聲音放大器(一):模組介紹與自製LM386麥克風聲音放大器

  1. 請問可以用聲音檢測,當音量達到條件呼叫語音辨識涵式?

    ok,google是這個原理嗎?

    1. 不是,google的語音辨識是你在google程式畫面時,它就一直在收音,類似有個僕人一直在你旁邊聽你說話,但是它平常不會搭話,只有在聽到”ok google”關鍵字時,才會回應,跟音量大小無關。

      thanks,
      jeffrey

    1. 這個模組在此是作為「音量大小」的感測器,如果要傳送聲音訊號,跟處理器的資源比較相關。

      thanks,
      jeffrey

  2. 想請問如果是想把他的訊號讀值轉換成分貝(db)是有可能的嗎? 
    如果可以的話那轉換式是?

  3. 老師,不好意思 請教一下兩個問題
    1. 您放了一個2.2k的電阻 再Vcc 和 麥克風 之間但spec 是放10k .我查了一下 這個電阻是因為要給電容麥克風電, 並給他一個bias 電壓.
    那怎樣的電阻才是適合的呢? 可不可以加個可變電阻 .使得一開始輸出的電壓再固定一個準位呢?

    2.輸出到喇叭您是用 220uF, spec上是用250uF. 網路上有的是給100uF 請問這會有甚麼影響嗎?
    因為我是電學初學者 所以可能問題有點笨 請多包涵

    1. 1. 可以接可變電阻,這個阻值會改變收音的音量。
      2. 這個電容用於濾除訊號中的直流成份。

      此聲音放大電路用於檢測音量大小,不是用於聆聽或錄音等高傳真視聽設備,所以不必太計較某些被動元件的數值。就像接LED的限流電阻,有人接330Ω, 680Ω, 1KΩ甚至2KΩ,都可以。通常只是因為做實驗時,剛好有某個可用的元件,就用上了。

      thanks,
      jeffrey

  4. 老師您好,我想做一個藍芽麥克風(只需要傳送wav音檔)來連接電腦,想請問一下可以在錄音的時候不連接Arduino板子嗎?
    我的想法是把hc-05藍芽模組、x00098錄音模組和電池連接起來使用,這樣是可行的嗎?

    1. HC-05是序列資料傳輸介面,預設速率僅9600bps,除非你自己改寫它的韌體程式,不然一定要接微電腦才能使用。

  5. 請教一個關於”電源使用”的問題
    我使用圖片中紅色的模組時候,因為板子上的電源輸出滿了(被其他感應器、顯示螢幕占用)
    A板子提供VCC & GND=>感測器
    感測器的Analog pin=>B板子
    這樣子測量不到訊號,請問是因為電路無法導通嗎?
    如果遇到供電不足的時候,應該怎麼做比較好呢?

  6. 在C:\Users\user\Documents\Arduino\libraries\sketch_may09a: no headers files (.h) found in C:\Users\user\Documents\Arduino\libraries\sketch_may09a裡找到無效的程式庫
    在執行程式碼時出現這組代碼,請問要安裝甚麼程式庫呢

    1. 那請問為什麼會跑出這組代碼呢? 有沒有辦法可以解決

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top