相信對嵌入式開發(fā)感興趣的朋友最近一定不會對一個新名詞陌生——Arduino,。尤其對初學(xué)者來說,,恐怕都聽到過“嵌入式開發(fā)從哪里上手最好?Arduino,!”這樣的說法,。那么Arduino到底是什么呢,?是一種新的控制芯片?還是一種新的開發(fā)軟件呢,? 首先我們先看看Arduino的實物圖,下面是最常見的一種Arduino實物圖片(關(guān)于Arduino的分類,,我們會在后面詳述): 圖中已經(jīng)用紅線根據(jù)功能將各個模塊區(qū)分出來,,相信對單片機開發(fā)稍有了解的朋友一定已經(jīng)發(fā)現(xiàn),這不就是一個以AVR單片機最小系統(tǒng)為核心的控制板嗎,? 不錯,,Arduino就是以ATMEL公司的AVR單片機為核心的單片機控制板,板上除了ATmega168最小系統(tǒng)電路外,,還包含了穩(wěn)壓電路,,USB轉(zhuǎn)串口電路,一些指示用的LED,,以及一些擴展用的電路插座,。 僅僅一個單片機最小系統(tǒng),為何能風(fēng)靡歐美臺灣的學(xué)生愛好者呢,? 下面我們以圖表的形式來比較一下單片機裸機,、市面上一般的單片機開發(fā)板和Arduino之間的比較。
上面的表格中列出了三種選擇方案的最直觀比較(表中沒有比較購買渠道的便利性比較,,隨著網(wǎng)絡(luò)購物的普及,這一點已經(jīng)不再成為愛好者們需要特別關(guān)注的問題),,看起來似乎Arduino并沒有特別的優(yōu)勢,,那么為什么Arduino會得到如此熱度的追捧呢? 要回答這個問題,,我們必須首先回顧一下Arduino的發(fā)展歷程,。2005年,意大利 Ivrea 一家高科技設(shè)計學(xué)校的老師Massimo Banzi為了能給學(xué)生們提供一種便宜好用的微控制器平臺,,與當(dāng)時在這所學(xué)校做訪問學(xué)者的西班牙籍芯片工程師David Cuartielles合作設(shè)計了最初的Arduino電路板,。隨后Arduino便開始迅速的在歐洲流行起來,,并且逐漸將春風(fēng)吹到了美國、日本,、臺灣,、香港等地區(qū),最近一兩年更是在大陸地區(qū)蓬勃的發(fā)展起來,。 Arduino獨有的幾種優(yōu)勢表現(xiàn)在下列方面: 開放性:Arduino的硬件電路的軟件開發(fā)環(huán)境都是完全開源的,,在不從事商業(yè)用途的情況下任何人都可以使用、修改和分發(fā)它,。這樣不但可以使用戶更好的理解Arduino的電路原理,,更可以根據(jù)自己的需要而去修改它。比如由于空間的限制,,需要設(shè)計異形的電路板,;或是將自己的擴展電路與主控制電路設(shè)計到一起。 易用性:對于稍微有心的人,,不論基礎(chǔ)如何,,只要他有興趣,拿到Arduino之后的一個小時之內(nèi),,應(yīng)該就可以成功運行第一個簡單的程序了,。Arduino與PC的連接采用了當(dāng)下最主流的USB連接,你可以像使用一只MP3一樣把Arduino與電腦直接連起來而不要再額外安裝任何驅(qū)動程序,。而且Arduino的開發(fā)環(huán)境軟件也非常的簡單,,一目了然的菜單,僅提供了最必須的工具欄,,除去了一切可能會使初學(xué)者眼花繚亂的元素,,你甚至可以不閱讀手冊便實現(xiàn)代碼的編譯與下載(我可沒說編寫)。 交流性:對于初學(xué)者來說,,交流與展示是非常能激發(fā)學(xué)習(xí)熱情的途徑,。但有些時候,你用AVR做了個循跡小車,,我用PIC做了個小車循跡,。那么對單片機理解還不是特別深刻的初學(xué)者來說,交流上恐怕就會有些困難,。而Arduino已經(jīng)劃定了一個比較統(tǒng)一的框架,,一些底層的初始化采用了統(tǒng)一的方法,對數(shù)字信號和模擬信號使用的端口也做了自己的標(biāo)定,,初學(xué)者在交流電路或程序的時候非常方便,。 豐富的第三方資源:Arduino無論硬件還是軟件,都是全部開源的,,你可以深入的了解到底層的全部機理,,也預(yù)留了非常友好的第三方庫開發(fā)接口,。秉承了開源社區(qū)一貫的開放性和分享性,很多愛好者在成功的實現(xiàn)了自己的設(shè)計后,,會把自己的硬件和軟件拿出來與大家分享,。對于后來者來說,你可以在Arduino社區(qū)輕松找到自己想要使用的一些基本功能模塊:舵機控制,、PID調(diào)速,、A/D轉(zhuǎn)換等。特別一些模塊供應(yīng)商也開始越來越重視Arduino社區(qū),,會為自己的產(chǎn)品提供Arduino下的使用庫,這些都極大的方便了Arduino開發(fā)者,,使你可以不必拘泥于一些基本功能的編寫,,而可以把自己的精力更多的放在自己想要的功能設(shè)計中去。 是的,,單純從嵌入式開發(fā)的技術(shù)角度來說,,Arduino并不是第一選擇,為了盡可能的照顧初學(xué)者甚至是電子開發(fā)的門外漢,,Arduino定制了很多底層的設(shè)計,,這也是許多經(jīng)驗豐富的嵌入式設(shè)計人員對Arduino嗤之以鼻的原因之一?;仡^看看上面列出的那些Arduino的優(yōu)勢所在,,那么Arduino的定位究竟在何處呢? Arduino誕生之初確實是為嵌入式開發(fā)的學(xué)習(xí)而生,,但發(fā)展到今天,,Arduino已經(jīng)遠(yuǎn)遠(yuǎn)超出了嵌入式開發(fā)的領(lǐng)域。在臺灣,,Arduino被稱為“科技藝術(shù)”,,很多電子科技領(lǐng)域以外的愛好者,憑借豐富的想象力和創(chuàng)造力,,也設(shè)計開發(fā)出了很多有趣的作品,。 在大陸,Arduino更多的還是作為一種嵌入式學(xué)習(xí)和開發(fā)工具出現(xiàn),,但是它的魅力絕不僅僅如此,,它完全可以作為一種新“玩具”,甚至新的藝術(shù)載體,,來吸引更多各個領(lǐng)域的人們加入到Arduino的神奇世界里來,。 用Arduino控制的三輪小車 擦除白板的自動機器 發(fā)條微博自動給你煮咖啡 是不是已經(jīng)迫不及待,想要開始你的Arduino之旅了,?趕快到購物網(wǎng)站上搜一搜Arduino,,然后……是不是被各種不同的Arduino控制板搞花了眼,? Arduino并不是一成不變的,每隔一段時間,,Arduino官方組織就會發(fā)布最新的設(shè)計,,對Arduino在原有基礎(chǔ)上進行升級,讓愛好者們更方便的使用,。同時,,為了滿足不同層次的開發(fā)要求,Arduino也推出了不同版本的控制板設(shè)計,,這里我們來認(rèn)識一下使用最多的幾種設(shè)計: Arduino Uno Uno版本應(yīng)該說是Arduino的基礎(chǔ)板,,也是初學(xué)者的第一選擇。它提供了基本的數(shù)據(jù)接口,,對初學(xué)者足夠的存儲空間,,無論是讀取傳感器,還是驅(qū)動電機,,或者與電腦通信,,都可以輕松的勝任。 Arduino Mega 2560 這一版可以算是Uno的升級版,,各種接口的數(shù)量比Uno要多,,而且其搭載的單片機型號也要比Uno的單片機更高級一些,運算速度更快,。如果你覺得Uno的硬件資源無法滿足你的需求,,那么你可以嘗試一下Mega,當(dāng)然價格也會比Uno要更高一些,。 Arduino Nano 這個可以說是Uno的簡版,,優(yōu)先考慮了體積上的優(yōu)化,盡量將體積做到最小,,可以滿足一些手持設(shè)備或體型微小的設(shè)備使用,。當(dāng)然性能上相比Uno也略有縮水。 也許有些心急的朋友已經(jīng)要問了:哪一款可以控制步進電機,?哪一款可以實現(xiàn)無線通信,?哪一款可以演奏音樂…… 如果我告訴你都不可以,你會不會很失望,? Arduino作為一種控制芯片,,所起的作用類似于我們的大腦,大腦是無法自行運動或是發(fā)聲的,。大腦所起的作用類似于指揮官,,Arduino也是如此,想要做一些實際任務(wù),,離不開外圍電路的支持,。 很多人又要頭痛了,,電子電路完全不懂怎么辦?其實現(xiàn)在這一點也已經(jīng)不是什么大問題,。對于電子專業(yè)的學(xué)生,,或是想要學(xué)習(xí)電子電路的愛好者,當(dāng)然要一切靠自己,,查資料,,買元件,做PCB板,,焊電路……這其中當(dāng)然會有很多辛苦,,可其中學(xué)到的知識無疑也是裝入自己口袋的。 如果不想在電子電路方面花費太多的精力,,也沒有問題?,F(xiàn)在很多廠商也開發(fā)了各種各樣的Arduino外圍功能電路,無論是電機驅(qū)動,、無線通信,、音樂播放,,還是讀取各種各樣物理信號的傳感器(壓力,、速度、傾角,、方向等等),,都應(yīng)有盡有,而且使用方便,,可以直接連到Arduino控制板上工作,。 電機驅(qū)動板 藍(lán)牙模塊 霍爾傳感器 光敏傳感器 煙霧傳感器 說完了硬件,那么我們接下來談?wù)労芏嗳硕碱^痛不已的軟件開發(fā)吧,。Arduino的代碼結(jié)構(gòu)和一般的嵌入式代碼結(jié)構(gòu)略有不同,,一般的嵌入式代碼都是main函數(shù)中一個死循環(huán),程序不斷的反復(fù)執(zhí)行,,單片機在每個循環(huán)內(nèi)讀取各個外部端口的數(shù)據(jù),,然后根據(jù)這些數(shù)據(jù)來做出相應(yīng)的策略判斷,把指令再通過外部端口傳出去,,達(dá)到控制外部設(shè)備的目的,。 Arduino的程序運行方式與此差不多,只是代碼結(jié)構(gòu)略有不同,。Arduino代碼中沒有main函數(shù),,而是使用了兩個不同的必備函數(shù): Void setup() { } Void loop() { } 相信很多朋友已經(jīng)猜出來了,Arduino代碼是把初始化的代碼放在了setup函數(shù)中,,而把需要不斷循環(huán)執(zhí)行的代碼放在了loop函數(shù)中,。與傳統(tǒng)的嵌入式程序雖然結(jié)構(gòu)不同,,但設(shè)計思想還是一致的。 開發(fā)環(huán)境軟件截圖(此開發(fā)環(huán)境可以在Arduino網(wǎng)站上免費下載) Arduino的代碼語法與C++類似,,也包含了類和對象的支持,。即便是沒有任何代碼編寫的基礎(chǔ),也可以很快上手,。關(guān)于Arduino的代碼編寫,,無論是Arduino的官方網(wǎng)站,還是網(wǎng)絡(luò)上都有了相當(dāng)豐富的資料,,這里不再累述,。 很多Arduino制作還要涉及另外一種程序的編寫,便是上位機程序,。一般是PC端的程序,,你可以采用任何你所熟悉的高級語言進行開發(fā),接收Arduino控制板所傳遞過來的數(shù)據(jù)(串口傳輸),,在屏幕上顯示輸出或?qū)懭胛募?/font>VB,、VC++、Delphi,、Flash script,、Processing等等都能滿足你的要求。 一個通過上位機程序控制外部電路燈的顏色 Arduino控制板 + 外圍電路 + 程序編寫 = 整個世界,! 用Arduino制作的游戲手柄 |
|