Basic Tutorial for Arduino, 感測器 Sensor, 進階篇

【Arduino進階教學】聲音感測器原理與類比訊號讀取:Serial 序列埠監測實作

一、 聲音感測器模組 (Sound Sensor) 運作原理

聲音感測器(Sound Sensor) 是一種能將環境聲波(振動)轉化為電壓訊號的感測模組。在 Arduino 專案中,聲音感測器主要用於檢測周圍環境的聲音強度或是否有聲音發生,非常適合用來製作拍手聲控燈、互動式機器人、音樂燈光秀或噪音監測器。

需特別注意的是:一般的聲音感測器並非專業麥克風,它無法錄音或識別特定的語音內容(如語音辨識),而是透過測量音量振幅大小來觸發特定動作。

常見聲音感測器模組比較:紅板 vs. LM386

市面上有許多款式的 Arduino 聲音感測器,挑選適合專案需求與預算的模組能讓開發更順利:

模組類型核心特色優點缺點適用情境
市售紅板聲音模組搭載通用比較器 IC (如 LM393)價格非常便宜、結構簡單靈敏度較低、背景雜訊高初學者入門練習、簡易開關觸發
高感度 LM386 模組採用 LM386 專業音訊放大晶片靈敏度極佳、能捕捉細微聲音變化價格相對較高精密聲控專案、音樂動態燈光

 

 

米羅非常推薦這款超好用的LM386聲音感測器模組,採用音頻處理晶片LM386音頻放大IC,它可以測得聲音比較細微的變化,但相對的價錢自然就比較貴了。

購買原廠高感度LM386聲音感測器模組:

LM386 聲音感測器模組

 

二、 實驗所需材料與電路接線圖 (Hardware Setup)

本實作直接透過 AO (Analog Output) 腳位讀取環境音量的連續變化,並透過 Arduino 的序列埠(Serial Monitor)將數值輸出。

🛒 準備材料

  • Arduino Uno 開發板 x 1

  • 聲音感測器模組 x 1

  • 杜邦線 3 根

🛍️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含豐富驅動專案模組)

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

 

⚡ 腳位對接說明 (Pin Mapping)

聲音感測器引腳Arduino Uno 引腳說明
VCC5V電源正極 (5V)
GNDGND電源接地
AO / OUTA0類比訊號輸出腳位
DONC (不接)數位輸出 (此範例不使用)

三、 完整程式碼實作:A0 類比訊號讀取與序列埠監控

使用 analogRead(A0) 讀取 0~1023 的類比數值,並經由 9600 Baud Rate 的序列埠列印出當前聲音強度。

int sensorPin =A0 ;  // define analog port A0
int value = 0;    //set value to 0
void setup() 
{
  Serial.begin(9600); //set the baud rate to 9600
} 
void loop() 
{
  value = analogRead(sensorPin);  //set the value as the value read from A0
  Serial.println(value, DEC);  //print the value and line wrap
  delay(100);  //delay 0.1S
}

實作測試與靈敏度調整指南(觀察聲音訊號波形)

上傳程式碼後,請按以下步驟操作:

  1. 點擊 Arduino IDE 功能選單的 「工具」➔「序列繪圖家」(Serial Plotter)(快捷鍵 Ctrl + Shift + L)。

  2. 將波特率設定為 9600 baud

  3. 嘗試靠近感測器大聲說話、敲擊桌面或近距離拍手

  4. 你會觀察到波形出現明顯的起伏脈衝,波峰高度代表當下聲壓的大小。

▼ 下載程序完成後,打開序列繪圖家,靠近聲音感測器大聲說話,或是近距離拍手,就會發現數值會產生變化。

四、 常見問題與除錯 (FAQ)

Q1:打開「序列埠監視器」後看到一堆亂碼怎麼辦?

  • 解答: 請檢查序列埠監視器右下角的波特率(Baud Rate)是否設定為 9600 baud(必須與程式中的 Serial.begin(9600) 一致)。

Q2:對著麥克風說話或拍手,讀取到的數值變化幅度很小?

  • 解答: 請使用十字螺絲起子微調模組上的藍色可變電阻,適度旋轉以調整基準電壓,讓聲音進來時的數值波動更加明顯。

Q3:如何以圖表方式更直觀地觀察聲音波形?

  • 解答: 在 Arduino IDE 選單中點選 「工具」 「序列埠繪圖器 (Serial Plotter)」,就能將 Serial.println(value, DEC) 輸出的連續數值即時畫成聲波折線圖。

🔗 延伸閱讀與推薦課程