Arduino教程及簡明例程_第1頁
Arduino教程及簡明例程_第2頁
Arduino教程及簡明例程_第3頁
Arduino教程及簡明例程_第4頁
Arduino教程及簡明例程_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1Arduino教教程程一一: 數(shù)數(shù)字字輸輸出出Arduino, 教程 11 Comments Arduino 的數(shù)字 I/O 被分成兩個部分,其中每個部分都包含有 6 個可用的 I/O 管腳,即管腳 2 到管腳 7 和管腳 8 到管腳 13。除了管腳13 上接了一個 1K 的電阻之外,其他各個管腳都直接連接到 ATmega 上。我們可以利用一個 6 位的數(shù)字跑馬燈,來對 Arduino 數(shù)字I/O 的輸出功能進(jìn)行驗證,以下是相應(yīng)的原理圖:電路中在每個 I/O 管腳上加的那個 1K 電阻被稱為限流電阻,由于發(fā)光二極管在電路中沒有等效電阻值,使用限流電阻可以使元件上通過的電流不至于過大,能夠起到

2、保護的作用。該工程對應(yīng)的代碼為:int BASE = 2;int NUM = 6;int index = 0;void setup() for (int i = BASE; i BASE + NUM; i +) pinMode(i, OUTPUT); void loop() for (int i = BASE; i MAX) count = 0; 7 val = analogRead(potPin); val = val /4; delay(val);該工程調(diào)用 analogWrite()函數(shù)在數(shù)字 I/O 端口的 11 號管腳上模仿模擬輸出,每產(chǎn)生一次輸出后都設(shè)置了相應(yīng)的延時,而延時的長度由

3、模擬輸入端口 0 號管腳上的電位器來決定。通過調(diào)整電位器的位置,我們可以觀察到發(fā)光二極管逐漸變亮后再逐漸變暗的效果。Arduino教教程程五五: 串串口口輸輸出出Arduino, 教程 No Comments 在許多實際應(yīng)用場合中我們會要求在 Arduino 和其它設(shè)備之間實現(xiàn)相互通信,而最常見通常也是最簡單的辦法就是使用串行通信。在串行通信中,兩個設(shè)備之間一個接一個地來回發(fā)送數(shù)字脈沖,它們之間必須嚴(yán)格遵循相應(yīng)的協(xié)議以保證通信的正確性。在 PC 機上上最常見的串行通信協(xié)議是 RS-232 串行協(xié)議,而在各種微控制器(單片機)上采用的則是 TTL 串行協(xié)議。由于這兩者的電平有很大的不同,因此在實

4、現(xiàn) PC 機和微控制器的通信時,必須進(jìn)行相應(yīng)的轉(zhuǎn)換。完成 RS-232 電平和 TTL 電平之間的轉(zhuǎn)換一般采用專用芯片,如 MAX232 等,但在 Arduino 上是用相應(yīng)的電平轉(zhuǎn)換電路來完成的。根據(jù) Arduino 的原理圖我們不難看出,ATmega 的 RX 和 TX 引腳一方面直接接到了數(shù)字 I/O 端口的 0 號和 1 號管腳, 另一方面又通過電平轉(zhuǎn)換電路接到了串口的母頭上。因此,當(dāng)我們需要用 Arduino 與 PC 機通信時,可以用串口線將兩者連接起來;當(dāng)我們需要用Arduino 與微控制器(如另一塊 Arduino)通信時,則可以用數(shù)字 I/O 端口的 0 號和 1 號管腳。串

5、行通信的難點在于參數(shù)的設(shè)置,如波特率、數(shù)據(jù)位、停止位等,在 Arduino 語言可以使用 Serial.begin()函數(shù)來簡化這一任務(wù)。為了實現(xiàn)數(shù)據(jù)的發(fā)送,Arduino 則提供了 Serial.print()和 Serial.println()兩個函數(shù),它們的區(qū)別在于后者會在請求發(fā)送的數(shù)據(jù)后面加上換行符,以提高輸出結(jié)果的可讀性。在這一實驗中沒有用到額外的電路, 我們只需要用串口線將 Arduino 和 PC 機連起來就可以了,相應(yīng)的代碼為:void setup() Serial.begin(9600);void loop() Serial.println(Hello World!); de

