趙云娥,吳振強(qiáng)
(1.青海建筑職業(yè)技術(shù)學(xué)院,青海西寧810012;2.陜西師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,陜西西安710119)
Arduino助力美好生活—以音樂播放器的設(shè)計(jì)為例
趙云娥1,吳振強(qiáng)2
(1.青海建筑職業(yè)技術(shù)學(xué)院,青海西寧810012;2.陜西師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,陜西西安710119)
Arduino是一塊基于開放原始代碼的SimpleI/O平臺(tái),具有資源豐富、功能多樣、操作簡單、價(jià)格低廉等優(yōu)點(diǎn),廣泛應(yīng)用于電子系統(tǒng)設(shè)計(jì)和互動(dòng)產(chǎn)品開發(fā)方面,也被稱為“電子積木”。本論述介紹了Arduino開發(fā)平臺(tái)的軟件和硬件組成,以音樂播放器的設(shè)計(jì)為例展示了基于Arduino的電子產(chǎn)品設(shè)計(jì)的基本過程,使讀者初步掌握Arduino的功能和特點(diǎn)。
Arduino;電子產(chǎn)品設(shè)計(jì);音樂播放器;音高;節(jié)拍
DOI10.3969/j.issn.1672-6375.2016.10.005
Arduino是一個(gè)基于開放原始代碼的SimpleI/O平臺(tái),由硬件(MCU及外圍電路)和軟件(ArduinoIDE)兩部分組成。Arduino的硬件平臺(tái)包括基于AVR單片機(jī)的主控制電路板,以及大量的各式輸入/輸出電子模塊,比如開關(guān)輸入模塊、溫度壓力傳感器輸入模塊、超聲測距傳感器輸入模塊、LCD顯示輸出模塊等。用戶可以不熟悉底層電子元器件的電氣特性,只要會(huì)“拼接”模塊,就能夠進(jìn)行電子產(chǎn)品互動(dòng)設(shè)計(jì)。ArduinoIDE具有類似Java、C語言的Processing/Wiring開發(fā)環(huán)境,易學(xué)易用,同時(shí)有著足夠的靈活性,可以在Windows、MacintoshOSX、Linux三大主流操作系統(tǒng)上運(yùn)行。Arduino的硬件原理圖、電路圖、IDE軟件及核心庫文件都是開源的,Arduino官方網(wǎng)站上有大量的庫文件供使用者下載。同時(shí),在開源協(xié)議范圍內(nèi),使用者可以任意修改作品的原始設(shè)計(jì)及相應(yīng)代碼為自己服務(wù)。Arduino可以獨(dú)立運(yùn)行,也可以與MacromediaFlash,Processing,Max/MSP,PureData甚至Androi等軟件進(jìn)行交互式設(shè)計(jì)。因此,使用者可以利用Arduino軟件和硬件平臺(tái),充分發(fā)揮個(gè)人想象力和創(chuàng)造性,開發(fā)出很多令人驚艷的互動(dòng)產(chǎn)品。本論述以音樂播放器的設(shè)計(jì)為例,對(duì)Arduino軟件、硬件平臺(tái)及其在產(chǎn)品開發(fā)方面的應(yīng)用進(jìn)行了介紹。
2.1硬件平臺(tái)
Arduino主控板的微處理器主要采用Atmel公司研發(fā)的AVR單片機(jī)(如ATmega328),除了購買官方版的Arduino(圖1為比較典型的ARDUINOUNO主控板),用戶可以在主控單片機(jī)的外圍自行搭建電路,DIY自己的Arduino。目前,市面上Arduino主控板種類繁多,各有特色,有滿足可穿戴設(shè)備設(shè)計(jì)的ARDUINOGEMMA,有用于3D打印技術(shù)的METERIA101等等,用戶可按需挑選。不同的主控板有不同的數(shù)量和功能的I/O接口,方便連接外部IC模塊。通過外部擴(kuò)展,用戶可以替Arduino加上眼睛(如紅外線和超聲波傳感器)、耳朵(麥克風(fēng))和手腳(如舵機(jī)),加上與之對(duì)應(yīng)的控制程序,就能做出各種自動(dòng)控制應(yīng)用。例如:加上溫度傳感器及一些控制線路,就能讓Arduino自動(dòng)控制空調(diào)的運(yùn)轉(zhuǎn);加上舵機(jī)/步進(jìn)電機(jī),以及障礙物傳感器即可組裝一臺(tái)智能行走的機(jī)器人。由于Arduino擁有豐富的系列產(chǎn)品、大量簡便的輸入輸出資源模塊,讓Arduino得到了更為廣泛的應(yīng)用和支持。
圖1 ArduinoUNO
圖2 ArduinoIDE界面
2.2軟件平臺(tái)
ArduinoIDE界面見圖2所示。整個(gè)界面采用windows形式,簡潔明了。除了用戶熟悉的常用菜單命令如文件、編輯外,點(diǎn)擊窗口的右上方的SerialMonitor命令,可實(shí)現(xiàn)對(duì)串口通信數(shù)據(jù)的監(jiān)視。Arduino編程語言是改良式的C語言,把AVR單片機(jī)相關(guān)的一些參數(shù)設(shè)置都參數(shù)化了,開發(fā)者不了解其底層系統(tǒng)也可以容易地進(jìn)行項(xiàng)目開發(fā)。所有Arduino程序都是由setup()函數(shù)和loop()函數(shù)兩大區(qū)塊組成。Setup()函數(shù)主要進(jìn)行程序參數(shù)設(shè)置,里面的代碼從頭到尾只執(zhí)行一次;loop()函數(shù)是Arduino軟件項(xiàng)目的主體,系統(tǒng)上電后先運(yùn)行setup()函數(shù),然后就不斷循環(huán)運(yùn)行l(wèi)oop()函數(shù),執(zhí)行相關(guān)控制命令。Arduino軟件平臺(tái)自帶大量的軟件庫資源,模塊化程度高,程序開發(fā)效率高,可以快速完成互動(dòng)作品設(shè)計(jì)。
3.1系統(tǒng)硬件設(shè)計(jì)
本音樂播放器以ArduinoUNO板為控制核心,充分利用ArduinoIDE自帶Tone擴(kuò)展庫,以數(shù)組形式輸出各音符的指定頻率和節(jié)拍,送到無源蜂鳴器和彩色LED,實(shí)現(xiàn)了音樂播放和隨音樂節(jié)奏亮滅的LED效果。播放器的外部電路包括選曲鍵盤矩陣電路、蜂鳴器電路、LED顯示節(jié)奏電路,系統(tǒng)硬件電路圖見圖3所示。系統(tǒng)上電后,當(dāng)檢測到鍵盤矩陣的某個(gè)開關(guān)按下,對(duì)應(yīng)歌曲的音符數(shù)據(jù)(音高和節(jié)拍)通過數(shù)字端口發(fā)送到無源蜂鳴器,無源蜂鳴器受到特定頻率的方波驅(qū)動(dòng),可以發(fā)出“多來米發(fā)索拉西”的音樂效果。無源蜂鳴器的優(yōu)點(diǎn)是聲音頻率可控,可以和LED復(fù)用一個(gè)控制口。所以,各數(shù)字端口的數(shù)據(jù)加到LED上面時(shí),其節(jié)奏性的亮滅實(shí)現(xiàn)了節(jié)拍的顯示。
圖3 系統(tǒng)硬件電路圖
圖4 播放器程序流程圖
3.2軟件設(shè)計(jì)
從物理的角度來說,音樂是有規(guī)律出現(xiàn)的聲波振動(dòng),包含音高和節(jié)奏兩大主要因素。每一個(gè)音符唯一對(duì)應(yīng)一個(gè)發(fā)聲頻率。ArduinoIDE自帶的頭文件“pitches. h”中就以宏定義的形式給出了各個(gè)音符和頻率的對(duì)應(yīng)關(guān)系表,因此,使用者可以通過查表方式,得到每個(gè)音符的發(fā)聲頻率數(shù)據(jù),從而制作出數(shù)組形式的樂曲韻律函數(shù)。例如,需要得到鋼琴標(biāo)準(zhǔn)鍵盤小字一組C4(唱名為Do)按鍵對(duì)應(yīng)的頻率,可以使用“#defineNOTE_C4 262”語句,所產(chǎn)生音符的頻率是262Hz;而音符演奏的持續(xù)時(shí)間,決定了音樂進(jìn)行的快慢程度和節(jié)奏類型,是構(gòu)成旋律的另一個(gè)重要因素。本發(fā)聲器的設(shè)計(jì)根據(jù)樂譜給定的節(jié)拍速度先確定一個(gè)基本的延時(shí)單位,如果四分音符為一拍,每拍延時(shí)1/2s,則二分音符延時(shí)1秒,八分音符延時(shí)為1/4s,以此類推。最終,采用note-Durations[thisNote]數(shù)組來存放樂譜的節(jié)拍數(shù)據(jù)。這樣,音符數(shù)據(jù)按照節(jié)拍數(shù)據(jù)給定的時(shí)值來驅(qū)動(dòng)蜂鳴器,就實(shí)現(xiàn)了該首樂曲的播放。
ArduinoIDE包含的Tone庫可以很方便地幫助用戶制作音樂。本設(shè)計(jì)主要采用了Tone(pin,frequency,duration)函數(shù)來產(chǎn)生電子音樂。此函數(shù)中,pin表示頻率數(shù)據(jù)的數(shù)字輸出接口,int型;frequency是音符頻率,int型;duration是節(jié)拍數(shù)據(jù),單位是毫秒,unsignedlong型。只要把上述頻率和節(jié)拍數(shù)據(jù)連續(xù)賦值給Tone函數(shù),就可以實(shí)現(xiàn)樂曲的播放,系統(tǒng)軟件實(shí)現(xiàn)的程序流程圖見圖4。
下面以《生日快樂歌》(簡譜見圖5)的第一小節(jié)為例,給出了音樂播放函數(shù)play()的實(shí)現(xiàn)過程。
圖5 《生日快樂歌》簡譜
//韻律函數(shù)
intmelody[]={
NOTE_G4,//5
NOTE_G4,//5
NOTE_A4,//6
NOTE_G4,//5
NOTE_C5,//1.
NOTE_B4,//7
0,
……};
//節(jié)拍函數(shù)
intnoteDurations[]={
8,8,4,4,4,4,
4,
……
};
//播放函數(shù)
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具有豐富的軟件和硬件資源,是開發(fā)人機(jī)互動(dòng)產(chǎn)品的良好平臺(tái),具有價(jià)格便宜、互動(dòng)多樣、易學(xué)易用等特點(diǎn),目前應(yīng)用比較廣泛。本論述以音樂播放器的設(shè)計(jì)為例展示了基于Arduino的電子產(chǎn)品設(shè)計(jì)的基本過程,使讀者初步掌握Arduino的功能和特點(diǎn)。Arduino就像一個(gè)萬花筒,期待進(jìn)一步加入人們智慧的魔法,變化出奇妙無比的新型電子設(shè)計(jì),為人們創(chuàng)造更美好的生活。
[1]趙英杰.Arduino互動(dòng)設(shè)計(jì)入門[M].北京:科學(xué)出版社,2014.
[2]MichaelMcRoberts.BeginArduino[M].楊繼志,郭敬,譯.北京:電子工業(yè)出版社,2013.
[3]楊繼志,楊宇環(huán).基于Arduino的網(wǎng)絡(luò)互動(dòng)產(chǎn)品創(chuàng)新設(shè)計(jì)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2012,25(1):99-100.
[4]楊繼志,郭敬.Arduino的互動(dòng)產(chǎn)品平臺(tái)創(chuàng)新設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012(4).
[5]蔡睿妍.Arduino的原理及應(yīng)用[J].電子工程設(shè)計(jì),2012(16):155-157.
[6]趙云娥,陳學(xué)煌.基于AT89C51的電子節(jié)拍器設(shè)計(jì)[J].電子測量技術(shù),2008(3).
TP368
A
2016-6-22
趙云娥(1983-),女,漢族,山西呂梁人,碩士,講師,主要研究方向:電子信息工程技術(shù)。