Arduino 蜂 鳴 器

Arduino 蜂 鳴 器

之前的文章中我們讓Arduino控制LED,除了視覺效果,我們再來玩玩聲音吧!讓Arduino發出聲音最簡單的方法就是利用蜂鳴器(Buzzer)。

蜂鳴器基本上分兩類:有源蜂鳴器、無源蜂鳴器。有源蜂鳴器是內建了一組固定的頻率,只要接通電源,就會發出固定的音調。無源蜂源器則不同,我們必須透過程式,告訴它頻率,我們才能得到所需的音調,但我們就可以利用它來播放簡單的旋律了!

有源蜂鳴器、無源蜂鳴器的外型很像,一般有源蜂鳴器會在上面貼一個白色貼紙,另外,有源蜂鳴器底部也會有膠封,無源蜂鳴器的底部可以直接看到電路板。

Arduino 蜂 鳴 器

有源蜂鳴器

我們先來試試簡單的有源蜂鳴器吧。蜂鳴器上方會有+和-的符號,代表的自然就是正和負了。我們把-接到GND,+接到PIN 7,等一下我們就用PIN 7來控制聲音。

程式非常簡單,digitalWrite(7,HIGH)就能讓蜂鳴器發出聲音了,要持續多久,就用delay()來控制,然後再用digitalWrite(7,LOW)就能讓聲音停止了。

這個例子我們蜂鳴器叫1秒鐘後,停2秒,然後不斷重複;有源蜂鳴器的程式就這樣而已,非常容易。

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

void loop() {
  digitalWrite(7,HIGH);
  delay(1000);
  digitalWrite(7,LOW);
  delay(2000);
}

無源蜂鳴器

無源蜂鳴器因為要處理聲音的頻率、節拍,所以自然是比無源蜂鳴器還要麻煩一點,不過Arduino IDE就有一個基本的範例「toneMelody」,大家從這個範例就能了解運作的原理了。

Arduino 蜂 鳴 器

傑森把範例加上中文註解,大家就能快速了解了。

線路的接法和前面有源蜂鳴器完全相同,也是用PIN 7來進行控制。

#include "pitches.h"  //載入音調和頻率的對照檔

// 旋律
int melody[] = {
  NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};

// 每個音的的拍子,4:4分音符,8:8分音符
int noteDurations[] = {
  4, 8, 8, 4, 4, 4, 4, 4
};

void setup() {
  
  for (int thisNote = 0; thisNote < 8; thisNote++) {
    //計算每個音的長度,4分音符: 1000 / 4,8分音符:1000/8
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(7, melody[thisNote], noteDuration);   //tone(PIN腳,音調,拍子)

    // 每個音之間要停一小段時間,範例是建議拍子的長度加30%
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    
    noTone(7);  // 停止播放
  }
}

void loop() {
  // no need to repeat the melody.
}

播放旋律主要是靠這個函式:

tone(7, melody[thisNote], noteDuration);   //tone(PIN腳,音調,拍子)

而音調和頻率的對照檔範例有提供了:pitches.h。有了這個檔,你只要花點苦工,就能播放任何音樂囉。

Arduino 蜂 鳴 器

Arduino 蜂 鳴 器

在这堂课中,大家将要了解如何使用蜂鸣器,蜂鸣器分为无源和有源两种。

Arduino 蜂 鳴 器

  • 第一步 准备材料
  • 第二步 原理了解
  • 第三步 无源蜂鸣器电路连接
  • 第四步 有源蜂鸣器电路连接
  • 第五步 库文件下载与说明

第一步 准备材料

  • arduino uno
  • 有源蜂鸣器
  • 无源蜂鸣器
  • 若干杜邦线
  • 100Ω电阻一个
  • 面包板

第二步 原理了解

蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。
有源蜂鸣器与无源蜂鸣器的区别:内部有否震荡源
注意:这里的“源”不是指电源,而是指震荡源。
有源蜂鸣器内部带震荡源,所以只要一通电就会叫;
无源蜂鸣器内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K-5K的波形脉冲信号去驱动它
有源蜂鸣器往往比无源的略贵,就是因为里面多个震荡电路。
从外观上看,两种蜂鸣器好像一样. 一般有源有源蜂鸣器比无源蜂鸣器厚一点.