6、lay(1000);8在將工程下載到 Arduino 模塊中之后,在 Arduino 集成開發(fā)環(huán)境的工具欄中單擊“Serial Monitor”控制,打開串口監(jiān)視器:接著將波特率設(shè)置為 9600,即保持與工程中的設(shè)置相一致:如果一切正常,此時我們就可以在 Arduino 集成開發(fā)環(huán)境的 Console 窗口中看到串口上輸出的數(shù)據(jù)了:為了檢查串口上是否有數(shù)據(jù)發(fā)送,一個比較簡單的辦法是在數(shù)字 I/O 端口的 1 號管腳(TX)和 5V 電源之間接一個發(fā)光二極管,如下面的原理圖所示:這樣一旦 Arduino 在通過串口向 PC 機發(fā)送數(shù)據(jù)時,相應(yīng)的發(fā)光二極管就會閃爍,實際應(yīng)用中這是一個非常方便的調(diào)試

7、手段;-)9Arduino教教程程六六: 串串口口輸輸入入Arduino, 教程 1 Comment 串行通信是在實現(xiàn)在 PC 機與微控制器進(jìn)行交互的最簡單的辦法。之前的 PC 機上一般都配有標(biāo)準(zhǔn)的 RS-232 或者 RS-422 接口來實現(xiàn)串行通信,但現(xiàn)在這種情況已經(jīng)發(fā)生了一些改變,大家更傾向于使用 USB 這樣一種更快速但同時也更加復(fù)雜的方式來實現(xiàn)串行通信。盡管在有些計算機上現(xiàn)在已經(jīng)找不到 RS-232 或者 RS-422 接口了,但我們?nèi)钥梢酝ㄟ^ USB/串口或者 PCMCIA/串口這樣的轉(zhuǎn)換器,在這些設(shè)備上得到傳統(tǒng)的串口。通過串口連接的 Arduino 在交互式設(shè)計中能夠為 PC 機

8、提供一種全新的交互方式,比如用 PC 機控制一些之前看來非常復(fù)雜的事情,像聲音和視頻等。很多場合中都要求 Arduino 能夠通過串口接收來自于 PC 機的命令,并完成相應(yīng)的功能,這可以通過 Arduino 語言中提供的 Serial.read()函數(shù)來實現(xiàn)。在這一實驗中我們同樣不需要任何額外的電路,而只需要用串口線將 Arduino 和 PC 機連起來就可以了,相應(yīng)的 Arduino 工程代碼為:int ledPin = 13;int val; void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600); void loop() val

9、= Serial.read(); if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW);10 把工程下載到 Arduino 模塊中之后,在 Arduino 集成開發(fā)環(huán)境中打開串口監(jiān)視器并將波特率設(shè)置為 9600,然后向 Arduino 模塊發(fā)送字符 H,如下圖所示:該工程運行起來之后會不斷調(diào)用 Serial.read()函數(shù)從串口獲得數(shù)據(jù)。Arduino 語言提供的這個函數(shù)是不阻塞的,也就是說不論串口上是否真的有數(shù)據(jù)到達(dá),該函數(shù)都會立即返回。Serial.rea

10、d()函數(shù)每次只讀取一個字節(jié)的數(shù)據(jù),當(dāng)串口上有數(shù)據(jù)到達(dá)的時候,該函數(shù)的返回值為到達(dá)的數(shù)據(jù)中第一個字符的 ASCII 碼;當(dāng)串口上沒有數(shù)據(jù)到達(dá)的時候,該函數(shù)的返回值則為-1。Arduino 語言的參考手冊中沒有對 Serial.read()函數(shù)做過多的說明,我的一個疑問是如果 PC 機一次發(fā)送的數(shù)據(jù)太多,Arduino 是否提供相應(yīng)的串口緩存功能來保證數(shù)據(jù)不會丟失?Arduino 語言中提供的另外一個函數(shù) Serial.available()或許能夠幫助我們用實驗來進(jìn)行驗證:int ledPin = 13;int val; void setup() pinMode(ledPin, OUTPUT)

11、; Serial.begin(9600); void loop() val = Serial.read(); if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); Serial.print(Available: ); Serial.println(Serial.available(), DEC); 11函數(shù) Serial.available()的功能是返回串口緩沖區(qū)中當(dāng)前剩余的字符個數(shù),按照 Arduino 提供的該函數(shù)的說明,串口緩沖區(qū)中最多能緩沖 128

12、個字節(jié)。我們可以一次給 Arduino 模塊發(fā)送多個字符,來驗證這一功能:在這一實驗中,每當(dāng) Arduino 成功收到一個字符 H,連接在數(shù)字 I/O 端口管腳 13 上的發(fā)光二極管就會閃爍一次:Arduino教教程程七七: XBee無無線線通通信信Arduino, 教程 4 Comments 借助 XBee 擴展板我們可以很方便地將 XBee 模塊連接到 Arduino 上,XBee 模塊的工作原理也非常簡單,它與 Arduino 之間其實就是通過串行接口(即 Tx 和 Rx 引腳)進(jìn)行通信。對于簡單的點對點通信來講,只需要通過串行接口向 XBee 模塊寫數(shù)據(jù)就可以實現(xiàn)數(shù)據(jù)的發(fā)送;當(dāng) XBe

