趙云娥,吳振強
(1.青海建筑職業技術學院,青海西寧810012;2.陜西師范大學計算機科學學院,陜西西安710119)
Arduino助力美好生活—以音樂播放器的設計為例
趙云娥1,吳振強2
(1.青海建筑職業技術學院,青海西寧810012;2.陜西師范大學計算機科學學院,陜西西安710119)
Arduino是一塊基于開放原始代碼的SimpleI/O平臺,具有資源豐富、功能多樣、操作簡單、價格低廉等優點,廣泛應用于電子系統設計和互動產品開發方面,也被稱為“電子積木”。本論述介紹了Arduino開發平臺的軟件和硬件組成,以音樂播放器的設計為例展示了基于Arduino的電子產品設計的基本過程,使讀者初步掌握Arduino的功能和特點。
Arduino;電子產品設計;音樂播放器;音高;節拍
DOI10.3969/j.issn.1672-6375.2016.10.005
Arduino是一個基于開放原始代碼的SimpleI/O平臺,由硬件(MCU及外圍電路)和軟件(ArduinoIDE)兩部分組成。Arduino的硬件平臺包括基于AVR單片機的主控制電路板,以及大量的各式輸入/輸出電子模塊,比如開關輸入模塊、溫度壓力傳感器輸入模塊、超聲測距傳感器輸入模塊、LCD顯示輸出模塊等。用戶可以不熟悉底層電子元器件的電氣特性,只要會“拼接”模塊,就能夠進行電子產品互動設計。ArduinoIDE具有類似Java、C語言的Processing/Wiring開發環境,易學易用,同時有著足夠的靈活性,可以在Windows、MacintoshOSX、Linux三大主流操作系統上運行。Arduino的硬件原理圖、電路圖、IDE軟件及核心庫文件都是開源的,Arduino官方網站上有大量的庫文件供使用者下載。同時,在開源協議范圍內,使用者可以任意修改作品的原始設計及相應代碼為自己服務。Arduino可以獨立運行,也可以與MacromediaFlash,Processing,Max/MSP,PureData甚至Androi等軟件進行交互式設計。因此,使用者可以利用Arduino軟件和硬件平臺,充分發揮個人想象力和創造性,開發出很多令人驚艷的互動產品。本論述以音樂播放器的設計為例,對Arduino軟件、硬件平臺及其在產品開發方面的應用進行了介紹。
2.1硬件平臺
Arduino主控板的微處理器主要采用Atmel公司研發的AVR單片機(如ATmega328),除了購買官方版的Arduino(圖1為比較典型的ARDUINOUNO主控板),用戶可以在主控單片機的外圍自行搭建電路,DIY自己的Arduino。目前,市面上Arduino主控板種類繁多,各有特色,有滿足可穿戴設備設計的ARDUINOGEMMA,有用于3D打印技術的METERIA101等等,用戶可按需挑選。不同的主控板有不同的數量和功能的I/O接口,方便連接外部IC模塊。通過外部擴展,用戶可以替Arduino加上眼睛(如紅外線和超聲波傳感器)、耳朵(麥克風)和手腳(如舵機),加上與之對應的控制程序,就能做出各種自動控制應用。例如:加上溫度傳感器及一些控制線路,就能讓Arduino自動控制空調的運轉;加上舵機/步進電機,以及障礙物傳感器即可組裝一臺智能行走的機器人。由于Arduino擁有豐富的系列產品、大量簡便的輸入輸出資源模塊,讓Arduino得到了更為廣泛的應用和支持。

圖1 ArduinoUNO

圖2 ArduinoIDE界面
2.2軟件平臺
ArduinoIDE界面見圖2所示。整個界面采用windows形式,簡潔明了。除了用戶熟悉的常用菜單命令如文件、編輯外,點擊窗口的右上方的SerialMonitor命令,可實現對串口通信數據的監視。Arduino編程語言是改良式的C語言,把AVR單片機相關的一些參數設置都參數化了,開發者不了解其底層系統也可以容易地進行項目開發。所有Arduino程序都是由setup()函數和loop()函數兩大區塊組成。Setup()函數主要進行程序參數設置,里面的代碼從頭到尾只執行一次;loop()函數是Arduino軟件項目的主體,系統上電后先運行setup()函數,然后就不斷循環運行loop()函數,執行相關控制命令。Arduino軟件平臺自帶大量的軟件庫資源,模塊化程度高,程序開發效率高,可以快速完成互動作品設計。
3.1系統硬件設計
本音樂播放器以ArduinoUNO板為控制核心,充分利用ArduinoIDE自帶Tone擴展庫,以數組形式輸出各音符的指定頻率和節拍,送到無源蜂鳴器和彩色LED,實現了音樂播放和隨音樂節奏亮滅的LED效果。播放器的外部電路包括選曲鍵盤矩陣電路、蜂鳴器電路、LED顯示節奏電路,系統硬件電路圖見圖3所示。系統上電后,當檢測到鍵盤矩陣的某個開關按下,對應歌曲的音符數據(音高和節拍)通過數字端口發送到無源蜂鳴器,無源蜂鳴器受到特定頻率的方波驅動,可以發出“多來米發索拉西”的音樂效果。無源蜂鳴器的優點是聲音頻率可控,可以和LED復用一個控制口。所以,各數字端口的數據加到LED上面時,其節奏性的亮滅實現了節拍的顯示。

