精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Arduino音調功能在壓電蜂鳴器或揚聲器上播放旋律

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2023-01-25 15:37 ? 次閱讀

Arduino是簡化和加速微控制器項目的絕佳方式,這要歸功于其開發人員社區,他們使幾乎所有內容看起來都很簡單。這里有很多Arduino項目供您嘗試并享受樂趣。您的某些項目可能需要一些聲音操作來通知某些內容或只是為了給觀眾留下深刻印象。如果我告訴你,幾乎所有可以在鋼琴上演奏的主題曲都可以在一個簡單的程序和便宜的壓電揚聲器的幫助下在你的Arduino上模仿呢?

在本教程中,我們將學習使用 Arduino 音調 () 功能在壓電蜂鳴器或揚聲器上播放旋律是多么簡單易行.

所需硬件

  1. Arduino(任何版本 – 此處使用 UNO)
  2. 壓電揚聲器/蜂鳴器或任何其他 8 歐姆揚聲器。
  3. 面包板
  4. 連接線
  5. 按鈕
  6. 1k 電阻器(可選)

了解 Arduino 的 Tone() 函數:

在我們理解 音調()工作原理之前,我們應該知道壓電蜂鳴器是如何工作的.我們可能在我們學校了解過壓電晶體, 它只不過是一種將機械振動轉化為電能的晶體,反之亦然.在這里,我們應用一個可變的電流(頻率),晶體振動從而產生聲音。因此,為了使壓電蜂鳴器產生一些噪音,我們必須使壓電晶體振動,噪聲的音調和音調取決于晶體振動的速度.因此,可以通過改變電流頻率來控制音調和音高。

好的,那么我們如何從Arduino獲得可變頻率呢?這就是音調()函數的用武之地。音調()可以在特定引腳上生成特定頻率。如果需要,也可以提及持續時間。音調 () 的語法是

Syntax

tone(pin, frequency) 
tone(pin, frequency, duration)

Parameters

pin: the pin on which to generate the tone
frequency: the frequency of the tone in hertz - unsigned int
duration: the duration of the tone in milliseconds (optional) - unsigned long

引腳的值可以是您的任何數字引腳。我在這里使用了引腳 8。可以生成的頻率取決于Arduino板中計時器的大小。對于UNO和大多數其他常見板,可以產生的最小頻率為31Hz,可以產生的最大頻率為65535Hz。然而,我們人類只能聽到2000Hz到5000Hz之間的頻率。

pitches.h 頭文件:

現在,我們知道如何使用arduino tone()函數產生一些噪音。但是,我們如何知道每個頻率將產生什么樣的音調?

Arduino給了我們一個音符表,將每個頻率等同于特定的音符類型。這個筆記表最初是由Brett Hagman編寫的, tone() 命令是基于他的工作。我們將使用此便箋表來播放我們的主題。如果你是熟悉樂譜的人,你應該能夠理解這個表,對于像我這樣的其他人來說,這些只是另一個代碼塊。

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

在Arduino上播放音符:

要使用Arduino演奏像樣的旋律,我們應該知道這些旋律的構成。播放主題所需的三個主要因素是

  1. 注釋值
  2. 注釋持續時間
  3. 速度

我們有 pitches.h 頭文件來播放任何音符值,現在我們應該找出它的具體音符持續時間來播放它。節奏只不過是旋律應該演奏多快。一旦你知道音符值和音符持續時間,你可以將它們與 tone() 一起使用,比如

tone (pinName, Note Value, Note Duration);

對于本教程中播放的音調,我在“themes.h”頭文件中為您提供了音符值和音符持續時間,您可以使用它們在項目中播放它們。但是,如果您的礦井中有任何特定的音調,并且想在您的項目中播放它,請繼續閱讀......否則跳過這個話題,落到下一個話題。

要播放任何特定的音調 ,您必須獲取該特定音樂的樂譜,并通過從中讀取音符值和音符持續時間將樂譜轉換為Arduino草圖。如果你是一個音樂專業的學生,這對你來說是小菜一碟,否則花一些時間像我一樣打破你的頭。但是在一天結束時,當您的音調在壓電蜂鳴器上播放時,您會發現您的努力值得.

