版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Arduino的數(shù)字I/O被分成兩個(gè)部分,其中每個(gè)部分都包含有6個(gè)可用的I/O管腳,即管腳2到管腳7和管腳8到管腳13。除了管腳13上接了一個(gè)1K的電阻之外,其他各個(gè)管腳都直接連接到ATmega上。我們可以利用一個(gè)6位的數(shù)字跑馬燈,來(lái)對(duì)Arduino數(shù)字I/O的輸出功能進(jìn)行驗(yàn)證,以下是相應(yīng)的原理圖: 電路中在每個(gè)I/O管腳上加的那個(gè)1K電阻被稱為限流電阻,由于發(fā)光二極管在電路中沒有等效電阻值,使用限流電阻可以使元件上通過(guò)的電流不至于過(guò)大,能夠起到保護(hù)的作用。該工程對(duì)應(yīng)的代碼為:int BASE = 2;int NUM = 6
2、;int index = 0; void setup() for (int i = BASE; i < BASE + NUM; i +) pinMode(i, OUTPUT); void loop() for (int i = BASE;
3、 i < BASE + NUM; i +) digitalWrite(i, LOW); digitalWrite(BASE + index, HIGH); index = (index + 1) % NUM; delay(100);下載并運(yùn)行該工程,連接在Arduino數(shù)字I
4、/O管腳2到管腳7上的發(fā)光二極管會(huì)依次點(diǎn)亮0.1秒,然后再熄滅:這個(gè)實(shí)驗(yàn)可以用來(lái)驗(yàn)證數(shù)字I/O輸出的正確性。Arduino上一共有十二個(gè)數(shù)字I/O管腳,我們可以用同樣的辦法驗(yàn)證其他六個(gè)管腳的正確性,而這只需要對(duì)上述工程的第一行做相應(yīng)的修改就可以了:int BASE = 8;Arduino教程二: 數(shù)字輸入 在數(shù)字電路中開關(guān)(switch)是一種基本的輸入形式,它的作用是保持電路的連接或者斷開。Arduino從數(shù)字I/O管腳上只能讀出高電平(5V)或者低電平(0V),因此我們首先面臨到的一個(gè)問(wèn)題就是如何將開關(guān)的開/斷狀態(tài)轉(zhuǎn)變成Arduino能夠讀
5、取的高/低電平。解決的辦法是通過(guò)上/下拉電阻,按照電路的不同通常又可以分為正邏輯(Positive Logic)和負(fù)邏輯(Inverted Logic)兩種。在正邏輯電路中,開關(guān)一端接電源,另一端則通過(guò)一個(gè)10K的下拉電阻接地,輸入信號(hào)從開關(guān)和電阻間引出。當(dāng)開關(guān)斷開的時(shí)候,輸入信號(hào)被電阻“拉”向地,形成低電平(0V);當(dāng)開關(guān)接通的時(shí)候,輸入信號(hào)直接與電源相連,形成高電平。對(duì)于經(jīng)常用到的按壓式開關(guān)來(lái)講,就是按下為高,抬起為低。 在負(fù)邏輯電路中,開關(guān)一端接地,另一端則通過(guò)一個(gè)10K的上拉電阻接電源,輸入信號(hào)同樣也是從開關(guān)和電阻間引出。當(dāng)開關(guān)斷開時(shí),輸入信號(hào)被電阻“拉”
6、向電源,形成高電平(5V);當(dāng)開關(guān)接通的時(shí)候,輸入信號(hào)直接與地相連,形成低電平。對(duì)于經(jīng)常用到的按壓式開關(guān)來(lái)講,就是按下為低,抬起為高。 為了驗(yàn)證Arduino數(shù)字I/O的輸入功能,我們可以將開關(guān)接在Arduino的任意一個(gè)數(shù)字I/O管腳上(13除外),并通過(guò)讀取它的接通或者斷開狀態(tài),來(lái)控制其它數(shù)字I/O管腳的高低。本實(shí)驗(yàn)采用的原理圖如下所示,其中開關(guān)接在數(shù)字I/O的7號(hào)管腳上,被控的發(fā)光二極管接在數(shù)字I/O的13號(hào)管腳上:Arduino教程三: 模擬輸入Arduino的優(yōu)勢(shì)在于對(duì)數(shù)字信號(hào)的識(shí)別和處理,但我們所生活的真實(shí)世界并不是數(shù)字(digital)化的,簡(jiǎn)單到只要用0和1
7、就能夠表示所有的現(xiàn)象。例如溫度這一我們已經(jīng)司空見慣的概念,它只能在一個(gè)范圍之內(nèi)連續(xù)變化,而不可能發(fā)生像從0到1這樣的瞬時(shí)跳變,類似這樣的物理量被人們稱為是模擬(analog)的。Arduino是無(wú)法理解這些模擬量的,它們必須在經(jīng)過(guò)模數(shù)轉(zhuǎn)換后變成數(shù)字量后,才能被Arduino進(jìn)一步處理。像溫度這樣的數(shù)據(jù)必須先被轉(zhuǎn)換成微處理器能夠處理的形式(比如電壓),才能被Arduino處理,這一任務(wù)通常由各類傳感器(sensor)來(lái)完成的。例如,電路中的溫度傳感器能夠?qū)囟戎缔D(zhuǎn)換成0V到5V間的某個(gè)電壓,比如0.3V、3.27V、4.99V等。由于傳感器表達(dá)的是模擬信號(hào),它不會(huì)像數(shù)字信號(hào)那樣只有簡(jiǎn)單的高電平和
8、低電平,而有可能是在這兩者之間的任何一個(gè)數(shù)值。至于到底有多少可能的值則取決于模數(shù)轉(zhuǎn)換的精度,精度越高能夠得到的值就會(huì)越多。Arduino所采用的ATmega8微處理器一其有6個(gè)模數(shù)轉(zhuǎn)換器(ADC,Analog to Digital Converter),每一個(gè)模數(shù)轉(zhuǎn)換器的精度都是10bit,也就是說(shuō)能夠讀取1024(210 = 1024)個(gè)狀態(tài)。在Arduino的每一個(gè)模擬輸入管腳上,電壓的變化范疇是從0V到5V,因此Arduino能夠感知到的最小電壓變化是4.8毫伏(5/1024 = 4.8mV)。電位計(jì)(potentio
9、meter)是一種最簡(jiǎn)單的模擬輸入設(shè)備,它實(shí)際上就是一個(gè)可變電阻箱,通過(guò)控制滑塊所在的位置我們可以得到不同的電壓值,而輸入信號(hào)正是從滑塊所在的位置接入到電路中的。
10、160; 這一實(shí)驗(yàn)我們將通過(guò)改變電位計(jì)的值來(lái)控制發(fā)光二極管閃爍的頻率。電位計(jì)上一共有三個(gè)管腳,分別連接到Arduino的電源、地和模擬輸入的5號(hào)管腳上,發(fā)光二極管則連接到數(shù)字I/O的13號(hào)管腳上,原理圖如下所示:相應(yīng)的代碼為:int ledPin = 13;int potPin = 5;int value = 0; void setup() pinMode(
11、ledPin, OUTPUT); void loop() value = analogRead(potPin); digitalWrite(ledPin, HIGH); delay(value); digitalWrite(ledPin, LOW); delay(value);在Arduino中,對(duì)模擬輸入端口不需要調(diào)用pinMode()函數(shù)將其指定為輸入或者是輸出模式,這點(diǎn)同數(shù)字I/O端口是有所不同的。
12、通過(guò)旋轉(zhuǎn)電位計(jì)的軸,我們能改變電位計(jì)中間那根連線同地之間的電阻量,從而也就能改變從模擬輸入的5號(hào)管腳上所讀入的模擬量的值。當(dāng)電位計(jì)完全旋轉(zhuǎn)到頭時(shí),輸入到模擬輸入管腳上的電壓為0V,用analogRead()函數(shù)讀出的值為0;當(dāng)電位計(jì)完全旋轉(zhuǎn)到另一頭時(shí),輸入到模擬I/O管腳上的電壓為5V,此時(shí)用analogRead()函數(shù)讀出的值為1023;當(dāng)電位計(jì)旋轉(zhuǎn)到中間的某個(gè)位置時(shí),輸入到模擬輸入管腳上的電壓是0V到5V之間的某個(gè)值,而用analogRead()函數(shù)讀出的則是位于0到1023之間的某個(gè)對(duì)應(yīng)值。讀出的模擬量在我們的實(shí)驗(yàn)中被用來(lái)確定發(fā)光二極管點(diǎn)亮和熄滅的時(shí)間,以反映模擬量的變化。電位計(jì)運(yùn)用的是
13、分壓原理,通過(guò)旋轉(zhuǎn)到不同的位置來(lái)得到不同的電壓值。從這種意義上講,它能夠被用來(lái)對(duì)當(dāng)前旋轉(zhuǎn)到的位置進(jìn)行度量,因此可以被用在轉(zhuǎn)向輪等旋轉(zhuǎn)裝置中。今天發(fā)現(xiàn)PCB板上另外一個(gè)錯(cuò)誤,就是將模擬輸入對(duì)應(yīng)管腳號(hào)標(biāo)反了,試了好久才意識(shí)到是這一問(wèn)題。加上之前電源設(shè)計(jì)上的兩個(gè)小缺陷, 一共有三個(gè)需要修改的地方。如果有機(jī)會(huì)再做PCB板的話,試著將這些問(wèn)題解決一下:-) 相應(yīng)的代碼為:int ledPin = 13;int switchPin = 7;int value = 0; voi
14、d setup() pinMode(ledPin, OUTPUT); pinMode(switchPin, INPUT); void loop() value = digitalRead(switchPin); if (HIGH = value) / turn LED off
15、 digitalWrite(ledPin, LOW); else / turn LED on digitalWrite(ledPin, HIGH); 由于采用的是負(fù)邏輯電路,開關(guān)按下時(shí)用digitalRead()函數(shù)讀取到的值為L(zhǎng)OW,此時(shí)再用digitalWrite()函數(shù)將發(fā)光二極管所在的管腳置為高,點(diǎn)亮發(fā)光二極管。同理,當(dāng)開關(guān)抬起時(shí),發(fā)光二極管將被熄滅,這樣我
16、們就實(shí)現(xiàn)了用開關(guān)來(lái)控制發(fā)光二極管的功能。 Arduino教程四: 模擬輸出就像模擬輸入一樣,在現(xiàn)實(shí)的物理世界中我們經(jīng)常需要輸出除了0和1之外的其他數(shù)值。例如,除了想用微控制器找開或者關(guān)閉電燈之外,我們還會(huì)想控制燈光的亮度,這時(shí)就需要用到模擬輸出。由于Arduino的微控制器只能產(chǎn)生高電壓(5V)或者低電壓(0V),而不能產(chǎn)生變化的電壓,因此必須采用脈寬度調(diào)制技術(shù)(PWM,Pulse Width Modulation)來(lái)模仿模擬電壓。PWM是一種開關(guān)式穩(wěn)壓電源應(yīng)用,它是借助微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常用效的技術(shù),廣泛應(yīng)用在從測(cè)量、通信到
17、功率控制與變換的許多領(lǐng)域中。簡(jiǎn)而言之,PWM是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法,它通過(guò)對(duì)半導(dǎo)體開關(guān)器件的導(dǎo)通和關(guān)斷進(jìn)行控制,使輸出端得到一系列幅值相等但寬度不相等的脈沖,而這些脈沖能夠被用來(lái)代替正弦波或其它所需要的波形。在Arduino數(shù)字I/O管腳9、10和11上,我們可以通過(guò)analogWrite()函數(shù)來(lái)產(chǎn)生模擬輸出。該函數(shù)有兩個(gè)參數(shù),其中第一個(gè)參數(shù)是要產(chǎn)生模擬信號(hào)的引腳(9、10或者11);第二個(gè)參數(shù)是用于產(chǎn)生模擬信號(hào)的脈沖寬度,取值范圍是0到255。脈沖寬度的值取0可以產(chǎn)生0V的模擬電壓,取255則可以產(chǎn)生5V的模擬電壓。不難看出,脈沖寬度的取值變化1,產(chǎn)生的模擬電壓將變化0.0
18、196V(5/255 = 0.0196)。本實(shí)驗(yàn)中我們將用模擬輸出來(lái)調(diào)暗發(fā)光二極管(LED),由于正常情況下LED對(duì)電壓的變化非常敏感,因此當(dāng)脈沖寬度變化時(shí)人眼會(huì)感覺到LED實(shí)際上是在不斷地熄滅和點(diǎn)亮,而不是逐漸變暗。解決這一問(wèn)題可以采用濾波電路,它能使有用頻率信號(hào)通過(guò)而同時(shí)抑制(或大大衰減)無(wú)用頻率信號(hào)。實(shí)驗(yàn)中我們采用的是低通濾波器,它的原理非常簡(jiǎn)單,只需要一個(gè)電阻和一個(gè)電容,能夠很好地過(guò)濾掉電路中超過(guò)某一頻率的信號(hào)。 此處給出的電路并不能校平所有脈沖,它之所以被稱為“低通濾波”是因?yàn)樗辉试S頻率低于某個(gè)限度的脈沖通過(guò),對(duì)于高于這個(gè)限度的
19、脈沖則被平衡為偽模擬電壓,濾波的頻率范圍由電阻器和電容器的比值決定。實(shí)驗(yàn)中采用的電路原理如下: 相應(yīng)的代碼為:int potPin = 0;int ledPin = 11; byte bright_table = 30, 30, 30, 40, 50, 60, 70, 80, 90,
20、60;100,110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 250, 240, 230, 220, 210, 200, 190, 180, 170, 160, 150, 140, 130, 120, 110
21、, 100, 90, 80, 70, 60, 50, 40, 30, 30, 30 int MAX = 50;int count = 0;int val = 0; void setup() pinMode(ledPin, OUT
22、PUT); void loop() analogWrite(ledPin, bright_tablecount); count +; if (count > MAX) count = 0; val = analogRead(potPin); val =
23、60;val /4; delay(val);該工程調(diào)用analogWrite()函數(shù)在數(shù)字I/O端口的11號(hào)管腳上模仿模擬輸出,每產(chǎn)生一次輸出后都設(shè)置了相應(yīng)的延時(shí),而延時(shí)的長(zhǎng)度由模擬輸入端口0號(hào)管腳上的電位器來(lái)決定。通過(guò)調(diào)整電位器的位置,我們可以觀察到發(fā)光二極管逐漸變亮后再逐漸變暗的效果。Arduino教程五: 串口輸出在許多實(shí)際應(yīng)用場(chǎng)合中我們會(huì)要求在Arduino和其它設(shè)備之間實(shí)現(xiàn)相互通信,而最常見通常也是最簡(jiǎn)單的辦法就是使用串行通信。在串行通信中,兩個(gè)設(shè)備之間一個(gè)接一個(gè)地來(lái)回發(fā)送數(shù)字脈沖,它們之間必須嚴(yán)格遵循相應(yīng)的協(xié)議以保證通信的正確性。在PC機(jī)上
24、上最常見的串行通信協(xié)議是RS-232串行協(xié)議,而在各種微控制器(單片機(jī))上采用的則是TTL串行協(xié)議。由于這兩者的電平有很大的不同,因此在實(shí)現(xiàn)PC機(jī)和微控制器的通信時(shí),必須進(jìn)行相應(yīng)的轉(zhuǎn)換。完成RS-232電平和TTL電平之間的轉(zhuǎn)換一般采用專用芯片,如MAX232等,但在Arduino上是用相應(yīng)的電平轉(zhuǎn)換電路來(lái)完成的。根據(jù)Arduino的原理圖我們不難看出,ATmega的RX和TX引腳一方面直接接到了數(shù)字I/O端口的0號(hào)和1號(hào)管腳, 另一方面又通過(guò)電平轉(zhuǎn)換電路接到了串口的母頭上。因此,當(dāng)我們需要用Arduino與PC機(jī)通信時(shí),可以用串口線將兩者連接起來(lái);當(dāng)我們需要用Arduino與微控制
25、器(如另一塊Arduino)通信時(shí),則可以用數(shù)字I/O端口的0號(hào)和1號(hào)管腳。串行通信的難點(diǎn)在于參數(shù)的設(shè)置,如波特率、數(shù)據(jù)位、停止位等,在Arduino語(yǔ)言可以使用Serial.begin()函數(shù)來(lái)簡(jiǎn)化這一任務(wù)。為了實(shí)現(xiàn)數(shù)據(jù)的發(fā)送,Arduino則提供了Serial.print()和Serial.println()兩個(gè)函數(shù),它們的區(qū)別在于后者會(huì)在請(qǐng)求發(fā)送的數(shù)據(jù)后面加上換行符,以提高輸出結(jié)果的可讀性。在這一實(shí)驗(yàn)中沒有用到額外的電路, 我們只需要用串口線將Arduino和PC機(jī)連起來(lái)就可以了,相應(yīng)的代碼為:void setup() Serial.
26、begin(9600); void loop() Serial.println("Hello World!"); delay(1000);在將工程下載到Arduino模塊中之后,在Arduino集成開發(fā)環(huán)境的工具欄中單擊“Serial Monitor”控制,打開串口監(jiān)視器:接著將波特率設(shè)置為9600,即保持與工程中的設(shè)置相一致:如果一切正常,此時(shí)我們就可以在Arduino集成開發(fā)環(huán)境的Console窗口中看到串口上輸出的數(shù)據(jù)了:為了檢查串口上是否有數(shù)據(jù)發(fā)送,一個(gè)比較簡(jiǎn)單的辦法是在
27、數(shù)字I/O端口的1號(hào)管腳(TX)和5V電源之間接一個(gè)發(fā)光二極管,如下面的原理圖所示:這樣一旦Arduino在通過(guò)串口向PC機(jī)發(fā)送數(shù)據(jù)時(shí),相應(yīng)的發(fā)光二極管就會(huì)閃爍,實(shí)際應(yīng)用中這是一個(gè)非常方便的調(diào)試手段;-)Arduino教程六: 串口輸入串行通信是在實(shí)現(xiàn)在PC機(jī)與微控制器進(jìn)行交互的最簡(jiǎn)單的辦法。之前的PC機(jī)上一般都配有標(biāo)準(zhǔn)的RS-232或者RS-422接口來(lái)實(shí)現(xiàn)串行通信,但現(xiàn)在這種情況已經(jīng)發(fā)生了一些改變,大家更傾向于使用USB這樣一種更快速但同時(shí)也更加復(fù)雜的方式來(lái)實(shí)現(xiàn)串行通信。盡管在有些計(jì)算機(jī)上現(xiàn)在已經(jīng)找不到RS-232或者RS-422接口了,但我們?nèi)钥梢酝ㄟ^(guò)USB/串口或者PCMCI
28、A/串口這樣的轉(zhuǎn)換器,在這些設(shè)備上得到傳統(tǒng)的串口。通過(guò)串口連接的Arduino在交互式設(shè)計(jì)中能夠?yàn)镻C機(jī)提供一種全新的交互方式,比如用PC機(jī)控制一些之前看來(lái)非常復(fù)雜的事情,像聲音和視頻等。很多場(chǎng)合中都要求Arduino能夠通過(guò)串口接收來(lái)自于PC機(jī)的命令,并完成相應(yīng)的功能,這可以通過(guò)Arduino語(yǔ)言中提供的Serial.read()函數(shù)來(lái)實(shí)現(xiàn)。在這一實(shí)驗(yàn)中我們同樣不需要任何額外的電路,而只需要用串口線將Arduino和PC機(jī)連起來(lái)就可以了,相應(yīng)的Arduino工程代碼為:int ledPin = 13;int val; void
29、160;setup() pinMode(ledPin, OUTPUT); Serial.begin(9600); void loop() val = Serial.read(); if (-1 != val) if ('H' = val)
30、60; digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); 把工程下載到Arduino模塊中之后,在Arduino集成開發(fā)環(huán)境中打開串口監(jiān)視器并將波特率設(shè)置為9600,然后向Arduino模塊發(fā)送字符H,如下圖所示: 該工程運(yùn)行起來(lái)之后會(huì)不斷調(diào)用Seria
31、l.read()函數(shù)從串口獲得數(shù)據(jù)。Arduino語(yǔ)言提供的這個(gè)函數(shù)是不阻塞的,也就是說(shuō)不論串口上是否真的有數(shù)據(jù)到達(dá),該函數(shù)都會(huì)立即返回。Serial.read()函數(shù)每次只讀取一個(gè)字節(jié)的數(shù)據(jù),當(dāng)串口上有數(shù)據(jù)到達(dá)的時(shí)候,該函數(shù)的返回值為到達(dá)的數(shù)據(jù)中第一個(gè)字符的ASCII碼;當(dāng)串口上沒有數(shù)據(jù)到達(dá)的時(shí)候,該函數(shù)的返回值則為-1。Arduino語(yǔ)言的參考手冊(cè)中沒有對(duì)Serial.read()函數(shù)做過(guò)多的說(shuō)明,我的一個(gè)疑問(wèn)是如果PC機(jī)一次發(fā)送的數(shù)據(jù)太多,Arduino是否提供相應(yīng)的串口緩存功能來(lái)保證數(shù)據(jù)不會(huì)丟失?Arduino語(yǔ)言中提供的另外一個(gè)函數(shù)Serial.available()或許能夠幫助我們
32、用實(shí)驗(yàn)來(lái)進(jìn)行驗(yàn)證:int ledPin = 13;int val; void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600); void loop() val = Serial.read(); if (-1 != val)
33、; if ('H' = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); Serial.print("Available:
34、"); Serial.println(Serial.available(), DEC); 函數(shù)Serial.available()的功能是返回串口緩沖區(qū)中當(dāng)前剩余的字符個(gè)數(shù),按照Arduino提供的該函數(shù)的說(shuō)明,串口緩沖區(qū)中最多能緩沖128個(gè)字節(jié)。我們可以一次給Arduino模塊發(fā)送多個(gè)字符,來(lái)驗(yàn)證這一功能: 在這一實(shí)驗(yàn)中,每當(dāng)Arduino成功收到一個(gè)字符H,連接在數(shù)字I
35、/O端口管腳13上的發(fā)光二極管就會(huì)閃爍一次:Arduino教程七: XBee無(wú)線通信借助XBee擴(kuò)展板我們可以很方便地將XBee模塊連接到Arduino上,XBee模塊的工作原理也非常簡(jiǎn)單,它與Arduino之間其實(shí)就是通過(guò)串行接口(即Tx和Rx引腳)進(jìn)行通信。對(duì)于簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)通信來(lái)講,只需要通過(guò)串行接口向XBee模塊寫數(shù)據(jù)就可以實(shí)現(xiàn)數(shù)據(jù)的發(fā)送;當(dāng)XBee模塊通過(guò)無(wú)線通道接收到數(shù)據(jù)時(shí),通過(guò)讀串行接口可以很方便地獲得這些數(shù)據(jù)。原理弄清楚之后,其實(shí)我們可以將XBee模塊看成是Arduino的串口,通過(guò)相應(yīng)的串口操作函數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送。首先請(qǐng)按照Arduino XBee模
36、塊使用手冊(cè)中的說(shuō)明配置好你的兩個(gè)XBee模塊,然后將相應(yīng)的跳線連接到XBEE一端: 這里我們使用一個(gè)最簡(jiǎn)單的工程來(lái)進(jìn)行相應(yīng)的實(shí)驗(yàn):int ledPin = 13;int val; void setup() pinMode(ledPin, OUTPUT); Serial.begin(9600); void loop() / send data to another
37、60;XBee module Serial.print('A'); delay(1000); / receive data from another XBee module val = Serial.read(); if (-1 != val) if ('A'
38、; = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(500); 該工程首先通過(guò)Seri
39、al.print()函數(shù)向XBee模塊發(fā)送一個(gè)字母A,該字母會(huì)被XBee模塊通過(guò)無(wú)線網(wǎng)絡(luò)發(fā)送出去,并被另外一個(gè)XBee模塊接收到。緊接著再通過(guò)Serial.read()函數(shù)從XBee模塊讀取從無(wú)線網(wǎng)絡(luò)接收到的數(shù)據(jù),如果是字母A的話,則點(diǎn)亮相應(yīng)的發(fā)光二極管。將該工程編譯并分別下載到兩個(gè)Arduino模塊中,注意下載的時(shí)候不要連接XBee擴(kuò)展板,這是因?yàn)閄Bee模塊會(huì)占用串口,從而導(dǎo)致下載無(wú)法正確完成。下載完成后將XBee擴(kuò)展板連接到Arduino上,并分別給兩者上電。這兩個(gè)Arduino模塊都會(huì)向?qū)Ψ桨l(fā)送字母A,然后從對(duì)方接收字母A,并對(duì)點(diǎn)亮數(shù)字I/O管腳13上連接的發(fā)光二極管。你可以試著將兩個(gè)
40、模塊放在房間里的不同位置,來(lái)對(duì)XBee模塊的傳輸性能進(jìn)行測(cè)試。 Arduino電機(jī)驅(qū)動(dòng)擴(kuò)展板除了使用傳感器對(duì)各種外部物理量進(jìn)行感知之外,能夠?qū)?shí)際物體的運(yùn)動(dòng)進(jìn)行相應(yīng)的控制也是互動(dòng)設(shè)計(jì)中不可或缺的一部分。在所有這類動(dòng)力裝置中,電機(jī)顯然是最常見、最基本、最便宜的解決方案了,常用的電機(jī)的種類有很多種,如直流電機(jī),步進(jìn)電機(jī),伺服電機(jī),減速電機(jī)等,并且每一種電機(jī)的控制方法都有所不同。如果你是一個(gè)電子高手,控制普通的直流電機(jī)用幾個(gè)三極管就行了,否則話像L293這樣的芯片將是一個(gè)更好的選擇。L293芯片的核心是兩個(gè)H-橋,所有的H-橋芯片都具有如下一些引腳:· 邏輯輸入
41、0;· 邏輯電壓 · 電源電壓 · 電源輸出 · 地 其中邏輯電壓引腳采用與微控制器相同的電壓和電流,電源電壓采用與運(yùn)行電機(jī)所需要的電壓和電流。邏輯輸入引腳連接到用來(lái)向H-橋輸出控制信號(hào)的微控制器上的引腳,而電源輸出引腳則連接到電機(jī)上。這么專業(yè)的術(shù)語(yǔ)翻譯到Arduino上可以這樣來(lái)理解。首先,我們需要兩套電源,一套用來(lái)給Arduino供電,一套用來(lái)給電機(jī)供電。其次,我們需要用到Arduino的數(shù)字I/O管腳來(lái)控制L293,并把電機(jī)接到L293上接受控制。說(shuō)到這里,正好解釋一下
42、Arduino的供電系統(tǒng),通常Arduino有三種供電方式:· USB供電 · 電池供電 · 變壓器供電 后兩者在Arduino上統(tǒng)稱為外部供電。供電方式的選擇是通過(guò)Arduino上的電源選擇跳線來(lái)實(shí)現(xiàn)的,當(dāng)把跳線接到“USB”一端時(shí),采用的是USB供電方式,這時(shí)整個(gè)Arduino及其附屬電路上的電源都由PC的USB接口提供,此時(shí)電流一般比較小,只能驅(qū)動(dòng)功率比較小的電路,如LED等。當(dāng)把跳線接到“EXT”一端時(shí),采用的是外部供電方式,這時(shí)一般能夠驅(qū)動(dòng)比較大的設(shè)備,如電機(jī)等。Arduino內(nèi)部一套電源轉(zhuǎn)換電
43、路,可以用來(lái)將外部供電時(shí)的電壓(6-12V)轉(zhuǎn)換成內(nèi)部所需要的5V電壓,使用L293控制電機(jī)正是需要這兩套電源。下面這個(gè)就是基于L293D芯片的Arduino專用電機(jī)驅(qū)動(dòng)擴(kuò)展板,它能夠用來(lái)驅(qū)動(dòng)兩個(gè)直流電機(jī)。使用該擴(kuò)展板來(lái)驅(qū)動(dòng)直流電機(jī)非常簡(jiǎn)單,只需要將擴(kuò)展板插到Arduino上,同時(shí)將直流電機(jī)連接到擴(kuò)展板上的motors引腳上就可以了。正如上面所提到的,此時(shí)應(yīng)該采用Arduino的外部供電方式,并使用變壓器或者電源為Arduino提供電力。這里我選用的是9V變壓器和9V的直流電機(jī):電機(jī)擴(kuò)展板上motors引腳的上面兩針是用來(lái)接電機(jī)1的,下面兩針是用來(lái)接電機(jī)2的。電路連接好之后,剩下的工作就是如何
44、用程序進(jìn)行控制了。使用這一擴(kuò)展板我們能夠控制直流電機(jī)的轉(zhuǎn)動(dòng)方向和轉(zhuǎn)動(dòng)速度,其中對(duì)轉(zhuǎn)動(dòng)方向的控制是通過(guò)Arduino上的數(shù)字I/O引腳12和13來(lái)實(shí)現(xiàn)的,對(duì)轉(zhuǎn)速的控制則是通過(guò)數(shù)字I/O引腳9和10來(lái)實(shí)現(xiàn)的。如果要控制直流電機(jī)1,我們需要向引腳9輸出相應(yīng)的PWM信號(hào)來(lái)控制電機(jī)的速度,同時(shí)設(shè)置引腳12和13的高低電壓來(lái)控制電機(jī)的方向。如果要控制直流電機(jī)2,則需要向引腳10輸出相應(yīng)的PWM信號(hào)來(lái)控制電機(jī)的速度,此時(shí)也是通過(guò)設(shè)置引腳12和13 的高低電壓來(lái)控制電機(jī)的方向的。電機(jī)擴(kuò)展板上帶有S1和S2兩個(gè)按鈕,分別對(duì)應(yīng)于Arduino數(shù)字I/O的7號(hào)和6號(hào)管腳 ,并且在按下時(shí)為低電平。
45、因此我們可以像下面的程序這樣利用S1來(lái)控制電機(jī)1的正反轉(zhuǎn):int switchPin = 7; / switch pinint dir1Pin = 12; / direction 1int dir2Pin = 13; / direction 2int speedPin = 9; / s
46、pped pin void setup() pinMode(switchPin, INPUT); pinMode(dir1Pin, OUTPUT); pinMode(dir2Pin, OUTPUT); pinMode(speedPin, OUTPUT); void loop() / switch is pressed if
47、 (digitalRead(switchPin) = LOW) / set spped analogWrite(speedPin, 250); / set direction digitalWrite(dir1Pin, LOW); digitalWrite(dir2P
48、in, HIGH); else analogWrite(speedPin, 100); digitalWrite(dir1Pin, HIGH); digitalWrite(dir2Pin, LOW); 在將上述程序下載到Arduino上并運(yùn)行起來(lái)之后,我們就可以通過(guò)按S1鍵,來(lái)改變電機(jī)的旋轉(zhuǎn)速度和方向了:)P.S. 在調(diào)試這一電機(jī)擴(kuò)展板的奇遇
49、是,在將其插入到Arduino Diecimila的貼片版本上時(shí),發(fā)現(xiàn)MC33269異常熱,并且電機(jī)偶爾才能工作。進(jìn)一步設(shè)計(jì)發(fā)現(xiàn)如果把整個(gè)擴(kuò)展板很好地插入到Arduino上時(shí),5V和Gnd之間居然是短路的。一開始并沒有發(fā)現(xiàn)問(wèn)題在哪,后來(lái)才發(fā)現(xiàn)擴(kuò)展板上的電容C9與USB接頭的外殼短路了!將其錫去掉一下,并抬高擴(kuò)展板時(shí)問(wèn)題得到解決。實(shí)際使用時(shí)請(qǐng)檢查下圖電容下面的引腳是否與USB接口的外殼短路了,特別是對(duì)于貼片版本來(lái)講,最好在通電前用萬(wàn)用表檢查一下5V和Gnd之間的電阻值:) Arduino下載線使用手冊(cè)Arduino使用的是Atmel公司的AVR單片機(jī),一般為ATmega8和A
50、Tmega168,這一系列的單片機(jī)都支持ISP(In System Programmability )編程,無(wú)需依賴昂貴的編程器就可以完成程序的下載。Arduino電路在設(shè)計(jì)上考慮到了ISP功能,也留出了相應(yīng)的接口(ICSP),從而允許我們通過(guò)ISP下載線來(lái)完成bootloader的下載。新買來(lái)的Arduino模塊上一般都已經(jīng)預(yù)先下載好了bootloader,因此上電之后就能夠直接通過(guò)Arduino集成開發(fā)環(huán)境下載相應(yīng)的Arduino程序。正常情況下我們?cè)谟肁rduino時(shí)是不需要ISP下載線的,但在某些情況下可能會(huì)出現(xiàn)在Arduino集成開發(fā)環(huán)境中無(wú)法正常下載程
51、序的現(xiàn)象,這很可能是由于bootloader受損所致。解決的辦法就是重新將bootloader燒寫到ATmega芯片中,此時(shí)你就需要用到這里介紹的ISP下載線了。Arduio網(wǎng)站上給出的并口下載線電路我只成功地更新過(guò)ATmega8的bootloader,而無(wú)法為Diecimila上的ATmega168下載bootloader。此外,Arduino給出的這一下載線電路過(guò)于簡(jiǎn)單,沒有做相應(yīng)的隔離和保護(hù), 經(jīng)常使用可能會(huì)對(duì)Atmega芯片帶來(lái)一定的損害。AVR建議使用一片74HC244來(lái)隔離并口和ATmega芯片,下面是我所使用的下載線的原理圖:以及自制的下載線:使用并口下載線的時(shí)候,我們
52、需要先到計(jì)算機(jī)的BIOS中將并口設(shè)為ECP(The extended capabilities port )模式,同時(shí)將I/O基地址設(shè)置成378:此時(shí)在Windows的設(shè)備管理器中,我們會(huì)發(fā)現(xiàn)并口已經(jīng)被標(biāo)記為“ECP 打印機(jī)端口”: 用鼠標(biāo)右鍵單擊后從彈出的菜單中選擇“屬性”命令打開屬性對(duì)話框,在“資源”頁(yè)面中我們會(huì)看到相應(yīng)I/O基地址的設(shè)置已經(jīng)生效: 現(xiàn)在就可以用ISP下載線連接計(jì)算機(jī)并口和Arduino上的ICSP接口了,請(qǐng)?zhí)貏e留意連接方向:ISP下載線六口插座上標(biāo)有小三角的一端應(yīng)該靠近 Arduino的ICS
53、P接口上標(biāo)為1的一端。雖然計(jì)算機(jī)并口能夠?yàn)橄螺d電路提供一定的電壓,但一般我還是建議給Arduino模塊加上5V電壓(通過(guò)USB線和外接電源都可以),以保證下載過(guò)程的穩(wěn)定。硬件準(zhǔn)備好之后,我們就可以通過(guò)相應(yīng)的軟件將bootloader燒到Arduino中。支持AVR下載線的軟件比較多,如AVRDUDE和SLISP等,我們?cè)谶@里使用的是PonyProg。下載并安裝好PonyProg v2.07a BETA版本,啟動(dòng)PonyProg時(shí)會(huì)提示你進(jìn)行相應(yīng)的校準(zhǔn)和設(shè)置工作。首先選擇“Setup”菜單中的“Calibration”命令進(jìn)行校準(zhǔn),然后再選擇“Setup”菜單中的“Intre
54、face Setup”命令進(jìn)行相應(yīng)的并口設(shè)置: 根據(jù)你的Arduino模塊上的芯片類型,從“Device” 菜單中的“AVR micro”子菜單中選擇“ATmega8”或者“ATmega168”。你也可以從工具欄上的Device下拉框中進(jìn)行相應(yīng)的選擇:首先從“Command”菜單中選擇“Read All” 命令,從Arduino模塊上讀出ATmega中的當(dāng)前數(shù)據(jù)和設(shè)置,其中最重要的是之后要設(shè)置的熔絲位。然后選擇“File”菜單中的“Open Program (FLASH) File” 命令,打開
55、“Open program (FLASH) content file”對(duì)話框。從你的Arduino安裝目錄下找出對(duì)應(yīng)于的bootloader。對(duì)于Arduino 0010版本來(lái)講,我們可以在hardwarebootloaders目錄下找到atmega8和atmega168兩個(gè)目錄,分別對(duì)應(yīng)ATmega8和ATmega168芯片所對(duì)應(yīng)的bootloader(文件擴(kuò)展名為.hex),在atmega168目錄下可以找到ATmegaBOOT_168_diecimila.hex和ATmegaBOOT_168_ng.hex兩個(gè)文件,分別對(duì)應(yīng)Diecimil
56、a和NG模塊。你需要根據(jù)你的Arduino模塊的具體情況,加載相應(yīng)的bootloader文件。AVR通過(guò)熔絲來(lái)控制芯片內(nèi)部的一些功能,比如JTAG,時(shí)鐘的使用,掉電檢測(cè)電壓,是否允許調(diào)試等。熔絲位的配置是為Arduino下載bootloader過(guò)程中最復(fù)雜的一步,而且設(shè)置出錯(cuò)很有可能導(dǎo)致芯片鎖死,所以一定要仔細(xì)。選擇“Command”菜單中的“Security and Configuration Bits ”命令,打開相應(yīng)的熔絲設(shè)置對(duì)話框。Arduino的bootloader對(duì)熔絲位有一定的要求,主要是同外部時(shí)間設(shè)置相關(guān)的。對(duì)于串口模塊采用的ATmega
57、8來(lái)講,相應(yīng)的熔絲字節(jié)要設(shè)置成0xCA(Fuse High Byte)和0xFF(Fuse Low Byte),具體每位的含義可以參見Wolf Paulus的文章。在PonyProg中對(duì)ATmega8的熔絲位設(shè)置為下圖所示:對(duì)于NG和Diecimila采用的ATmega168來(lái)講,相應(yīng)的熔絲字節(jié)要設(shè)置成0xF8(Extended Fuse Byte), 0xDF(Fuse High Byte)和0xFF(Fuse Low Byte)。在PonyProg中對(duì)ATmega168的
58、熔絲位設(shè)置為下圖所示: 熔絲位設(shè)置好之后,選擇“Command”菜單中的“Write All”命令,將bootloader下載到Arduino中。下載過(guò)程中Arduino上的發(fā)光二極管L會(huì)不斷閃爍。下載完成之后,我們可以通過(guò)Arduino集成開發(fā)環(huán)境下載一個(gè)Arduino工程,來(lái)驗(yàn)證新下載的bootloader是否能夠正常工作。DIY Arduino: Hello World終于要開始寫第一個(gè)Arduino程序了,就跟之前學(xué)習(xí)所有語(yǔ)言一樣,第一個(gè)程序自然是Hello World了。不過(guò)這次有點(diǎn)特殊,要讓Arduino顯示一個(gè)“Hell
59、o World”字符串恐怕有點(diǎn)難度,這是因?yàn)锳rduino模塊上沒有提供任何可供顯示字符的設(shè)備。而這對(duì)Arduino新手來(lái)講,也就意味著程序的調(diào)試將是一個(gè)令人頭疼的問(wèn)題。最簡(jiǎn)單的辦法是在Arduino提供的數(shù)字端口(Digital I/O)上連接發(fā)光二極管,然后通過(guò)控制發(fā)光二極管的亮滅來(lái)表明程序的當(dāng)前運(yùn)行狀態(tài),這的的確確可以算得上是最原始的調(diào)試方法。我的第一個(gè)Arduino程序正是要通過(guò)對(duì)數(shù)字I/O的13號(hào)管腳的控制,來(lái)實(shí)現(xiàn)與其相連的發(fā)光二極的亮滅。之所以要選擇13號(hào)管腳步,是因?yàn)閺脑韴D上可以看出該管腳與ATmega的引腳之間連接了一個(gè)1K的電阻,能夠起到限流的作用,以保
60、護(hù)二極管不被燒壞。發(fā)光二極管是有正負(fù)極性的,因此必須連接正確才能夠讓其正常發(fā)光。剛買來(lái)的發(fā)光二極腿比較長(zhǎng)的一端是正極,需要接在Arduino數(shù)字I/O的13號(hào)管腳上;腿比較短的一端是負(fù)極,需要接在GND管腳上。運(yùn)行Arduino的集成開發(fā)環(huán)境,選擇File->New菜單創(chuàng)建一個(gè)新的Arduino工程接著在Arduino集成開發(fā)環(huán)境的主窗口中輸入相應(yīng)的代碼:int ledPin = 13; void setup() pinMode(ledPin, OUTPUT); void loop()&
61、#160; digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000);不難看出,一個(gè)最簡(jiǎn)單的Arduino程序至少要實(shí)現(xiàn)兩個(gè)函數(shù):setup()和loop()。其中setup()這個(gè)函數(shù)主要用來(lái)完成相應(yīng)的初始化工作,在上面的例子中是將數(shù)字I/O的13號(hào)管腳設(shè)置為數(shù)字輸出。loop()這個(gè)函數(shù)則是Arduino程序的主函數(shù),相當(dāng)于C語(yǔ)言中的main()函數(shù),一個(gè)Arduino程序要完成的主要功能都在該
62、函數(shù)中實(shí)現(xiàn),在上面的例子中是通過(guò)變換13號(hào)管腳的高低電平,并設(shè)置一秒的延時(shí),從而使發(fā)光二極管能夠間歇性地不斷亮滅。從原理上講,用Arduino語(yǔ)言編寫的程序最后會(huì)被翻譯成相應(yīng)的C代碼,再用AVR-GCC編譯后下載到ATmega單片機(jī)中運(yùn)行。因此設(shè)計(jì)Arduino語(yǔ)言的目的就是簡(jiǎn)化單片機(jī)編程,雖然這樣效率上會(huì)有一些損失,但卻能夠極大地促進(jìn)單片機(jī)在更廣泛領(lǐng)域內(nèi)的使用,基本上算是沿襲了PC機(jī)上軟件設(shè)計(jì)語(yǔ)言從匯編語(yǔ)言到C語(yǔ)言再到高級(jí)語(yǔ)言這一過(guò)程,因此很多技術(shù)和做法其實(shí)可以借鑒。用Arduino語(yǔ)言編寫的代碼需要先驗(yàn)證(Verify),以保證語(yǔ)法的正確性,然后再編譯生成相應(yīng)的機(jī)器碼。對(duì)Arduino代碼
63、的驗(yàn)證可以通過(guò)Sketch->Verify/Compile菜單命令完成,也可以通過(guò)工具欄上的按鈕完成:代碼成功通過(guò)驗(yàn)證和編譯之后,就可以將其下載到Arduino模塊中了。由于昨天已經(jīng)將bootloader成功地?zé)龑懙搅薃Tmega中,因此下載Arduino應(yīng)用的任務(wù)就可以完全交由bootloader來(lái)完成了。Arduino的bootloader與集成開發(fā)環(huán)境的交互是通過(guò)串口來(lái)完成的,因此需要用串口線將Arduino與PC機(jī)的串中連接起來(lái)。我的串口線是自制的,按照Arduino的原理圖,只需要接2,3和5三根線,其中前兩根用于數(shù)據(jù)的收發(fā),最后一根是地線。串口線連接好之后,在Arduino集
64、成開發(fā)環(huán)境的Tools->Serial Port菜單下選擇與PC相連的串口:一開始我很奇怪為什么沒有設(shè)置波特率和其它串行通信參數(shù)的地方,后來(lái)在Arduino的網(wǎng)站上才知道這些參數(shù)都保存在一個(gè)名為preferences.txt的配置文件中,該文件一般保存在類似于C:Documents and SettingsAdministratorApplication DataArduino這樣的目錄下。下面是我在該文件中找到的與串口通信相關(guān)的一些參數(shù):serial.stopbits=1serial.databits=8serial.download_rate=
65、19200serial.parity=N不難看出,Arduino模塊采用的是19200 8N1方式來(lái)進(jìn)行串口通信的。確定了這些之后,按下Arduino模塊的復(fù)位按鈕,隨后立即執(zhí)行File->Upload to I/O Board菜單命令將編譯好的程序下載到Arduino模塊中。Arduino的bootloader被設(shè)計(jì)成如果在給定的時(shí)間(通常有7到8秒)內(nèi)沒有接收到任何來(lái)自集成開發(fā)環(huán)境的命令,就自動(dòng)運(yùn)行之前已經(jīng)下載的程序,所以我們必須保證在正確的時(shí)間段內(nèi)給Arduino模塊發(fā)送程序下載的指令。除了通過(guò)菜單命令外,下載程序也可以通過(guò)快捷鍵Ctrl+U
66、,或者直接點(diǎn)擊工具欄上的相應(yīng)按鈕來(lái)完成:將Arduino程序上傳到Arduino模塊中需要花一些時(shí)間,并且取決于工程的大小。當(dāng)程序上傳成功之后,可以在Arduino集成開發(fā)環(huán)境的console窗口中看到上傳后的程序大小,以及該Arduino模塊能夠接受的最大程序的大?。含F(xiàn)在再次復(fù)位Arduino模塊,會(huì)看到發(fā)光二極管立即閃了一下,表明bootloader正常工作了。接著再過(guò)一段時(shí)間,大約7到8秒,會(huì)看到發(fā)光二極管間歇性地不斷亮滅,這就表明第一個(gè)Arduino程序已經(jīng)成功地運(yùn)行起來(lái)了,CONGRATULATIONS!我在這期間遇到的唯一問(wèn)題是剛開始的時(shí)候無(wú)法通過(guò)串口線下載程序,最初懷疑是串口通信
67、的問(wèn)題,后來(lái)慢慢排查發(fā)現(xiàn)Arduino模塊能夠從串口收數(shù)據(jù),但卻無(wú)法從串口發(fā)數(shù)據(jù)。仔細(xì)檢查了硬件發(fā)現(xiàn)原來(lái)我在Arduino模塊上接的是串口的公頭,自然收發(fā)的兩條線沒有同PC機(jī)完全正常地連接上,后來(lái)?yè)Q成一個(gè)母頭就一切正常了。這一過(guò)程中的另一收區(qū)是仔細(xì)讀了Arduino關(guān)于串口部分的原理圖,原來(lái)這部分還是一個(gè)實(shí)用的TTL轉(zhuǎn)232的電平轉(zhuǎn)換電路,其中只用到了電阻、二極管和三極管,省去了一個(gè)MAX232芯片。至此,DIY Arduino模塊的工作算是暫告一段落,剩下的是如何對(duì)各個(gè)硬件功能進(jìn)行詳細(xì)的驗(yàn)證,這可以結(jié)合實(shí)際的項(xiàng)目來(lái)完成。我計(jì)劃下一步做一些簡(jiǎn)單的Arduino工程,大部分可能都來(lái)源于
68、Arduino網(wǎng)站或者是網(wǎng)上收集到的資料,以驗(yàn)證我的Arduino模塊,同時(shí)也可以當(dāng)作入門的教程供大家參考。DIY Arduino: PCB和焊接讀了一些有關(guān)Arduino的介紹性的文章之后,才知道這么一個(gè)小東東居然在國(guó)外是大紅大紫,雖然沒有完全想清楚其中的原因,但似乎并不妨礙自己DIY它的決心。Arduino采用開放源代碼的模式,其原理圖和電路圖都可以從其網(wǎng)站免費(fèi)得到。在權(quán)衡比較了一番之后,我決定從其采用串口方式的版本開始,這一方面是因?yàn)樵硐鄬?duì)簡(jiǎn)單,能夠降低組裝和調(diào)試的難度,另一方面則考慮到USB模擬的串口并不總是那么穩(wěn)定。決定開工之后,花了一上午的時(shí)間畫好了原理圖,基
69、本湊和吧??奢喌诫娐穲D時(shí)可就不一樣了,封裝和走線對(duì)我這業(yè)務(wù)選手來(lái)講的確不是件容易的事情。花了兩個(gè)晚上的時(shí)間,最后還是決定放棄,因?yàn)锳rduino官方提供的電路圖在我看來(lái)確實(shí)比自己布的要漂亮多了,看來(lái)這一修養(yǎng)只能在隨后的日子里慢慢積累了。去做電路板時(shí)遇到一些問(wèn)題,由于我問(wèn)到的制造電路板的廠商基本上只認(rèn)Protel,根本不知道還有Eagle CAD一說(shuō),甚至有人還將其與AutoCAD混為一談,告訴我這個(gè)軟件不是用來(lái)畫電路圖的。沒有辦法,只好回家一頓Google,將其生成Gerber文件后再將送過(guò)去。這一過(guò)程也算有點(diǎn)收獲,除了知道何為Gerber文件以及如何在Eagle CAD中
70、生成Gerber文件之外,還找到了一個(gè)用來(lái)查看Gerber文件的好工具:CAM350。電路板從送去到拿到一般需要一周多的時(shí)間,這期間的主要任務(wù)當(dāng)然是購(gòu)買元器件了。一開始并沒有注意到Arduino串口版本的元件列表,以為與NG版本一樣也采用的是ATmega168,問(wèn)了好些地方都沒得賣,最好只好高價(jià)比香港快遞過(guò)來(lái),估計(jì)貴了不止一倍。最后在組裝的時(shí)候才發(fā)現(xiàn)原來(lái)串口版本采用的仍舊是ATmega8,而這在村里還算是很好買到的,這一個(gè)郁悶??!元件都準(zhǔn)備妥當(dāng)之后,電路板也做出來(lái)了,雖然不是與Arduino官方一致的藍(lán)色,但還是挺漂亮的;-)將元件焊接到PCB板上又是一次對(duì)基本功的訓(xùn)練,好在這一版本的Ardu
71、ino采用的都是分立元件,焊接上沒有遇到太大的麻煩。期間再一次深刻體會(huì)到了工具的重要性,不時(shí)幻想自己手中那把最便宜的鉻鐵啥里也能更新?lián)Q代一下,雖然他的壽命還不到短短的一個(gè)月。焊接完成之后,萬(wàn)里長(zhǎng)征估計(jì)還只完成了第一步,要讓Arduino能夠正常的運(yùn)行起來(lái),肯定還有相當(dāng)多的調(diào)試和排錯(cuò)的工作要做,而這也正是DIY的樂趣所在;-)Arduino 電子積木 專用傳感器擴(kuò)展板 V4真沒想到,一塊傳感器擴(kuò)展板居然被我改到了第四版,而且估計(jì)還會(huì)繼續(xù)修改下去。最初的傳感器擴(kuò)展板在設(shè)計(jì)的時(shí)候,只考慮到了如何將數(shù)字傳感器和模擬傳感器很方便地連接起來(lái)。因此在最初定義數(shù)字傳感器線序的時(shí)候,沒有更多可以參照的地方,直到后來(lái)有人提出是否可以考慮與伺服電機(jī)(舵機(jī))的連線順序一樣,我才很認(rèn)真地考慮這一問(wèn)題,并且在最新的V4版本上采用,原因在于:· 可以很方便地與舵機(jī)相連 · 不容易出現(xiàn)短路的情況,在接錯(cuò)錢時(shí)不會(huì)有很嚴(yán)重的后果 · 可以與模擬傳感器接口統(tǒng)一起來(lái),保持通用 用這么多的好處,自然是忍不住在V
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年拉薩考從業(yè)資格證貨運(yùn)試題
- 2025年黃山貨運(yùn)從業(yè)資格證考試題庫(kù)
- 2025年舟山運(yùn)輸從業(yè)資格證考試技巧
- 企業(yè)安全生產(chǎn)中的安全教育政策與操作
- 辦公團(tuán)隊(duì)建設(shè)團(tuán)隊(duì)拓展活動(dòng)主題晚宴策劃
- 創(chuàng)業(yè)團(tuán)隊(duì)中沖突解決與協(xié)調(diào)策略
- 健康醫(yī)療中心的音樂放松環(huán)境設(shè)計(jì)與實(shí)踐研究
- 2016-2021年老年代步車市場(chǎng)前景預(yù)測(cè)及投資規(guī)劃分析報(bào)告(目錄)
- 農(nóng)民應(yīng)對(duì)生活壓力的心理策略
- 公共管理-答案
- 醫(yī)院籌建新科室方案
- 《智能電視技術(shù)》 課件全套 丁幫俊 第1-8章 智能電視系統(tǒng)、數(shù)字電視基礎(chǔ)知識(shí)- 電源電路
- 中原石化乙烯壓力儲(chǔ)罐的設(shè)計(jì)
- 2024年《書籍裝幀設(shè)計(jì)》教案
- 基于杜邦分析的三元股份有限公司盈利能力分析
- 游戲客服處理技巧培訓(xùn)課件
- 生態(tài)文明教育視域下的語(yǔ)文教材選文研究以義務(wù)教育統(tǒng)編語(yǔ)文教材為例
- 創(chuàng)業(yè)計(jì)劃書大學(xué)生攝影工作室
- 新能源240MW風(fēng)電項(xiàng)目投資計(jì)劃書
- 按揭斷供后銀行起訴狀
- 《風(fēng)光攝影教程》課件
評(píng)論
0/150
提交評(píng)論