圖3 系統硬件電路圖

圖4 播放器程序流程圖
3.2軟件設計
從物理的角度來說,音樂是有規律出現的聲波振動,包含音高和節奏兩大主要因素。每一個音符唯一對應一個發聲頻率。ArduinoIDE自帶的頭文件“pitches. h”中就以宏定義的形式給出了各個音符和頻率的對應關系表,因此,使用者可以通過查表方式,得到每個音符的發聲頻率數據,從而制作出數組形式的樂曲韻律函數。例如,需要得到鋼琴標準鍵盤小字一組C4(唱名為Do)按鍵對應的頻率,可以使用“#defineNOTE_C4 262”語句,所產生音符的頻率是262Hz;而音符演奏的持續時間,決定了音樂進行的快慢程度和節奏類型,是構成旋律的另一個重要因素。本發聲器的設計根據樂譜給定的節拍速度先確定一個基本的延時單位,如果四分音符為一拍,每拍延時1/2s,則二分音符延時1秒,八分音符延時為1/4s,以此類推。最終,采用note-Durations[thisNote]數組來存放樂譜的節拍數據。這樣,音符數據按照節拍數據給定的時值來驅動蜂鳴器,就實現了該首樂曲的播放。
ArduinoIDE包含的Tone庫可以很方便地幫助用戶制作音樂。本設計主要采用了Tone(pin,frequency,duration)函數來產生電子音樂。此函數中,pin表示頻率數據的數字輸出接口,int型;frequency是音符頻率,int型;duration是節拍數據,單位是毫秒,unsignedlong型。只要把上述頻率和節拍數據連續賦值給Tone函數,就可以實現樂曲的播放,系統軟件實現的程序流程圖見圖4。
下面以《生日快樂歌》(簡譜見圖5)的第一小節為例,給出了音樂播放函數play()的實現過程。

圖5 《生日快樂歌》簡譜
//韻律函數
intmelody[]={
NOTE_G4,//5
NOTE_G4,//5
NOTE_A4,//6
NOTE_G4,//5
NOTE_C5,//1.
NOTE_B4,//7
0,
……};
//節拍函數
intnoteDurations[]={
8,8,4,4,4,4,
4,
……
};
//播放函數
voidplay()
{
for(intthisNote=0;thisNote<29;thisNote++)
{
intnoteDuration=1000/noteDurations[thisNote];
tone(8,melody[thisNote],noteDuration);
intpauseBetweenNotes=noteDuration*1.30;
delay(pauseBetweenNotes);
noTone(8);
}}
Arduino具有豐富的軟件和硬件資源,是開發人機互動產品的良好平臺,具有價格便宜、互動多樣、易學易用等特點,目前應用比較廣泛。本論述以音樂播放器的設計為例展示了基于Arduino的電子產品設計的基本過程,使讀者初步掌握Arduino的功能和特點。Arduino就像一個萬花筒,期待進一步加入人們智慧的魔法,變化出奇妙無比的新型電子設計,為人們創造更美好的生活。
[1]趙英杰.Arduino互動設計入門[M].北京:科學出版社,2014.
[2]MichaelMcRoberts.BeginArduino[M].楊繼志,郭敬,譯.北京:電子工業出版社,2013.
[3]楊繼志,楊宇環.基于Arduino的網絡互動產品創新設計[J].機電產品開發與創新,2012,25(1):99-100.
[4]楊繼志,郭敬.Arduino的互動產品平臺創新設計[J].單片機與嵌入式系統應用,2012(4).
[5]蔡睿妍.Arduino的原理及應用[J].電子工程設計,2012(16):155-157.
[6]趙云娥,陳學煌.基于AT89C51的電子節拍器設計[J].電子測量技術,2008(3).
TP368
A
2016-6-22
趙云娥(1983-),女,漢族,山西呂梁人,碩士,講師,主要研究方向:電子信息工程技術。