日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

arduino音乐播放器(蜂鸣器版)

發布時間:2023/12/31 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arduino音乐播放器(蜂鸣器版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

蜂鳴器是我們常見的一個電子元器件,它可以發出類似蜂鳴的聲音,采用低電壓直流供電,廣泛運用于計算機、打印機、報警器、電子玩具等眾多場合,一般作為提示、警報較多;

我們不以結構論述,以工作原理可將其分為有源蜂鳴器和無源蜂鳴器;注意這里的源指的不是電源,而是振蕩源,即有源蜂鳴器內部自帶振蕩源,通電就能發出聲音;而無源蜂鳴器不帶振蕩源,必須用2-5k的方波去驅動;

?

蜂鳴器的發聲裝置由震動裝置和諧振裝置組成;

無源蜂鳴器的工作原理:方波信號輸入諧振裝置,轉換為聲音信號輸出;

有源蜂鳴器的工作原理:直流電源輸入經過振蕩系統的放大取樣電路,在諧振裝置的作用下產生聲音信號;

?

有源蜂鳴器和無源蜂鳴器的區別:

  • 在外觀上,有源蜂鳴器因為多了驅動電路,所以會比無源蜂鳴器要高(也正是因為多了驅動電路,所以有源的價格要比無源的高);
    引腳朝上,可以看見綠色電路板的是無源蜂鳴器,用黑膠封起來的是有源蜂鳴器;
  • 通過發聲條件,有源蜂鳴器直接接上額定電源就可以連續發聲,而無源蜂鳴器需要接在音頻輸出電路中才能發聲;
  • 無源蜂鳴器的優點:

  • 價格便宜
  • 聲音頻率可控
  • 在一些特殊場合中可復用端口(旋律燈)
  • 有源蜂鳴器的優點:程序控制簡單

    ?

    好了,說了這么多,接下來我們就開始動手制作吧!

    材料:arduino Nano*1、無源蜂鳴器、面板板*2、導線若干

    硬件連線:

    • 蜂鳴器正極(蜂鳴器上會標注+)→Nano 數字端口3
    • 蜂鳴器負極 → Nano GND
    • 外接電源(6V)正極 → Vin
    • 外接電源負極 → GND

    實現原理:

    在開始制作之前,我們先來看看音樂簡譜,看看在我們平常唱歌需要哪些信息:

    這是一首我們最早接觸的童謠,他本身也非常簡單,我們就通過他來學習如何容蜂鳴器奏響這首音樂;我們通過上面的簡譜可以得到如下信息:

  • C 指的是音調,就是說我們要以怎么樣的調子去唱,不同的調子發出聲音的頻率也是不一樣的;
  • 4/4 指的是節拍,可以理解成一個音的長短;
  • 1234567- 就是哆喏咪發嗦啦唏,應該發出什么樣的音;
  • 好了,到這里我們可以總結一下了,我們想要唱一首歌,我們需要知道每個字應該用什么樣的音去唱,這就需要音調和音符的配合了,兩者結合就知道該用怎么樣的音;光有了調子可不行,我們還得知道每個音應該發出多長時間,這就是節拍的作用;

    我們一步一步來解決,第一個問題,蜂鳴器怎么知道每個音符應該發出什么樣的聲音呢?這就需要我們得到每個音的對應頻率,然后讓蜂鳴器按照頻率發聲就可以了;

    對照音符和頻率表,我們就可以很輕松的知道每個音的頻率了(看音符是否帶點,點在上還是在下到表中查找就可以了)
    比如第一小節就是:262,262,393,393

    頻率的問題解決了,接下來就是節拍的問題了;這首歌是4/4,意思就是以四分音符為一拍,每小節有四拍;我們把一拍看做是單位1,那么1/2就是0.5,1/4就是0.25,1/8就是0.125;所以我們的每個音符配合這樣的拍子演奏出來,就是我們想要的音樂啦;

    程序實現:

  • 我們用米思齊編程,首先先調整到高級視圖,會相對靈活一點;
  • 然后根據上面的簡譜和頻率對照表,我們創建三個數組,分別存儲每個音的頻率、節拍時間和音符;

    這里可能會問了,為什么要建立兩個數組來處理頻率,不能直接轉換過來嘛?當然可以,但是直接轉換的話會比較麻煩,現在的音符比較少,后面復雜的音樂轉換一下保準你看的眼花繚亂,所以還是讓單片機幫我們轉換吧,我們只需要將音符告訴他就好啦;
    那么yindiao數組的最后一個元素為什么是-1呢?這是空拍,我們用-1代替;
  • 萬事俱備只欠東風啦,接下來我們就需要調用函數來控制蜂鳴器發出第一個聲音了
    tone()函數可以產生固定頻率的PWM信號來驅動揚聲器發聲,這也是為什么蜂鳴器需要連接在數字端口3的原因,或者連接在其他復用PWM功能的端口。 tone()函數有兩種用法:tone(端口, 頻率)? ? ? ? ? ? ? ? //沒有定義時間,我們就需要自己手動用noTone()停止發聲,不然他會一直發聲tone(3,262);delay(1000);noTone(3);tone(端口, 頻率, 時間)tone(3,262,200);delay(200);

    Arduino一次只能發出聲音信號,當一個引腳正在通過tone()函數產生發聲信號,那么第二個引腳想同時發聲是不可能的;
    (注意:使用tone()函數時會影響引腳3和引腳11的PWM信號輸出)


    這一部分就是通過簡譜,對照頻率表,轉換成每個音符的對應頻率;先從music數組中將音符提取出來(1 do),然后對應yindiao數組進行轉換(yindiao[1-1]→262)


    設置每個音的時間,這里的700指的是每個拍子的時間(毫秒)

  • 添加一個循環,自動播放音樂

    這里為什么是1-48呢?因為這首小星星一共是48個音符,我們需要發出48個音,所以是1-48;
  • 好了,我們看一下完整的程序是怎么樣的:
    long yindiao[]={262,294,330,350,393,441,495,-1};float time[]={1,0.5,0.25,0.125};long music[]={1,1,5,5,6,6,5,8,4,4,3,3,2,2,1,8,5,5,4,4,3,3,2,8,5,5,4,4,3,3,2,8,1,1,5,5,6,6,5,8,4,4,3,3,2,2,1,8};void setup() {pinMode(3, OUTPUT);digitalWrite(3,LOW); }void loop(){for (int i = 1; i <= 48; i = i + (1)) {tone(3, yindiao[(int)(music[(int)(i - 1)] - 1)], time[(int)(0)] * 700);delay((time[(int)(0)] * 700));} }

    ?

  • 總結

    以上是生活随笔為你收集整理的arduino音乐播放器(蜂鸣器版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。