13、e 模塊通過無線通道接收到數(shù)據(jù)時,通過讀串行接口可以很方便地獲得這些數(shù)據(jù)。原理弄清楚之后,其實我們可以將 XBee 模塊看成是 Arduino 的串口,通過相應(yīng)的串口操作函數(shù)來實現(xiàn)數(shù)據(jù)的接收和發(fā)送。首先請按照 Arduino XBee 模塊使用手冊中的說明配置好你的兩個 XBee 模塊,然后將相應(yīng)的跳線連接到 XBEE 一端:這里我們使用一個最簡單的工程來進(jìn)行相應(yīng)的實驗:int ledPin = 13;int val;void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600);void loop() / send data to anoth

14、er XBee module Serial.print(A); delay(1000);12 / receive data from another XBee module val = Serial.read(); if (-1 != val) if (A = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(500); 該工程首先通過 Serial.print()函數(shù)向 XBee 模塊發(fā)送一個字母 A,該字母會被 XBee 模塊通過無線網(wǎng)絡(luò)發(fā)送出去,并被另外一個 XBee模塊接收到。緊接

15、著再通過 Serial.read()函數(shù)從 XBee 模塊讀取從無線網(wǎng)絡(luò)接收到的數(shù)據(jù),如果是字母 A 的話,則點亮相應(yīng)的發(fā)光二極管。將該工程編譯并分別下載到兩個 Arduino 模塊中,注意下載的時候不要連接 XBee 擴展板,這是因為 XBee 模塊會占用串口,從而導(dǎo)致下載無法正確完成。下載完成后將 XBee 擴展板連接到 Arduino 上,并分別給兩者上電。這兩個 Arduino 模塊都會向?qū)Ψ桨l(fā)送字母 A,然后從對方接收字母 A,并對點亮數(shù)字 I/O 管腳 13 上連接的發(fā)光二極管。你可以試著將兩個模塊放在房間里的不同位置,來對 XBee 模塊的傳輸性能進(jìn)行測試。Arduino電電機機

16、驅(qū)驅(qū)動動擴擴展展板板Arduino, 基本電路, 教程 11 Comments 除了使用傳感器對各種外部物理量進(jìn)行感知之外,能夠?qū)嶋H物體的運動進(jìn)行相應(yīng)的控制也是互動設(shè)計中不可或缺的一部分。在所有這類動力裝置中,電機顯然是最常見、最基本、最便宜的解決方案了,常用的電機的種類有很多種,如直流電機,步進(jìn)電機,伺服電機,減速電機等,并且每一種電機的控制方法都有所不同。如果你是一個電子高手,控制普通的直流電機用幾個三極管就行了,否則話像 L293 這樣的芯片將是一個更好的選擇。L293 芯片的核心是兩個 H-橋,所有的 H-橋芯片都具有如下一些引腳:13邏輯輸入 邏輯電壓 電源電壓 電源輸出 地 其中

17、邏輯電壓引腳采用與微控制器相同的電壓和電流,電源電壓采用與運行電機所需要的電壓和電流。邏輯輸入引腳連接到用來向H-橋輸出控制信號的微控制器上的引腳,而電源輸出引腳則連接到電機上。這么專業(yè)的術(shù)語翻譯到 Arduino 上可以這樣來理解。首先,我們需要兩套電源,一套用來給 Arduino 供電,一套用來給電機供電。其次,我們需要用到 Arduino 的數(shù)字 I/O 管腳來控制 L293,并把電機接到 L293 上接受控制。說到這里,正好解釋一下 Arduino 的供電系統(tǒng),通常 Arduino 有三種供電方式:USB 供電 電池供電 變壓器供電 后兩者在 Arduino 上統(tǒng)稱為外部供電。供電方式

