振动声波持续的时间决定声音的音长
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9-3 程式設計
1. 字元資料型態的運算:程式中宣告了chr 及index 為字元資料 型態,chr變數儲存從串列埠緩衝區讀取下一個有效的單一字元 資料,在運算上,可利用ASCII 的特性進行加減運算,判斷chr 是否為'1' ~ '7' 間的字元,或是'A' ~ 'G' 間的字元。例 如chr='0', 其ASCII 為48,'1' 的ASCII為49,'7' 的ASCII 為55,代入底下的判斷式可知(chr-'1')>=0 與(chr-'7')<=0 均不成立,因此可知chr='0' 未介於'1' ~ '7' 間。
9-2 電路說明
1. Arduino Leonardo + 麵包板的接線圖 如圖 9-6 所示,本電路使用USB 提供的5V,不需外加電源。
9-2 電路說明
2. 圖 9-7 為Leonardo 板(或OZONE)+Arminno 多功能實驗板接 線情況,為簡化顯示,圖 9-7 只畫出多功能實驗板的區塊5 及區 塊15。
9-2 電路說明
蜂鳴器只要給定頻率即能發出聲音, 例如要發出低音La 的聲音 (440Hz,週期2.27ms),只要送半週期高準位、半週期低準位, 並持續輸出方波給蜂鳴器即可發聲,如圖 9-2 所示。
9-2 電路說明
但要如何計算其它音階的頻率呢?首先以低音A(La)頻率440Hz 為基準,然後每隔半度音之頻率是前一個音的12 2 ≒ 1.059463 倍為原則來計算即可,表 9-1 為音階與頻率表;其中需注意的是 Mi 到Fa、Si 到Do 為半度音, 其餘皆為一個全音, 例如La 到Si 為一個全音, 因此Si 的頻率為440×1.059×1.059 ≒ 494Hz,Si 到Do 為半音, 因此Do 的頻率為494×1.059 ≒ 523Hz,比對圖 93 鋼琴上所示的鍵盤便可清晰了解。
9-1 功能簡介
本次實驗主要介紹發聲元件-蜂鳴器,希望透過Arduino 開發環境 的Serial Monitor,輸入不同的音階代碼,讓蜂鳴器發出所指定的 單一音階聲音,或是連續的音階聲音;本實驗系統方塊圖如圖 9-1 所示。
9-2 電路說明
喇叭(Speaker)與蜂鳴器(Buzzer)是一種將電氣信號轉換為聲 音的轉換裝置,是電子產品中常用的發聲元件,例如音響喇叭、主 機板上的蜂鳴器等。喇叭的基本動作原理,主要是利用電流通過線 圈時的磁極物理作用,作反磁或相吸運動讓音盆進行往復運動,當 音盆振動空氣時,即會以空氣為媒介傳遞至人類耳膜而感受到聲音, 其中通過線圈的電流大小決定聲音的大小、往復運動的快慢(次/ 秒;Hz)決定聲調的高低,振動聲波持續的時間決定聲音的音長。
2. 標頭檔pitches.h 標頭檔pitches.h 可在書籍光碟→程式→第9 章\chap9_1 \ 中 找到,可在開啟的Arduino IDE 中,點選Sketch → Add File, 將此檔案加入即可,加入後可看到Arduino IDE 中增加一個檔 案頁籤。)
9-3 程式設計
9-3 程式設計
3. #include:引入標頭檔 一個專案的常數或定義通常都很多,而且是主程式、副程式共 同使用,因此可將這些常數或定義儲存在一個標頭檔中(副屬 檔名為.h),方便主副程式使用。當標頭檔建立完成,要引入 使用,只要在Arduino IDE中點選Sketch → Add File 加入標 頭檔,然後在主程式中,利用#include指令即可引用。
9-2 電路說明
9-2 電路說明
9-2 電路說明
圖 9-4 為本實習的 電路圖,只要將蜂 鳴器的正端接至 Arduino 的D10,負 端接地即可進行實 驗。
9-2 電路說明
9-2 電路說明
本實驗使用的蜂鳴器工作電壓為3V ~ 7.5V, 以Arduino 輸出的 電壓5V,可順利推動蜂鳴器。如果選用的蜂鳴器(或喇叭)驅動電 壓或電流過大時,請務必在蜂鳴器前接上電晶體或達靈頓電路,才 能順利推動蜂鳴器。另請注意蜂鳴器接腳上的正負端,有註明十字 符號者為正端與D10 相接,另一端則接地,如果蜂鳴器未標示正負, 則接腳較長端為正端。
9-3 程式設計
9-3 程式設計
9-3 程式設計
本程式分為二個檔案,以下分別介ห้องสมุดไป่ตู้。 2.主程式(檔名:程式\ 第9 章\chap9_1 \chap9_1.ino)
9-3 程式設計
9-3 程式設計
1. #define:定義宣告 #define 是一個很有用的指令,它允許程式在編譯前,賦予一 個名稱對應一個恆定值或計算式的功能,此命令與常數宣告指 令const 功能很像,適合定義一些在執行期間數值不會變動的 常數;不同於const 指令的是#define 為定義,不需指定資料 型態,使用上彈性較大。
蜂鳴器與喇叭的發聲原理很像,但使用不同的材質;蜂鳴器分為電 磁式及壓電式二大類,在耗電流、尺寸、頻率、驅動方式上有些不 同,本實驗使用電磁式蜂鳴器,所使用的工作電壓為3V ~ 7.5V, 其原理是通電時將金屬振動膜吸下,不通電時依振動膜的彈力彈回 的電磁原理,耗電量較壓電式大,但使用較低的電壓即可工作。
9-3 程式設計
9-3 程式設計
本程式分為二個檔案,以下分別介紹。 1.音調標頭檔(程式\ 第9 章\chap9_1 \pitches.h)音調標頭檔 中定義了8 個八度音所有音調的音名及頻率,例如NOTE_C4代表第4 八度音的C(Do),頻率為262Hz,方便在主程式中引用;由於 pitches.h 內容很多,下列僅列出第4 及第5 八度音的定義。
9-3 程式設計
本實驗的程式主要是處理字串,依據Serial Monitor 中所傳送的 文字列進行逐字判斷,其中文字列的1~7代表要讓蜂鳴器發出第4 八度音的Do~ Si,字母C、D、E、F、G、A、B 代表要發出第5 八 度音的Do ~ Si,每個單字音的音長固定為200ms,所有單字發聲 完畢後停止發聲,回至等待使用者輸入的狀態,整個程序如圖9-8 所示。
9-3 程式設計
4. tone(pin, frequency, duration):音調產生指令 此指令可在指定的pin 腳輸出一個工作週期50%, 頻率為 frequencyHz 的方波,持續輸出duration(單位ms)後關閉 (tone 指令的音調產生為背景動作,執行tone 指令後主控權 會立即交回主程式,並非等待duration 後才交回);參數 duration 若省略,代表會持續發聲,直到執行noTone(pin) 指 令時關閉。