Arduino 蜂 鳴 器

但是, 从外观上并不能绝对的区分出有源与无源,最可靠的做法除了查看产品的参数手册以外. 另一种方式是使用万用表测试蜂鸣器电阻,只有8Ω或者16Ω的是无源蜂鸣器,电阻在几百欧以上的是有源蜂鸣器。

第三步 无源蜂鸣器电路连接

Arduino 蜂 鳴 器

无源蜂鸣器可以不分正负极直接一个脚鱼电阻串接到arduino的9号口。

另一个脚连接GND,如上图。

无源蜂鸣器程序:

其中程序用到了tone的频率控制库,需要单独下载放到库文件夹里。下载在最后面

[scu name=”arduino-ide-post” platform=”arduino:avr:uno”]

int pinBuzzer = 9; //管脚D9连接到蜂鸣器模块的信号脚
void setup() {
pinMode(pinBuzzer, OUTPUT); //设置pinBuzzer脚为输出状态
}
void loop() {
long frequency = 300; //频率, 单位Hz
//用tone()函数发出频率为frequency的波形
tone(pinBuzzer, frequency );
delay(1000); //等待1000毫秒
noTone(pinBuzzer);//停止发声
delay(2000); //等待2000毫秒
}

[/scu]

第四步 有源蜂鸣器电路连接

有源蜂鸣器与无源蜂鸣器有点不一样,有源蜂鸣器最好是需要一个驱动电路。典型的驱动电路如下:

Arduino 蜂 鳴 器

上述电路中用一个PNP型三极管做为控制开关,  图中LS1是蜂鸣器
三极管集电极接GND,发射极接蜂鸣器的负端,三极管的基极极通过一只1K-2K的电阻到单片机的GPIO脚 .  蜂鸣器的正极接VCC.

该电路中三极管相当于一个开关, 运行原理如下:

1, 当GPIO输出高电平,三极基极与发射极间没有电压差,三极管发射极与集电极间不通,蜂鸣器LS1没有电流通过,蜂鸣器不响。

2,当GPIO输出低电平,三极基极与发射极间形成电压差,三极管发射极与集电极之间导通,电流通过蜂鸣器LS1,如果是有源蜂鸣器,则立即发出beep声。

(1) 三极管型号为 8550, 其引脚如下图:

如图所示

Arduino 蜂 鳴 器

1脚=E(发射极,电路图三极管左侧那个脚)

2脚=B(基极,电路图中三极管中间那个脚)

3脚=C(集电极,电路图中右侧的那个脚)

Arduino 蜂 鳴 器

有源蜂鸣器的正极(长脚)接5V, 负极(短脚)接三极管 E极
三极管B极接1K欧姆电阻,再接到Arduino D5脚
三极管C极接地

有源蜂鸣器程序:

int pinBuzzer = 5; //管脚D5连接到蜂鸣器元件的基极
 
void setup() {
  pinMode(pinBuzzer, OUTPUT); //设置pinBuzzer脚为输出状态
}
 
void loop() { 
   digitalWrite(pinBuzzer, HIGH);//输出HIGH电平,停止发声
   delay(3000); //等待3000毫秒
 
   digitalWrite(pinBuzzer, LOW);//输出LOW电平,发声
   delay(1000); //等待1000毫秒
}

第五步 库文件下载与说明

对于无源蜂鸣器模块,必须使用tone()函数,通过PWM管脚,输出一个波形,才能让无源蜂鸣器发声
运行效果: 蜂鸣器发出”beep beep”声音. 响一秒, 停两秒

本课程使用到的库文件:

个人中心

购物车

优惠劵

今日签到

有新私信 私信列表

搜索

幸运之星正在降临...

点击领取今天的签到奖励!

恭喜!您今天获得了{{mission.data.mission.credit}}积分

  • 限制以下商品使用: 限制以下商品分类使用: 不限制使用:

    所有商品和商品类型均可使用