18、的選擇是通過 Arduino 上的電源選擇跳線來實現(xiàn)的,當(dāng)把跳線接到“USB”一端時,采用的是 USB 供電方式,這時整個 Arduino 及其附屬電路上的電源都由 PC 的 USB 接口提供,此時電流一般比較小,只能驅(qū)動功率比較小的電路,如 LED 等。當(dāng)把跳線接到“EXT”一端時,采用的是外部供電方式,這時一般能夠驅(qū)動比較大的設(shè)備,如電機等。Arduino內(nèi)部一套電源轉(zhuǎn)換電路,可以用來將外部供電時的電壓(6-12V)轉(zhuǎn)換成內(nèi)部所需要的 5V 電壓,使用 L293 控制電機正是需要這兩套電源。下面這個就是基于 L293D 芯片的 Arduino 專用電機驅(qū)動擴展板,它能夠用來驅(qū)動兩個直流電機

19、。使用該擴展板來驅(qū)動直流電機非常簡單,只需要將擴展板插到 Arduino 上,同時將直流電機連接到擴展板上的 motors 引腳上就可以了。14正如上面所提到的,此時應(yīng)該采用 Arduino 的外部供電方式,并使用變壓器或者電源為 Arduino 提供電力。這里我選用的是 9V 變壓器和 9V 的直流電機:電機擴展板上 motors 引腳的上面兩針是用來接電機 1 的,下面兩針是用來接電機 2 的。15電路連接好之后,剩下的工作就是如何用程序進(jìn)行控制了。使用這一擴展板我們能夠控制直流電機的轉(zhuǎn)動方向和轉(zhuǎn)動速度,其中對轉(zhuǎn)動方向的控制是通過 Arduino 上的數(shù)字 I/O 引腳 12 和 13 來

20、實現(xiàn)的,對轉(zhuǎn)速的控制則是通過數(shù)字 I/O 引腳 9 和 10 來實現(xiàn)的。如果要控制直流電機 1,我們需要向引腳 9 輸出相應(yīng)的 PWM 信號來控制電機的速度,同時設(shè)置引腳 12 和 13 的高低電壓來控制電機的方向。如果要控制直流電機 2,則需要向引腳 10 輸出相應(yīng)的 PWM 信號來控制電機的速度,此時也是通過設(shè)置引腳 12 和 13 的高低電壓來控制電機的方向的。電機擴展板上帶有 S1 和 S2 兩個按鈕,分別對應(yīng)于 Arduino 數(shù)字 I/O 的 7 號和 6 號管腳 ,并且在按下時為低電平。因此我們可以像下面的程序這樣利用 S1 來控制電機 1 的正反轉(zhuǎn):int switchPin

21、= 7; / switch pinint dir1Pin = 12; / direction 1int dir2Pin = 13; / direction 2int speedPin = 9; / spped pinvoid setup() pinMode(switchPin, INPUT); pinMode(dir1Pin, OUTPUT); pinMode(dir2Pin, OUTPUT); pinMode(speedPin, OUTPUT);void loop() / switch is pressed if (digitalRead(switchPin) = LOW) / set sp

22、ped analogWrite(speedPin, 250); / set direction digitalWrite(dir1Pin, LOW);16 digitalWrite(dir2Pin, HIGH); else analogWrite(speedPin, 100); digitalWrite(dir1Pin, HIGH); digitalWrite(dir2Pin, LOW); 在將上述程序下載到 Arduino 上并運行起來之后,我們就可以通過按 S1 鍵,來改變電機的旋轉(zhuǎn)速度和方向了:)P.S. 在調(diào)試這一電機擴展板的奇遇是,在將其插入到 Arduino Diecimila 的

23、貼片版本上時,發(fā)現(xiàn) MC33269 異常熱,并且電機偶爾才能工作。進(jìn)一步設(shè)計發(fā)現(xiàn)如果把整個擴展板很好地插入到 Arduino 上時,5V 和 Gnd 之間居然是短路的。一開始并沒有發(fā)現(xiàn)問題在哪,后來才發(fā)現(xiàn)擴展板上的電容 C9 與 USB 接頭的外殼短路了!將其錫去掉一下,并抬高擴展板時問題得到解決。實際使用時請檢查下圖電容下面的引腳是否與 USB 接口的外殼短路了,特別是對于貼片版本來講,最好在通電前用萬用表檢查一下 5V 和 Gnd 之間的電阻值:)Arduino下下載載線線使使用用手手冊冊Arduino, DIY, 手冊 3 Comments Arduino 使用的是 Atmel 公司的

24、AVR 單片機,一般為 ATmega8 和 ATmega168,這一系列的單片機都支持 ISP(In System Programmability )編程,無需依賴昂貴的編程器就可以完成程序的下載。Arduino 電路在設(shè)計上考慮到了 ISP 功能,也留出了相應(yīng)的接口(ICSP),從而允許我們通過 ISP 下載線來完成 bootloader 的下載。新買來的 Arduino 模塊上一般都已經(jīng)預(yù)先下載好了 bootloader,因此上電之后就能夠直接通過 Arduino 集成開發(fā)環(huán)境下載相應(yīng)的Arduino 程序。正常情況下我們在用 Arduino 時是不需要 ISP 下載線的,但在某些情況下可

