文章程式碼顯示

2017年10月22日 星期日

《入門》寫程式Arduino教學 - 06 : 第一個完整的應用 LED 歐姆定理(律)


前面的章節主要都在補充大家基本的觀念,而這章開始就要實際讓大家拿出 Arduino 並且接上電路來開始用自己撰寫的程式碼執行第一個程式了!

硬體電路連接:
首先我們先拿出 Arduino 、 麵包板 、 電阻 、 LED燈以及電線,並且依照上方的連結方式進行連接。將Arduino 的 13 腳位與電阻相連,接著讓電阻與 LED 燈的 "陽極(長腳)" 相連,接著讓 LED 燈的 "陰極(短腳)" 與 Arduino 的 地(GND)相連。

注意,此處的 LED 是有極性的,也就是說若接反邊可能會讓 LED 燒毀。




《入門》寫程式Arduino教學 - 03 : 基本電學 電路? 電壓? 電位差? 是什麼 我們知道,一個最簡單的手電筒應用可以由電池、電線、燈泡加上電阻所組成,也就如上圖中的右半邊電路圖所示。接著我們在《入門》寫程式Arduino教學 - 04 : 如何產生電壓? 數位? 類比電壓是什麼? 知道 Arduino 可以藉由程式來產生電壓,代替傳統電池的角色。

上面兩張圖是完全相同的電路圖,只是用不同的形式展現,為了大家方便學習,要看得懂正規的電路圖(第二張圖右方)才行。

硬體連結完成後,接著我們只要撰寫程式讓 Arduino 開始動作即可


軟體撰寫:
硬體電路連結完成後,就可以打開 Arduino IDE 開始撰寫程式了。在此有兩個新的"函數"要介紹(加上原本的 setup 以及 loop 函數總共就有四個函數) 分別為 pinMode 及 digitalWrite

並且我們可以用時序圖來輔助理解 setup 及 loop 函數(還記得我說一時看不懂別氣餒吧!我在接續的章節都還是會複習前面的觀念,以幫助大家學習)。由圖中可以看出,粉色部分是 setup 函數的執行時間,也就是說 setup 函數內的程式碼(第二行程式碼) 只有在通電後執行一次;後面的淺藍色部分為 loop 函數的執行時間。可以看出 loop 函數在 setup 函數結束後將不斷循環執行第六行程式碼。


pinMode 是腳位配置所使用的函數,一般都放置在 setup 函數區塊內。其作用在於指定 Arduino 某個腳位的工作模式(於《入門》寫程式Arduino教學 - 04 : 如何產生電壓? 數位? 類比電壓是什麼? 介紹的四種)。

函數的使用依照不同的函數會有不同的規定,且一定要一字不差的跟隨規定才可以順利完成。

我們看到第二行程式碼,首先鍵入函數名稱 pinMode ,緊接著用小括弧來包裹函數所需的輸入參數。(注意所有關鍵字的大小寫都是有分別的,不可混用)

pinMode(pin, INPUT/OUTPUT);

第一個參數(或稱引數) pin 代表要指定哪一個腳位。仔細看我們的硬體接線,我們將 13 腳位連接到電路中,所以在此要輸入 13。

接下來用逗號分開兩邊的參數(也就是說 pinMode 函數要輸入兩個參數)

第二個參數 INPUT/OUTPUT 則是二則一,若要指定為輸入腳位(無論數位輸入或類比輸入)則鍵入 INPUT ;若指定為輸出腳位則鍵入 OUTPUT 。在此我們想要讓 13 腳位設定為數位輸出模式,所以鍵入 OUTPUT 。

最後在小括弧的末端加入分號 ; 這是告訴 Arduino IDE 這行程式碼已經結束了。



在設定完 13 腳位的輸出模式後,接著設定 13 腳位為數位模式的 HIGH ,如此就實現了 13 腳位輸出高電位(+) 5V 的功能。

我們可以先點選介面左上方向右的小箭頭,將程式碼上傳至 Arduino 開發版,若是一字不差;大小寫皆相同是不會有任何編譯錯誤出現的。

程式上傳成功後就可以看到 LED 燈被點亮了!


挑戰題:
大家可以試試多接幾組 LED 燈在硬體電路上,例如 pin12 與 pin11 ,並且在程式碼的部分再加上 pin12 與 pin11 的部分。 就可以實現多燈點亮的功能


除了指定為高電位(+) 外,還可以設定為低電位(-) digitalWrite(13, LOW),如此就可以滅掉 LED 燈。


delay(); 函數只需要輸入一個參數,其作用於延遲程式碼的執行。單位是毫秒。
void setup(){
pinMode(13,OUTPUT);
}

void loop(){
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
}
補充:



基本電學中的歐姆定律,描述了電壓、電流以及電阻三者之間的關係。在先前的電路中我們除了 LED 燈跟電池外還加了電阻,電池部份我們用 Arduino 的 pinMode 加上 digitalWrite 指令完成數位輸出高電位(+) 來實現,而為什麼小時候電池接小燈泡不用加什麼電阻,但在Arduino 卻還要加上電阻呢?

實際上是因為小時候我們用的電池,只有1.5V 了不起串聯兩顆有 3V,但 Arduino 的數位輸出高電位(+)為 5V ,若沒有在電路中加上電阻,就會超出了一顆 LED 的需求。那麼電阻要加入多少才能剛剛好符合需求呢?

這時我們可以用歐姆定律來進行計算,一般來說一顆 LED 的耐流值(能夠承受的電流大小) 大約是 20mA ,也就是0.02A,在工作時的壓降大約是 2V ,如此一來就可以依據電壓以及耐流值計算出電阻大小。

根據歐姆定理: 電壓 = 電流 x 電阻

則 電阻 = 電壓 / 電流

電壓 = 5V(Arduino 的高電位) - 2V(LED工作壓降) = 3V
耐流 = 20mA

電阻 = 3V / 20mA = 150歐姆

保險起見我們可以選用常見的 220 歐姆甚至是 330 歐姆。但電阻的上升會讓電流減小, LED 則會比較暗一些。

↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引