獲得音符值和音符持續時間后,將它們加載到“themes.h”頭文件中的程序中,如下所示

//##############**"HE IS A PIRATE" Theme song of Pirates of caribbean**##############//
int Pirates_note[] = {
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4,
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, 
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4,  
NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, 
NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4,
0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_D4, NOTE_B3, NOTE_E4, NOTE_F4,
NOTE_F4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4,
NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4,
NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_G4,
NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, 
NOTE_D4, 0, NOTE_D4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4
};
int Pirates_duration[] = {
4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8,
4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8,
8,4,8,8,8,4,4,8,8,4,4,8,8,4,4,8,4,
4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8,
8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8
};
//###########End of He is a Pirate song#############//

上面的代碼塊顯示了電影《加勒比海盜》中“他是海盜”主題的音符值和音符持續時間。您可以像這樣添加主題。

原理圖和硬件:

這個Arduino音調發生器項目的示意圖如下圖所示:

使用 Arduino 音調功能電路在蜂鳴器上播放旋律

連接非常簡單,我們有一個壓電揚聲器,它通過 8K 電阻連接到引腳 1 和 Arduino 的接地.該 1k 電阻器是一個限流電阻器,用于將電流保持在安全限值內。我們還有四個開關來選擇所需的旋律。開關的一端接地,另一端分別連接到引腳 2、3、4 和 5。開關將使用該軟件在內部啟用上拉電阻。由于電路非常簡單,因此可以使用面包板進行連接,如下所示:

使用 Arduino 音調功能試驗板電路播放音調

Arduino 程序說明:

一旦你理解了這個概念,Arduino程序就非常簡單了。完整的代碼在本教程結束時給出。如果您不熟悉添加頭文件,可以從此處將代碼下載為ZIP文件,然后直接將其上傳到Arduino。

以上兩個是必須添加的頭文件。 “Pitches.h ”用于將每個音符等同于特定頻率, “themes.h” 包含所有四個音調的音符值和音符持續時間。

#include "pitches.h"
#include "themes.h"

創建一個函數來在需要時播放每個音調。在這里,當函數 Play_Pirates() 被稱為“他是海盜”的音調將被播放。此功能由在引腳編號 8 處產生頻率的音調功能組成。noTone(8) 被調用以在音樂播放后停止音樂。如果要播放自己的音調,請將Pirates_note和Pirates_duration更改為保存在 “themes.h” 值中的新音符和持續時間值