25、能會出現(xiàn)在 Arduino 集成開發(fā)環(huán)境中無法正常下載程序的現(xiàn)象,這很可能是由于 bootloader 受損所致。解決的辦法就是重新將 bootloader 燒寫到 ATmega 芯片中,此時你就需要用到這里介紹的 ISP 下載線了。17Arduio 網(wǎng)站上給出的并口下載線電路我只成功地更新過 ATmega8 的 bootloader,而無法為 Diecimila 上的 ATmega168 下載bootloader。此外,Arduino 給出的這一下載線電路過于簡單,沒有做相應(yīng)的隔離和保護, 經(jīng)常使用可能會對 Atmega 芯片帶來一定的損害。AVR 建議使用一片 74HC244 來隔離并口和

26、 ATmega 芯片,下面是我所使用的下載線的原理圖:以及自制的下載線:使用并口下載線的時候,我們需要先到計算機的 BIOS 中將并口設(shè)為 ECP(The extended capabilities port )模式,同時將 I/O基地址設(shè)置成 378:18此時在 Windows 的設(shè)備管理器中,我們會發(fā)現(xiàn)并口已經(jīng)被標(biāo)記為“ECP 打印機端口”:用鼠標(biāo)右鍵單擊后從彈出的菜單中選擇“屬性”命令打開屬性對話框,在“資源”頁面中我們會看到相應(yīng) I/O 基地址的設(shè)置已經(jīng)生效:現(xiàn)在就可以用 ISP 下載線連接計算機并口和 Arduino 上的ICSP 接口了,請?zhí)貏e留意連接方向:ISP 下載線六口插座上

27、標(biāo)有小三角的一端應(yīng)該靠近 Arduino 的 ICSP 接口上標(biāo)為 1的一端。雖然計算機并口能夠為下載電路提供一定的電壓,但一般我還是建議給 Arduino 模塊加上 5V 電壓(通過 USB線和外接電源都可以),以保證下載過程的穩(wěn)定。硬件準(zhǔn)備好之后,我們就可以通過相應(yīng)的軟件將 bootloader燒到 Arduino 中。支持 AVR 下載線的軟件比較多,如AVRDUDE 和 SLISP 等,我們在這里使用的是 PonyProg。下載并安裝好 PonyProg v2.07a BETA 版本,啟動 PonyProg 時會提示你進(jìn)行相應(yīng)的校準(zhǔn)和設(shè)置工作。首先選擇“Setup”菜單中的“Calib

28、ration”命令進(jìn)行校準(zhǔn),然后再選擇“Setup”菜單中的“Intreface Setup”命令進(jìn)行相應(yīng)的并口設(shè)置:根據(jù)你的 Arduino 模塊上的芯片類型,從“Device” 菜單中的“AVR micro”子菜單中選擇“ATmega8”或者“ATmega168”。你也可以從工具欄上的 Device 下拉框中進(jìn)行相應(yīng)的選擇:19首先從“Command”菜單中選擇“Read All” 命令,從 Arduino 模塊上讀出 ATmega 中的當(dāng)前數(shù)據(jù)和設(shè)置,其中最重要的是之后要設(shè)置的熔絲位。然后選擇“File”菜單中的“Open Program (FLASH) File” 命令,打開“Open

29、 program (FLASH) content file”對話框。從你的 Arduino安裝目錄下找出對應(yīng)于的 bootloader。對于 Arduino 0010 版本來講,我們可以在 hardwarebootloaders 目錄下找到 atmega8 和atmega168 兩個目錄,分別對應(yīng) ATmega8 和 ATmega168 芯片所對應(yīng)的 bootloader(文件擴展名為.hex),在 atmega168 目錄下可以找到 ATmegaBOOT_168_diecimila.hex 和 ATmegaBOOT_168_ng.hex 兩個文件,分別對應(yīng) Diecimila 和 NG 模塊

30、。你需要根據(jù)你的Arduino 模塊的具體情況,加載相應(yīng)的 bootloader 文件。AVR 通過熔絲來控制芯片內(nèi)部的一些功能,比如 JTAG,時鐘的使用,掉電檢測電壓,是否允許調(diào)試等。熔絲位的配置是為 Arduino下載 bootloader 過程中最復(fù)雜的一步,而且設(shè)置出錯很有可能導(dǎo)致芯片鎖死,所以一定要仔細(xì)。選擇“Command”菜單中的“Security and Configuration Bits ”命令,打開相應(yīng)的熔絲設(shè)置對話框。Arduino 的 bootloader 對熔絲位有一定的要求,主要是同外部時間設(shè)置相關(guān)的。對于串口模塊采用的 ATmega8 來講,相應(yīng)的熔絲字節(jié)要設(shè)

