一、 實驗說明:打造智慧動感聲控音樂節奏燈!
在創客互動專題與智慧居家情境中,聲音感知與燈光互動是非常受歡迎的應用範例。不論是跟隨音樂律動閃爍的氣氛燈、聲控開關,或是會隨聲音跳舞的機器人,都離不開靈敏的聲音檢測模組。
本實驗米羅將帶大家使用 ESP32 開發板 搭配 LM386 聲音感測器模組 與 多顆 LED 燈。LM386 模組內建音頻放大晶片,能精準捕捉環境中細微的聲音強度變化。當聲音類比訊號超過設定的閾值時,ESP32 便會驅動 LED 陣列隨音樂拍子閃爍,輕鬆打造炫酷的動感聲控節奏燈!
二、 實驗材料準備清單
本篇實作 ESP32 聲控音樂節奏燈專案所需的硬體元件如下:
-
ESP32 開發板
-
麵包板 (Breadboard)
-
LM386 聲音感測器模組
-
直插式 LED 燈(可挑選不同顏色增添視覺效果)
-
220Ω 限流電阻
-
麵包板跳線 若干
-
USB 傳輸線
⭐ 一次備齊創客工具!
歡迎直接購買米羅科技的 ESP32 物聯網應用學習套件,免去東奔西跑湊零件的煩惱。內含 LM386 聲音感測器、各式 LED 燈及豐富基礎元件,是學校教學與專案開發的最佳首選!
三、 核心知識:LM386 聲音感測器工作原理與接線
1. LM386 聲音感測器模組簡介
傳統的聲音感測器通常只能簡單判斷「有無聲音」(數位訊號輸出),而 LM386 聲音感測器模組 採用了 LM386 音頻功率放大 IC,配合駐極體麥克風(Mic),能將接收到的微弱聲波訊號進行放大處理。透過類比輸出腳位(AO),ESP32 能讀取到更細緻的聲壓電壓變化,非常適合做音樂韻律與聲控互動。
2. 模組電位器靈敏度調節
LM386 模組板載設有可變電阻(電位器),旋轉它可以調整麥克風的放大增益與靈敏度,以適應不同噪音程度的環境背景音。
3. ESP32 與各模組接線對照表
| 元件名稱 | 元件針腳 / 標記 | 連接至 ESP32 腳位 | 腳位功能說明 |
| LM386 聲音感測器 | VCC | 5V / VIN | 電源輸入(建議 5V 供電以獲得最佳放大效果) |
| LM386 聲音感測器 | GND | GND | 電源接地端 |
| LM386 聲音感測器 | AO (Analog Out) | GPIO 36 (VP) | ADC1 通道,讀取聲音強度類比電壓 |
| LED 陣列 1~5 | 正極 (長腳) | GPIO 16, 17, 5, 18, 19 | 數位輸出腳,送出高電位點亮 LED(需串接 220Ω 電阻) |
| LED 陣列 1~5 | 負極 (短腳) | GND | 電源接地端 |
四、 實作實驗程式碼:聲音採樣與 LED 律動觸發
請將以下程式碼複製到 Arduino IDE 中並上傳至 ESP32 開發板:
1. 範例程式碼
程式:
// 定義 LED 陣列腳位
int led_1 =16;
int led_2 =17;
int led_3 =5;
int led_4 =18;
int led_5 =19;
int microphone = 36; //LM386聲音感測器AO信號腳 連接到ESP32 GPIO36
void setup()
{
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
pinMode(led_5, OUTPUT);
pinMode(microphone, INPUT);
Serial.begin(9600);
}
void loop()
{
int val=analogRead(microphone); // 儲存聲音讀取值的變數
Serial.println(val);
if (val>1200){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, HIGH);
digitalWrite(led_5, HIGH);
}else if (val>900){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else if (val>600){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else if (val>300){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else if (val>10){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else{
digitalWrite(led_1, LOW);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}
delay(100);
}
2. 燒錄與操作測試
-
點擊 Arduino IDE 的 「上傳 (Upload)」 按鈕將程式碼上傳至 ESP32。
-
開啟 「序列埠監控視窗 (Serial Monitor)」(鮑率設為 9600)。
- 經由LM386聲音感測器感知類比值的變化進行調控LED的明暗。然後再播放個快節奏的舞曲,這時LED將會隨著音樂的韻律節奏進行閃爍變化。
五、 初學者常見卡關問題與排錯指南(Troubleshooting)
1. LED 一直常亮或完全不亮?
-
閾值需要微調:每個環境的背景噪音大小不同,請先開啟序列埠監控視窗觀察平時的聲音數值,並將程式碼中的
1200調整為比平時背景音高出約300~500的數值。 -
調整電位器:用小螺絲起子旋轉 LM386 模組上的藍色可變電阻,微調麥克風靈敏度。
2. 為什麼拍手有反應,播放音樂時 LED 卻反應很慢?
-
採樣延遲過長:請確認
loop()尾端採樣延遲delay()不要設得太大(建議設定在 10~50 ms 之間),才能及時捕捉到音樂拍子的瞬態高音。
3. LED 燈未加限流電阻會怎樣?
-
防止過流損壞:ESP32 的 GPIO 引腳承受電流有限,接 LED 時務必串接 220Ω 電阻,避免過大電流燒毀 ESP32 腳位或 LED 燈泡。
六、 結語與下一篇教學
恭喜你!成功掌握了使用 LM386 聲音感測器模組搭配 ESP32 實作聲控音樂節奏燈的技巧。這套機制能進一步擴充為更豐富的專題,例如依據音量高低依序點亮不同數量 LED 的「等化器音量條(VU Meter)」!