蔡睿妍
(大連大學(xué) 信息工程學(xué)院,遼寧 大連 116622)
Arduino是2005年1月由米蘭交互設(shè)計(jì)學(xué)院的兩位教師David Cuartielles和Massimo Banzi聯(lián)合創(chuàng)建,是一塊基于開(kāi)放原始代碼的Simple I/O平臺(tái)[1-2],該平臺(tái)由兩部分組成:硬件(包括微處理器、電路板等)和軟件(編程接口和語(yǔ)言)。平臺(tái)的兩部分都是開(kāi)源的,如果需要,可以下載Arduino的圖表、購(gòu)買(mǎi)需要的所有獨(dú)立部件、切割電路板并制作一個(gè)電路板。Arduino具有類(lèi)似java、C語(yǔ)言的開(kāi)發(fā)環(huán)境??梢钥焖偈褂肁rduino語(yǔ)言與Flash或Processing等軟件完成互動(dòng)作品。Arduino能夠使用開(kāi)發(fā)完成的電子元件,如Switch、Sensors或其它控制器、LED、步進(jìn)電機(jī)或其它輸入/輸出裝置,同時(shí),Arduino也可以成為獨(dú)立與軟件溝通的平臺(tái),如flash、Processing、Max/MSP或其它互動(dòng)軟件。
Arduino在開(kāi)發(fā)之初,就明確了其應(yīng)用環(huán)境,設(shè)計(jì)了開(kāi)源開(kāi)放的平臺(tái),便于對(duì)其進(jìn)行二次開(kāi)發(fā)。Arduino的主要功能特點(diǎn)如下:
1)開(kāi)放源代碼的電路圖設(shè)計(jì)[3]。程序開(kāi)發(fā)接口免費(fèi)下載,也可依需求自己修改。
2)使用低價(jià)格的微處理控制器(ATmega8或 ATmega 128)。可以采用USB接口供電,不需外接電源,也可以使用外部9VDC輸入。
3)支持ISP線(xiàn)上燒入器,將Bootloader固件燒入芯片。Arduino控制器內(nèi)帶Bootloader程序,是系統(tǒng)上電后運(yùn)行的第一段代碼,就好比PC機(jī)BIOS中的程序,啟動(dòng)就進(jìn)行自檢,配置端口等等,當(dāng)然,單片機(jī)是靠燒寫(xiě)熔絲位來(lái)設(shè)定上電從boot區(qū)啟動(dòng)的,使用這個(gè)程序就可以直接把從串口發(fā)來(lái)的程序存放到flash區(qū)中。所以,使用Arduino編譯環(huán)境下載程序時(shí),就先讓單片機(jī)復(fù)位,啟動(dòng)Bootloader程序引導(dǎo)串口發(fā)過(guò)來(lái)的程序順利寫(xiě)入flash區(qū)中,flash可以重復(fù)燒寫(xiě),因此想更新軟件非常方便。有了Bootloader之后,可以通過(guò)串口或者USB to RS232線(xiàn)更新固件。
4)可依據(jù)官方提供的PCB和SCH電路圖,簡(jiǎn)化Arduino模組,完成獨(dú)立運(yùn)作的微處理控制。
5)可簡(jiǎn)單地與傳感器[4],各式各樣的電子元件連接,如紅外線(xiàn)、超音波、熱敏電阻、光敏電阻、伺服馬達(dá)等。
6)支持多樣的互動(dòng)程序,如 Flash,Max/MSP,VVVV,Pure Data,C,Processin等。使用低價(jià)格的微處理控制器。
7)應(yīng)用方面,利用 Arduino,突破以往只能使用鼠標(biāo)、鍵盤(pán)、CCD等輸入的裝置的互動(dòng)內(nèi)容,可以更簡(jiǎn)單地達(dá)成單人或多人游戲互動(dòng)。
Arduino的功能特點(diǎn),使其得到了越來(lái)越廣泛的應(yīng)用。
Arduino系統(tǒng)針對(duì)不同的應(yīng)用環(huán)境還開(kāi)發(fā)了不同的版本,文中以“Arduino Duemilanove”版本為例介紹,該版本于2009年開(kāi)發(fā),基于ATmega328微控制器板,能自動(dòng)選擇何種供電,直接將它用USB線(xiàn)連上計(jì)算機(jī)或者用一個(gè)電源適配器給它供電,就可以開(kāi)始使用。Arduino Duemilanove的外部結(jié)構(gòu)如圖1所示。
圖1 Arduino外部結(jié)構(gòu)圖Fig.1 External structure of Arduino
Arduino Duemilanove的結(jié)構(gòu)包括以下幾個(gè)部分:
1)1個(gè)9V DC輸入,為Arduino板提供外部電源輸出,使Arduino控制板具有能夠驅(qū)動(dòng)舵機(jī)等大功率外部設(shè)備的能力;
2)1個(gè)USB口,通過(guò)該口連接到計(jì)算機(jī),由Arduino的IDE將用戶(hù)編寫(xiě)好的控制程序上傳到控制板中,同時(shí)還可以通過(guò)該口為電路板供電,驅(qū)動(dòng)小功率的外部設(shè)備;
3)14 個(gè)數(shù)字輸入/輸出端,其中端口 0(RX)和 1(TX)分別連接主控芯片的串行引腳,用來(lái)接收和發(fā)送TTL串行數(shù)據(jù)。其中端口2、3可以接收外部信號(hào),實(shí)現(xiàn)外部中斷功能;端口 3、5、6、9、10、11 作為 PWM 端口, 可用于電機(jī) PWM 調(diào)速[5]或 音 樂(lè) 播 放 ; 端 口 10(SS)、11(MOSI)、12(MISO) 和 13(SCK)在SPI模塊庫(kù)的支持下,可以提供SPI通信模式;端口13內(nèi)部連接了一個(gè)LED指示燈,隨著13腳上電平的高低變化,實(shí)現(xiàn)開(kāi)啟和關(guān)閉;
4)6 個(gè)模擬輸入/輸出端[6],其中端口 4(SDA)和端口 5(SCL)端口可以實(shí)現(xiàn)I2C通信;
5)1個(gè)5 V DC輸出和1個(gè)3.3 V DC輸出[7-8],可為其它電路提高3.3 V和5 V直流電源;
6)1個(gè)復(fù)位接口。
Arduino系統(tǒng)是基于單片機(jī)開(kāi)發(fā)的[9-10],并且大量應(yīng)用通用和標(biāo)準(zhǔn)的電子元器件,包括硬件和軟件在內(nèi)的整個(gè)設(shè)計(jì),代碼均采用開(kāi)源方式發(fā)布,因此采購(gòu)的成本較低,在各種電子制作競(jìng)賽、電子藝術(shù)品創(chuàng)意設(shè)計(jì)等越來(lái)越多地使用Arduino作為開(kāi)發(fā)平臺(tái)。
Arduino系統(tǒng)在電子設(shè)計(jì)等方面應(yīng)用較多,本文以簡(jiǎn)單的LEO控制為例,說(shuō)明Arduino系統(tǒng)的使用。
LEO控制系統(tǒng)中,采用開(kāi)關(guān)S控制LED的亮滅,設(shè)開(kāi)關(guān)S閉合時(shí),LED發(fā)光,S斷開(kāi)時(shí),LED熄滅。因此,系統(tǒng)設(shè)計(jì)時(shí)采用數(shù)字輸入/輸出口的兩個(gè)引腳分別進(jìn)行LED和S開(kāi)關(guān)的連接,電路如圖2所示。
圖2 LED控制電路原理圖Fig.2 Diagram of LED control circuit
Arduino語(yǔ)言是建立在C/C++基礎(chǔ)上的,其實(shí)也就是基礎(chǔ)的C語(yǔ)言[11],Arduno語(yǔ)言將AVR單片機(jī)(微控制器)相關(guān)的一些參數(shù)設(shè)置模塊化,包括EEPROM、以太網(wǎng)、LED矩陣、舵機(jī)、步進(jìn)和TWI/I2C控制程序庫(kù),不需要用戶(hù)直接處理底層系統(tǒng),可以提高應(yīng)用程序的開(kāi)發(fā)效率。流程如圖3所示。
圖3 LED控制流程圖Fig.3 Flow diagram of LED control
Arduino語(yǔ)言是以 setup()開(kāi)頭,loop()作為主體的一個(gè)程序構(gòu)架。setup()用來(lái)初始化變量、管腳模式、調(diào)用庫(kù)函數(shù)等等,該函數(shù)只運(yùn)行一次,功能類(lèi)似C語(yǔ)言中的“main()”。loop()函數(shù)是一個(gè)循環(huán)函數(shù),函數(shù)內(nèi)的語(yǔ)句周而復(fù)始的循環(huán)執(zhí)行。設(shè)通過(guò)D10引腳控制LED,D2引腳連接控制開(kāi)關(guān)S,主要代碼如下:
void setup()
{
pinMode(2,INPUT):
pinMode(10,OUTPUT):
}
void loop()
{
val=digitalRead(2):
if(val==HIGH)
digitalWrite(10, LOW):
else
digitalWrite(10, HIGH):
}
Setup函數(shù)中,pinMode函數(shù)是數(shù)字I/O口輸入輸出定義函數(shù),可以定Arduino上0~13口的輸入輸出狀態(tài),INPUT和OUTPUT分別表示輸出和輸出模式。loop函數(shù)中,digitalRead為數(shù)字I/O口讀取電平值函數(shù),digitalWrite為數(shù)字I/O口輸出電平定義函數(shù)。本例中在setup函數(shù)中,將端口2定義為數(shù)字信號(hào)輸入端口,將端口10定義為數(shù)字信號(hào)輸出端口;在函數(shù)loop中,首先讀入端口2的電平信號(hào),然后依據(jù)該端口電平值的高低,設(shè)置輸出端口10的電平值。
將編寫(xiě)好的控制代碼通過(guò)Arduino的IDE上傳到控制板之后,關(guān)閉或者打開(kāi)開(kāi)關(guān)S,便會(huì)觀察到LED的亮滅情況。
Arduino系統(tǒng)是建立在C/C++基礎(chǔ)上的,也就是基礎(chǔ)的C語(yǔ)言,Arduino系統(tǒng)只是將AVR單片機(jī)(微控制器)相關(guān)的一些寄存器參數(shù)設(shè)置等都函數(shù)化了,即使不太了解AVR單片機(jī)的朋友也能輕松上手,設(shè)計(jì)出各種實(shí)用的電路開(kāi)發(fā)系統(tǒng)。
[1]翁浩峰.在Flash課件中使用傳感器[J].物理通報(bào),2010(6):35-37.WENG Hao-feng.The use of sensors in Flash courseware[J].Physics Bulletin,2010(6):35-37.
[2]袁本華,董錚.基于Arduino控制板的溫室大棚測(cè)溫系統(tǒng)設(shè)計(jì)[J].安徽農(nóng)業(yè)科學(xué),2012,40(8):5049-5050.YUAN Ben-hua,DONG Zheng.Design of the temperature measurement system based on arduino board[J].Journal of Anhui Agri,2012,40(8):5049-5050.
[3]李德駿,馬孝輝.基于Arduino平臺(tái)的家用安防監(jiān)控系統(tǒng)設(shè)計(jì)[J].科技與生活,2011(1):114.LI De-jun,MA Xiao-hui.The design of home security monitoring system based on Arduino platform[J].Technology and Life,2011(1):114.
[4]鄒建梅,王亞格.利用Arduino增強(qiáng)Flash互動(dòng)性的研究[J].中國(guó)教育技術(shù)裝備,2010(36):107-109.ZOU Jian-mei,WANG Ya-ge.Using Ardunio with adobe Flash for interactive media[J].China Educational Technology&Equipment,2010(36):107-109.
[5]崔才豪,張玉華,楊樹(shù)財(cái).利用Arduino控制板的光引導(dǎo)運(yùn)動(dòng)小車(chē)設(shè)計(jì)[J].自動(dòng)化儀表,2011,32(9):5-7.CUI Cai-hao,ZHANG Yu-hua,YANG Shu-cai.Design of the light-guided car by using Arduino control board[J].Process Automation Instrumentation,2011,32(9):5-7.
[6]Buechley,Leah Eisenberg,Michael.The LilyPad Arduino:toward wearable engineering for everyone[J].IEEE pervasive computing,2008,7(2):12-15.
[7]Oxer J,Blemings H.Practical Arduino:Cool Projects for Open Source Hardware[M].New York:Springer-Verlag,2009.
[8]Banzi M.Getting Started with Arduino[M].USA:O'Reilly Media,2008.
[9]楊繼志,楊宇環(huán).基于Arduino的網(wǎng)絡(luò)互動(dòng)產(chǎn)品創(chuàng)新設(shè)計(jì)[J].機(jī)電產(chǎn)品開(kāi)發(fā)與創(chuàng)新,2012,25(1):99-100.YANG Ji-zhi,YANG Yu-huan.Arduino-based interactive product innovation[J].Development&Innovation of Machinery& Electrical Products,2012,25(1):99-100.
[10]LORSCHEITER,Aguirre T,PAIM,et al.Using Ms-Visual studio and Arduino to do temperature measurements[J].Periódico Tchê Química,2011,8(16):60-66.
[11]Bender P,Kussmann K.Arduino based projects in the computer science capstone course[J].Journal of Computing Sciences in Colleges,2012,27(5):152-157.