31、置成 0 xCA(Fuse High Byte)和 0 xFF(Fuse Low Byte),具體每位的含義可以參見 Wolf Paulus 的文章。在 PonyProg 中對ATmega8 的熔絲位設(shè)置為下圖所示:對于 NG 和 Diecimila 采用的ATmega168 來講,相應(yīng)的熔絲字節(jié)要設(shè)置成 0 xF8(Extended Fuse Byte), 0 xDF(Fuse High Byte)和 0 xFF(Fuse Low Byte)。在 PonyProg 中對ATmega168 的熔絲位設(shè)置為下圖所示:熔絲位設(shè)置好之后,選擇“Command”菜單中的“Write All”命令,將b

32、ootloader 下載到 Arduino 中。下載過程中 Arduino 上的發(fā)光二極管 L 會不斷閃爍。下載完成之后,我們可以通過Arduino 集成開發(fā)環(huán)境下載一個Arduino 工程,來驗證新下載的 bootloader 是否能夠正常工作。DIY Arduino: Hello WorldArduino, DIY No Comments 終于要開始寫第一個 Arduino 程序了,就跟之前學(xué)習(xí)所有語言一樣,第一個程序自然是 Hello World 了。不過這次有點特殊,要讓Arduino 顯示一個“Hello World”字符串恐怕有點難度,這是因為 Arduino 模塊上沒有提供任何可

33、供顯示字符的設(shè)備。而這對 Arduino新手來講,也就意味著程序的調(diào)試將是一個令人頭疼的問題。最簡單的辦法是在 Arduino 提供的數(shù)字端口(Digital I/O)上連接發(fā)光二極管,然后通過控制發(fā)光二極管的亮滅來表明程序的當(dāng)前運行狀態(tài),這的的確確可以算得上是最原始的調(diào)試方法。20我的第一個 Arduino 程序正是要通過對數(shù)字 I/O 的 13 號管腳的控制,來實現(xiàn)與其相連的發(fā)光二極的亮滅。之所以要選擇 13 號管腳步,是因為從原理圖上可以看出該管腳與 ATmega 的引腳之間連接了一個 1K 的電阻,能夠起到限流的作用,以保護二極管不被燒壞。發(fā)光二極管是有正負(fù)極性的,因此必須連接正確才能

34、夠讓其正常發(fā)光。剛買來的發(fā)光二極腿比較長的一端是正極,需要接在 Arduino數(shù)字 I/O 的 13 號管腳上;腿比較短的一端是負(fù)極,需要接在 GND 管腳上。運行 Arduino 的集成開發(fā)環(huán)境,選擇 File-New 菜單創(chuàng)建一個新的 Arduino 工程接著在 Arduino 集成開發(fā)環(huán)境的主窗口中輸入相應(yīng)的代碼:int ledPin = 13;void setup() pinMode(ledPin, OUTPUT);void loop()21 digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); dela

35、y(1000);不難看出,一個最簡單的 Arduino 程序至少要實現(xiàn)兩個函數(shù):setup()和 loop()。其中 setup()這個函數(shù)主要用來完成相應(yīng)的初始化工作,在上面的例子中是將數(shù)字 I/O 的 13 號管腳設(shè)置為數(shù)字輸出。loop()這個函數(shù)則是 Arduino 程序的主函數(shù),相當(dāng)于 C 語言中的main()函數(shù),一個 Arduino 程序要完成的主要功能都在該函數(shù)中實現(xiàn),在上面的例子中是通過變換 13 號管腳的高低電平,并設(shè)置一秒的延時,從而使發(fā)光二極管能夠間歇性地不斷亮滅。從原理上講,用 Arduino 語言編寫的程序最后會被翻譯成相應(yīng)的 C 代碼,再用 AVR-GCC 編譯后

