Basic Tutorial for Arduino, 入門篇

【Arduino入門教學】第10篇:蜂鳴器發聲與程式控制(有源 vs. 無源蜂鳴器接線與音調範例)

在 Arduino 實作專案中,若需要讓系統發出警報聲、按鍵音效或播放簡單旋律,蜂鳴器(Buzzer) 是最簡單且低成本的聲音輸出元件。本篇文章將帶您了解蜂鳴器的分類原理,並透過 Arduino Uno 控制「有源蜂鳴器」與「無源蜂鳴器」發出聲音。

 

一、蜂鳴器原理介紹:有源蜂鳴器 vs. 無源蜂鳴器

蜂鳴器主要分為有源蜂鳴器(Active Buzzer)與無源蜂鳴器(Passive Buzzer)兩種,這裡的「源」指的是震盪源(Oscillator)

特性有源蜂鳴器 (Active Buzzer)無源蜂鳴器 (Passive Buzzer)
內部震盪源
控制方式給予高電位(HIGH)即可發聲需持續輸入特定頻率的 PWM 或方波訊號
音調變化只能發出固定頻率的聲音可透過改變輸入頻率控制音高/旋律
外觀判斷底部通常有黑膠封裝,貼有綠色/白色貼紙底部可直接看到綠色電路板

💡 小貼士:如果想要讓 Arduino 播放單純的警報嗶嗶聲,選用「有源蜂鳴器」最簡單;如果想發出 Do-Re-Mi 等不同音高,則必須使用「無源蜂鳴器」。

二、實驗所需材料與工具

實作本實驗前,請先準備以下硬體元件:

  • Arduino Uno R3 開發板 x 1

  • USB 數據傳輸線 x 1

  • 有源蜂鳴器 x 1

  • 無源蜂鳴器 x 1

  • 麵包板 x 1

  • 杜邦線 / 麵包板跳線 若干

👉 尚未購買零件嗎? 推薦使用 米羅科技 Arduino 程式學習套件組,一次備齊基礎教學所需的所有元件!

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

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

三、硬體接線說明

蜂鳴器通常有兩根引腳:

  1. 長腳 / 標示「+」:接 Arduino 的數位輸出腳位(本範例使用 Pin 13)。

  2. 短腳 / 標示「-」:接 Arduino 的 GND(接地)。

四、程式設計與範例程式碼

範例 1:有源蜂鳴器控制(定頻蜂鳴)

有源蜂鳴器控制非常簡單,只需要透過 digitalWrite() 給予高低電位,就能控制蜂鳴器的開與關。

/*
  Arduino 有源蜂鳴器控制範例
  功能:蜂鳴器響 2 秒、靜音 2 秒,持續循環
*/

const int buzzPin = 13; // 設定蜂鳴器連接至數位引腳 13

void setup() {
  pinMode(buzzPin, OUTPUT); // 將 13 號引腳設定為輸出模式
}

void loop() {
  digitalWrite(buzzPin, HIGH); // 發出聲音
  delay(2000);                 // 持續 2 秒
  digitalWrite(buzzPin, LOW);  // 靜音
  delay(2000);                 // 持續 2 秒
}

範例 2:無源蜂鳴器控制(自訂頻率與音序)

無源蜂鳴器需要透過快速切換高低電位來產生特定頻率的方波。

方式 A:使用數位訊號交替觸發(原實驗方法)

透過改變 delay() 的時間,手動產生不同頻率的波形:

/*
  Arduino 無源蜂鳴器手動方波控制範例
*/

const int buzzerPin = 13; // 設定蜂鳴器控制腳位

void setup() {
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  // 輸出頻率 1:高頻短音
  for (int i = 0; i < 50; i++) {
    digitalWrite(buzzerPin, HIGH);
    delay(1);
    digitalWrite(buzzerPin, LOW);
    delay(1);
  }
  delay(1000); // 間隔 1 秒

  // 輸出頻率 2:低頻長音
  for (int i = 0; i < 100; i++) {
    digitalWrite(buzzerPin, HIGH);
    delay(3);
    digitalWrite(buzzerPin, LOW);
    delay(3);
  }
  delay(1000); // 間隔 1 秒
}

方式 B:使用 Arduino 內建 tone() 函式(推薦用法)

Arduino 提供官方的 tone(pin, frequency, duration) 語法,能更精準且簡潔地控制無源蜂鳴器的音高:

/*
  Arduino 官方 tone() 函式範例
*/

const int buzzerPin = 13;

void setup() {
  // tone() 不需要特別設定 pinMode
}

void loop() {
  tone(buzzerPin, 440, 500); // 發出 440Hz (A4音) 聲音,持續 0.5 秒
  delay(1000);
  
  tone(buzzerPin, 880, 500); // 發出 880Hz (A5音) 聲音,持續 0.5 秒
  delay(1000);
}

五、程式說明與實驗結果

  1. 有源蜂鳴器:上傳程式後,引腳 13 輸出高電位時,蜂鳴器會發出固定的嗶聲;輸出低電位時則關閉。

  2. 無源蜂鳴器:藉由程式控制電位高低切換的間隔時間(週期的長短),蜂鳴器將會發出一長一短且不同音調的警報聲響。

六、常見問題解答 (FAQ)

Q1:為什麼我的蜂鳴器接到 Pin 13 卻一直發出很微弱的聲音?

解答:請確認您使用的是有源還是無源蜂鳴器。若是無源蜂鳴器,直接給予持續高電位只會在接通瞬間發出微弱一聲「喀」,必須透過 Pulse/PWM 或 tone() 函式給予脈衝才會持續發聲。

Q2:使用蜂鳴器需要加上限流電阻嗎?

解答:一般微型微型蜂鳴器工作電流約 10~30mA,Arduino I/O 腳位可直接驅動。若長時間使用或蜂鳴器功率較大,建議搭配 100Ω 電阻或使用 NPN 電晶體(如 S8050)進行驅動放大。

📚相關教學文章推薦

相關文章