< All Topics
Print

【聲音】蜂鳴器 | DUAL22-2s | esp32

簡介

蜂鳴器(Buzzer)是一項常用的電子元件,除了運用無源蜂鳴器的特性,練習音高頻率、元件整合應用的控制方式之外。實務上,我們經常使用作為提醒標示、警告通知等用途。

準備

材料與工具

本文範例使用【DUAL22-2s開發板】為示範。如圖標註,其內建一顆無源蜂鳴器與開關。此蜂鳴器響應頻率上限為1KHz。在蜂鳴器旁有一個紅色單指撥開關,用以開啟或關閉蜂鳴器聲響。

GPIO與電路

DUAL22-2s開發板內建蜂鳴器電路預設接於【G15】腳位,如圖所示。

函數與補充

我們依據DUAL22-2s的電路規劃特性,提供專用的函數庫以方便【快速應用與學習】的用途。當然,你也可以選擇不使用此函數庫,一樣可以完整地控制DUAL22-2s硬體功能。我們的函數庫完全開放、使用簡明的C/C++語法撰寫,你也可以據此修改更加適合你使用需求的函數庫。

函數庫控制元件內建數類別方法
dual2s.h無源蜂鳴器1Buzzer+ void Buzzer::noTone();
+ void Buzzer::tone(frequency, duration, volume);
+ void Buzzer::alarm();

我們將下列音高頻率對照表,轉化為struct變數紀錄於dual2s.h中,方便取用。

  //Buzzer Pitch define
  struct Pitch{
    uint16_t Do_3=131, Re_3=147, Mi_3=165, Fa_3=175, Sol_3=196, La_3=220, Si_3=247;
    uint16_t Do_4=262, Re_4=294, Mi_4=330, Fa_4=349, Sol_4=392, La_4=440, Si_4=494;
    uint16_t Do_5=523, Re_5=587, Mi_5=659, Fa_5=698, Sol_5=784, La_5=880, Si_5=988;
  };

韌體範例

Arduino C語言

【dual2s函數庫是小幫手,功用在快速上手】

dual2s函數庫開放,有需要者,你可以修改成所需的功能。

  • 行數 4-26:DUAL22-2s開發板GPIO腳位定義。依據需求開啟相對腳位即可。
  • 行數30-38:PWM通道使用定義。
#include <dual2s.h>

//DC電機GPIO
#define PIN_MOTO_1A  14
#define PIN_MOTO_1B  32
#define PIN_MOTO_2A  12
#define PIN_MOTO_2B  33
#define PIN_MOTO_3A  25
#define PIN_MOTO_3B  26
#define PIN_MOTO_4A  23
#define PIN_MOTO_4B  22
//蜂鳴器GPIO
#define PIN_BUZZER   15
//超音波GPIO
#define PIN_USC_FRONT_ECHO 13
#define PIN_USC_FRONT_TRIG 27
#define PIN_USC_RIGHT_ECHO 5
#define PIN_USC_RIGHT_TRIG 4
#define PIN_USC_LEFT_ECHO 19
#define PIN_USC_LEFT_TRIG 18
//短距紅外線GPIO
#define PIN_IR_LEFT    34
#define PIN_IR_MIDDLE  35
#define PIN_IR_RIGHT   39
//供電偵測GPIO
#define PIN_BATTERY    36

//esp32 has 16 PWM channel
//Reserve 0-6 Channel for Servo, LED ... 
#define PWM_CH_BUZZER 7 
#define PWM_CH_M1A    8
#define PWM_CH_M1B    9
#define PWM_CH_M2A    10
#define PWM_CH_M2B    11
#define PWM_CH_M3A    12
#define PWM_CH_M3B    13
#define PWM_CH_M4A    14
#define PWM_CH_M4B    15

Pitch pitch;                            //宣告Pitch變數
Buzzer bz(PIN_BUZZER, PWM_CH_BUZZER);   //取得Buzzer物件

void setup() { 
  bz.alarm();
  delay(1000);

  int vol = 5; //1~10; 音量小 ~ 大
  bz.tone(pitch.Do_4, 500, vol);
  bz.tone(pitch.Re_4, 500, vol);
  bz.tone(pitch.Mi_4, 500, vol);
  bz.tone(pitch.Fa_4, 500, vol);
  bz.tone(pitch.Sol_4, 500, vol);
  bz.tone(pitch.La_4, 500, vol);
  bz.tone(pitch.Si_4, 500, vol);
  bz.tone(pitch.Do_5, 800, vol);
}

void loop() {
  
}

yesioBlockly積木語言

此處用兩小節小蜜蜂旋律作為範例。

Tags:
Table of Contents