36、下載到 ATmega 單片機中運行。因此設(shè)計 Arduino 語言的目的就是簡化單片機編程,雖然這樣效率上會有一些損失,但卻能夠極大地促進(jìn)單片機在更廣泛領(lǐng)域內(nèi)的使用,基本上算是沿襲了 PC 機上軟件設(shè)計語言從匯編語言到 C 語言再到高級語言這一過程,因此很多技術(shù)和做法其實可以借鑒。用 Arduino 語言編寫的代碼需要先驗證(Verify),以保證語法的正確性,然后再編譯生成相應(yīng)的機器碼。對 Arduino 代碼的驗證可以通過 Sketch-Verify/Compile 菜單命令完成,也可以通過工具欄上的按鈕完成:代碼成功通過驗證和編譯之后,就可以將其下載到 Arduino 模塊中了。由于昨天

37、已經(jīng)將 bootloader 成功地?zé)龑懙搅?ATmega 中,因此下載 Arduino 應(yīng)用的任務(wù)就可以完全交由 bootloader 來完成了。Arduino 的 bootloader 與集成開發(fā)環(huán)境的交互是通過串口來完成的,因此需要用串口線將 Arduino 與 PC 機的串中連接起來。我的串口線是自制的,按照 Arduino 的原理圖,只需要接 2,3 和 5 三根線,其中前兩根用于數(shù)據(jù)的收發(fā),最后一根是地線。串口線連接好之后,在 Arduino 集成開發(fā)環(huán)境的 Tools-Serial Port 菜單下選擇與 PC 相連的串口:一開始我很奇怪為什么沒有設(shè)置波特率和其它串行通信參數(shù)的地

38、方,后來在 Arduino 的網(wǎng)站上才知道這些參數(shù)都保存在一個名為preferences.txt 的配置文件中,該文件一般保存在類似于 C:Documents and SettingsAdministratorApplication DataArduino 這樣的目錄下。下面是我在該文件中找到的與串口通信相關(guān)的一些參數(shù):serial.stopbits=1serial.databits=8serial.download_rate=19200serial.parity=N不難看出,Arduino 模塊采用的是 19200 8N1 方式來進(jìn)行串口通信的。確定了這些之后,按下 Arduino 模塊的復(fù)

39、位按鈕,隨后立即執(zhí)行 File-Upload to I/O Board 菜單命令將編譯好的程序下載到 Arduino 模塊中。Arduino 的 bootloader 被設(shè)計成如果在給定的時間(通常有 7 到 8 秒)內(nèi)沒有接收到任何來自集成開發(fā)環(huán)境的命令,就自動運行之前已經(jīng)下載的程序,所以我們必須保證在正確的時間段內(nèi)給 Arduino 模塊發(fā)送程序下載的指令。除了通過菜單命令外,下載程序也可以通過快捷鍵 Ctrl+U,或者直接點擊工具欄上的相應(yīng)按鈕來完成:22將 Arduino 程序上傳到 Arduino 模塊中需要花一些時間,并且取決于工程的大小。當(dāng)程序上傳成功之后,可以在 Arduino

40、 集成開發(fā)環(huán)境的 console 窗口中看到上傳后的程序大小,以及該 Arduino 模塊能夠接受的最大程序的大?。含F(xiàn)在再次復(fù)位 Arduino 模塊,會看到發(fā)光二極管立即閃了一下,表明 bootloader 正常工作了。接著再過一段時間,大約 7 到 8 秒,會看到發(fā)光二極管間歇性地不斷亮滅,這就表明第一個 Arduino 程序已經(jīng)成功地運行起來了,CONGRATULATIONS!我在這期間遇到的唯一問題是剛開始的時候無法通過串口線下載程序,最初懷疑是串口通信的問題,后來慢慢排查發(fā)現(xiàn) Arduino 模塊能夠從串口收數(shù)據(jù),但卻無法從串口發(fā)數(shù)據(jù)。仔細(xì)檢查了硬件發(fā)現(xiàn)原來我在 Arduino 模塊

41、上接的是串口的公頭,自然收發(fā)的兩條線沒有同 PC 機完全正常地連接上,后來換成一個母頭就一切正常了。這一過程中的另一收區(qū)是仔細(xì)讀了 Arduino 關(guān)于串口部分的原理圖,原來這部分還是一個實用的 TTL 轉(zhuǎn) 232 的電平轉(zhuǎn)換電路,其中只用到了電阻、二極管和三極管,省去了一個 MAX232 芯片。至此,DIY Arduino 模塊的工作算是暫告一段落,剩下的是如何對各個硬件功能進(jìn)行詳細(xì)的驗證,這可以結(jié)合實際的項目來完成。我計劃下一步做一些簡單的 Arduino 工程,大部分可能都來源于 Arduino 網(wǎng)站或者是網(wǎng)上收集到的資料,以驗證我的 Arduino 模塊,同時也可以當(dāng)作入門的教程供大家