void Play_Pirates()
{
  for (int thisNote = 0; thisNote < (sizeof(Pirates_note)/sizeof(int)); thisNote++) {
    int noteDuration = 1000 / Pirates_duration[thisNote];//convert duration to time delay
    tone(8, Pirates_note[thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.05; //Here 1.05 is tempo, increase to play it slower
    delay(pauseBetweenNotes);
    noTone(8);
    }
}

引腳 2、3、4 和 5 用于選擇要播放的特定音調。默認情況下,這些引腳使用內部上拉電阻保持高電平,方法是使用上述代碼行。按下按鈕時,將其拉到地面。

pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);

下面的代碼塊用于在按下按鈕時播放歌曲。它讀取每個按鈕的數字值,當它變低(零)時,它假設按鈕被按下并通過調用所需的函數播放相應的音調。

if (digitalRead(2)==0)
{ Serial.println("Selected -> 'He is a Pirate' ");  Play_Pirates();  }
if (digitalRead(3)==0)
{ Serial.println("Selected -> 'Crazy Frog' ");  Play_CrazyFrog();  }
if (digitalRead(4)==0)
{ Serial.println("Selected -> 'Mario UnderWorld' ");  Play_MarioUW();  }
if (digitalRead(5)==0)
{ Serial.println("Selected -> 'He is a Pirate' ");  Play_Pirates();  }

這個旋律播放器Arduino電路的工作:

代碼和硬件準備就緒后,只需將程序刻錄到 Arduino 中,您只需按下按鈕即可播放音調。如果您有任何問題,請查看串行監視器進行調試或使用評論部分報告問題,我很樂意為您提供幫助。

在壓電蜂鳴器上使用Arduino音調功能播放旋律

#include "pitches.h" //add Equivalent frequency for musical note

#include "themes.h" //add Note vale and duration 



void Play_Pirates()

{ 

  for (int thisNote = 0; thisNote < (sizeof(Pirates_note)/sizeof(int)); thisNote++) {


    int noteDuration = 1000 / Pirates_duration[thisNote];//convert duration to time delay

    tone(8, Pirates_note[thisNote], noteDuration);


    int pauseBetweenNotes = noteDuration * 1.05; //Here 1.05 is tempo, increase to play it slower

    delay(pauseBetweenNotes);

    noTone(8); //stop music on pin 8 

    }

}


void Play_CrazyFrog()

{

  for (int thisNote = 0; thisNote < (sizeof(CrazyFrog_note)/sizeof(int)); thisNote++) {


    int noteDuration = 1000 / CrazyFrog_duration[thisNote]; //convert duration to time delay

    tone(8, CrazyFrog_note[thisNote], noteDuration);


    int pauseBetweenNotes = noteDuration * 1.30;//Here 1.30 is tempo, decrease to play it faster

    delay(pauseBetweenNotes);

    noTone(8); //stop music on pin 8 

    }

}


void Play_MarioUW()

{

    for (int thisNote = 0; thisNote < (sizeof(MarioUW_note)/sizeof(int)); thisNote++) {


    int noteDuration = 1000 / MarioUW_duration[thisNote];//convert duration to time delay

    tone(8, MarioUW_note[thisNote], noteDuration);


    int pauseBetweenNotes = noteDuration * 1.80;

    delay(pauseBetweenNotes);

    noTone(8); //stop music on pin 8 

    }

}


void Play_Titanic()

{

    for (int thisNote = 0; thisNote < (sizeof(Titanic_note)/sizeof(int)); thisNote++) {


    int noteDuration = 1000 / Titanic_duration[thisNote];//convert duration to time delay

    tone(8, Titanic_note[thisNote], noteDuration);


    int pauseBetweenNotes = noteDuration * 2.70;

    delay(pauseBetweenNotes);

    noTone(8); //stop music on pin 8 

    }

}


void setup() {

pinMode(2, INPUT_PULLUP); //Button 1 with internal pull up

pinMode(3, INPUT_PULLUP); //Button 2 with internal pull up

pinMode(4, INPUT_PULLUP); //Button 3 with internal pull up

pinMode(5, INPUT_PULLUP); //Button 4 with internal pull up

Serial.begin(9600);

}


void loop() {

    if (digitalRead(2)==0)

      { Serial.println("Selected -> 'He is a Pirate' ");  Play_Pirates();  }

    if (digitalRead(3)==0)

      { Serial.println("Selected -> 'Crazy Frog' ");  Play_CrazyFrog();  }

    if (digitalRead(4)==0)

      { Serial.println("Selected -> 'Mario UnderWorld' ");  Play_MarioUW();  }

    if (digitalRead(5)==0)

      { Serial.println("Selected -> 'Titanic' ");  Play_Titanic();  }

}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 揚聲器
    +關注

    關注

    29

    文章

    1291

    瀏覽量

    62915
  • Arduino
    +關注

    關注

    187

    文章

    6464

    瀏覽量

    186682
  • 壓電蜂鳴器
    +關注

    關注

    0

    文章

    69

    瀏覽量

    3067
收藏 人收藏

    評論

    相關推薦

    arduino學習筆記22 - 揚聲器實驗

    一個5K的。注意:因為揚聲器驅動電壓要求比較小,遠遠小于5V,所以需要在揚聲器串聯一個大于10uf的電解電容,電解電容負極連接喇叭的正極,電容正極連接另外一端。不接電容長時間使用,會燒毀揚聲
    發表于 10-24 10:19

    請教multisim中揚聲器要怎么才能發聲?

    本帖最后由 abeyond 于 2015-7-6 14:23 編輯 大家好,我是剛開始學習使用multisim,畫了一個“雙音調電子門鈴”的仿真圖,揚聲器只有一個引腳,接上以后始終都沒有反應,用蜂鳴器可以響,但是卻沒有雙
    發表于 07-06 14:11

    FPGA擴展揚聲器問題,求大神賜教+_+!!

    新手初用FPGA,用的開發板沒有蜂鳴器揚聲器;現在已經能有音頻脈沖產生,急需外加蜂鳴器或者揚聲器等一切能發出聲音的東東。。。板子上有GPI
    發表于 01-08 20:43

    【項目分享】教你用Arduino、Micro SD制作一個簡單的音樂播放器

    電路圖。注意該電路圖只展示了Arduino Uno與SD卡模塊間的連線,并加入了與Arduino相連的3個按鈕,這幾個按鈕來控制其播放功能,比如播放
    發表于 09-27 17:20

    請問如何實現新型壓電陶瓷揚聲器的設計?

    如何實現新型壓電陶瓷揚聲器的設計?壓電陶瓷揚聲器的工作原理是什么?動圈揚聲器的工作原理是什么?采用陶瓷
    發表于 04-14 06:43

    什么是壓電MEMS揚聲器壓電MEMS揚聲器UT-P 2016的應用有哪些?

    什么是壓電MEMS揚聲器壓電MEMS揚聲器UT-P 2016的指標規格有哪些?壓電MEMS揚聲器
    發表于 06-16 08:50

    制作便攜式揚聲器的方法,DIY制作便攜式揚聲器的教程

      你們都見過便攜式揚聲器現在變得流行,但其中大多數都非常昂貴,所以我將向您展示如何用最少的零件制作自己的便攜式揚聲器。制作和測試只需要 1小時,并且可以在任何常用的 USB 充電器運行。所以
    發表于 07-31 16:18

    MP4播放器揚聲器

    MP4播放器揚聲器              揚聲器分為內
    發表于 12-21 16:24 ?1192次閱讀

    同軸揚聲器,同軸揚聲器是什么意思

    同軸揚聲器,同軸揚聲器是什么意思 什么是“同軸揚聲器(同軸音箱)”?與傳統的揚聲器有何區別,什么是“共點同軸揚聲器”?
    發表于 03-31 10:40 ?4951次閱讀

    新型陶瓷壓電揚聲器驅動的設計

    本文對比傳統動圈型揚聲器,分析了新型陶瓷壓電揚聲器的特點及對所需音頻功率放大器的要求,得出使用Boost升壓結構,配合D類音頻功率放大器驅動新型陶瓷壓電
    發表于 12-19 10:17 ?1.7w次閱讀
    新型陶瓷<b class='flag-5'>壓電</b><b class='flag-5'>揚聲器</b>驅動的設計

    蜂鳴器揚聲器的區別是什么

    蜂鳴器揚聲器最大的區別是喇叭的頻率響應要比蜂鳴器好得多,蜂鳴器只在一個很窄的頻率范圍內電聲功率轉換比較高。
    發表于 03-31 09:54 ?2.2w次閱讀

    如何使用arduino壓電蜂鳴器制作簡單的驅蚊

    在本教程中,我們將學習如何使用arduino壓電蜂鳴器制作簡單的驅蚊。 硬件組件: Arduino UNO1個
    的頭像 發表于 12-07 13:52 ?2987次閱讀

    使用揚聲器模塊/Arduino UNO板/香蕉來播放音調

    電子發燒友網站提供《使用揚聲器模塊/Arduino UNO板/香蕉來播放音調.zip》資料免費下載
    發表于 10-19 14:18 ?0次下載
    使用<b class='flag-5'>揚聲器</b>模塊/<b class='flag-5'>Arduino</b> UNO板/香蕉來<b class='flag-5'>播放音調</b>

    如何連接壓電蜂鳴器/揚聲器以便在按下按鈕時播放鈴鐺

    電子發燒友網站提供《如何連接壓電蜂鳴器/揚聲器以便在按下按鈕時播放鈴鐺.zip》資料免費下載
    發表于 11-01 10:03 ?0次下載
    如何連接<b class='flag-5'>壓電</b><b class='flag-5'>蜂鳴器</b>/<b class='flag-5'>揚聲器</b>以便在按下按鈕時<b class='flag-5'>播放</b>鈴鐺

    使用Arduino播放不同頻率的音調

    電子發燒友網站提供《使用Arduino播放不同頻率的音調.zip》資料免費下載
    發表于 06-27 09:46 ?0次下載
    使用<b class='flag-5'>Arduino</b><b class='flag-5'>播放</b>不同頻率的<b class='flag-5'>音調</b>