42、參考。AUG 26DIY Arduino: PCB和和焊焊接接Arduino, DIY 7 Comments 讀了一些有關(guān) Arduino 的介紹性的文章之后,才知道這么一個小東東居然在國外是大紅大紫,雖然沒有完全想清楚其中的原因,但似乎并不妨礙自己 DIY 它的決心。Arduino 采用開放源代碼的模式,其原理圖和電路圖都可以從其網(wǎng)站免費得到。在權(quán)衡比較了一番之后,我決定從其采用串口方式的版本開始,這一方面是因為原理相對簡單,能夠降低組裝和調(diào)試的難度,另一方面則考慮到 USB 模擬的串口并不總是那么穩(wěn)定。決定開工之后,花了一上午的時間畫好了原理圖,基本湊和吧。可輪到電路圖時可就不一樣了,封裝

43、和走線對我這業(yè)務(wù)選手來講的確不是件容易的事情。花了兩個晚上的時間,最后還是決定放棄,因為 Arduino 官方提供的電路圖在我看來確實比自己布的要漂亮多了,看來這一修養(yǎng)只能在隨后的日子里慢慢積累了。去做電路板時遇到一些問題,由于我問到的制造電路板的廠商基本上只認(rèn) Protel,根本不知道還有 Eagle CAD 一說,甚至有人還將其與 AutoCAD 混為一談,告訴我這個軟件不是用來畫電路圖的。沒23有辦法,只好回家一頓 Google,將其生成 Gerber 文件后再將送過去。這一過程也算有點收獲,除了知道何為 Gerber 文件以及如何在 Eagle CAD 中生成 Gerber 文件之外,

44、還找到了一個用來查看 Gerber 文件的好工具:CAM350。電路板從送去到拿到一般需要一周多的時間,這期間的主要任務(wù)當(dāng)然是購買元器件了。一開始并沒有注意到 Arduino 串口版本的元件列表,以為與 NG 版本一樣也采用的是 ATmega168,問了好些地方都沒得賣,最好只好高價比香港快遞過來,估計貴了不止一倍。最后在組裝的時候才發(fā)現(xiàn)原來串口版本采用的仍舊是 ATmega8,而這在村里還算是很好買到的,這一個郁悶??!元件都準(zhǔn)備妥當(dāng)之后,電路板也做出來了,雖然不是與 Arduino 官方一致的藍(lán)色,但還是挺漂亮的;-)將元件焊接到 PCB 板上又是一次對基本功的訓(xùn)練,好在這一版本的 Ardu

45、ino 采用的都是分立元件,焊接上沒有遇到太大的麻煩。期間再一次深刻體會到了工具的重要性,不時幻想自己手中那把最便宜的鉻鐵啥里也能更新?lián)Q代一下,雖然他的壽命還不到短短的一個月。焊接完成之后,萬里長征估計還只完成了第一步,要讓 Arduino 能夠正常的運行起來,肯定還有相當(dāng)多的調(diào)試和排錯的工作要做,而這也正是 DIY 的樂趣所在;-)Arduino 電電子子積積木木 專專用用傳傳感感器器擴擴展展板板 V4Arduino, 電子積木 2 Comments 真沒想到,一塊傳感器擴展板居然被我改到了第四版,而且估計還會繼續(xù)修改下去。最初的傳感器擴展板在設(shè)計的時候,只考慮到了如何將數(shù)字傳感器和模擬傳感

46、器很方便地連接起來。因此在最初定義數(shù)字傳感器線序的時候,沒有更多可以參照的地方,直到后來有人提出是否可以考慮與伺服電機(舵機)的連線順序一樣,我才很認(rèn)真地考慮這一問題,并且在最新的 V4 版本上采用,原因在于:可以很方便地與舵機相連 不容易出現(xiàn)短路的情況,在接錯錢時不會有很嚴(yán)重的后果 24可以與模擬傳感器接口統(tǒng)一起來,保持通用 用這么多的好處,自然是忍不住在 V4 上做了這么一個大的修改,好處多多,但升級也會給之前的用戶一些不便。最主要的影響在于數(shù)字連接線,由于連線的順序不一樣,因此混用的時候會有一定的麻煩;-) 也就是說,使用 V4 之前的傳感器擴展板的用戶,依舊要使用以前的數(shù)字連接線;而使用 V4 版本的用戶,則需要使用另一種數(shù)字連接線(我暫時叫它通用傳感器連接線)。V4 上其它的改動還包括:調(diào)用了模擬傳感器座的位置 POWER 區(qū)域與最新的 Arduino 保持一致 數(shù)字傳感器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論