You are currently viewing Arduino範例講解(二)

Arduino範例講解(二)

驅動更多LED

好吧,讓我們面對現實吧:一個小LED閃爍的範例並不是那麼令人印象深刻…因此,在這一篇範例講解中,我們將向你展示如何驅動更多的LED。

計算的LED的電阻值

在開始之前,我們必須計算與LED串聯使用的電阻。如果將LED直接連接到Arduino,它將消耗太多電流,從而導致LED燒壞甚至Arduino也捐壞。

我們需要的公式是歐姆定律:R = V ⁄ I

但是這裡的問題是我們還不知道電阻的電壓和電流……所以,讓我們想辦法把它找出來!

我們將電阻與LED串聯連接,我們知道Arduino輸出引腳的電壓為5v,因此,如果將LED的電壓與電阻的電壓相加,則該總電壓應等於5v。因此:VR + VL = 5V,和VR = 5V – VL
由於它們是串聯的,因此這也意味著所有通過LED的電子也將通過電阻。由於電流定義為每單位時間的電子數量,因此我們知道流經電阻的電流等於流經LED的電流。因此:IR = IL

所以,我們可以使用歐姆定律找到電阻的電阻值:R = V R / I R =(5v-VL)/ I L

請注意,如果電流以毫安(mA)表示,則必須將其除以1000,以獲得電流的SI(國際)單位Amps(安培)。否則,您將無法獲得以歐姆為單位的答案(而是以千歐姆為單位)。這適用於每個物理公式:如果以各自的SI單位輸入值,則始終會以SI單位得到答案。

如果您使用的是3.3v Arduino,則可以將5v替換為3.3v。這只是電源電壓,可以是任何一個電壓。

L和I L的值可以在LED的數據表中找到,或者可以使用下表。
IL應當小於20mA,否則,您將殺死LED。

VL是LED的正向壓降。(發出較低能量的光,具有較長波長的LED(如紅色和紅外光)的壓降要比具有較高能量的光子的光(如藍色或紫外線)低得多。)

顏色正向電壓(V L
1.7v-2.2v
橙子2.0v
黃色2.1v
綠色2.2v
藍色3.2v-3.8v
白色3.2v-3.8v

不過,表中的數字只是一個近似值,並不是每個LED都適用。

您可能沒有一個剛計算出的精確值的電阻,因此請四捨五入E-12系列的值。該系列的值分別為1.0、1.2、1.5、1.8、2.2、27、3.3、3.9、4.7、5.6、6.8、8.2,並乘以10的倍數,例如10、100、1,000、10,000等。
例如,我的結果是65Ω,所以我選擇了68Ω的電阻。
最好選擇一個更大的電阻,這樣就不會燒掉LED。

將LED連接到Arduino

就像我前面解釋的那樣,LED本質上是一個二極管,因此它只允許電流通過一個方向。如果我們以相反的方式連接LED,則什麼事都不會發生。

LED有一個陰極和一個陽極:在示意圖中,箭頭的方向是常規的電流流動方向,因此它指向負極:陰極。
當您仔細觀察LED時,您會看到一側是平的,而另一側是圓形的。而且,一邊引腳比另邊引腳短:平的一面,較短的引腳是陰極,我們將這一邊連接到Arduino的負極或接地。

只要電阻與LED串聯,放置電阻的位置都沒有關係,因此可以將其連接到陰極或陽極。

如果我們知道只有一個LED同時點亮,那麼我們可以為所有LED使用一個電阻。

看一下上圖,然後將電阻器接地和麵包板的水平導軌之一,將LED的短腳插入同一根電源線,將長腳插入Arduino的引腳12 。

注意,您必須計算LED的特定電阻。您可以使用上面的公式,也可以使用線上工具或應用程序(我使用此工具此APP)。如果點擊字段旁邊的問號,該工具將為您提供一些額外的信息,並且該APP具有用於選擇顏色的下拉選單。

如果你有疑問,或像我一樣,懶得查詢它並找到合適的電阻,則可以使用220Ω至330Ω之間的任何電阻。僅當與5v Arduino一起使用時才適用!270Ω和330Ω與3v3 Arduino一起使用時有點高,在這種情況下,請使用100Ω和220Ω之間的電阻。如果要使用更高電壓的LED,則需要對其進行計算。

將LED和電阻連接到Arduino後,可以將Blink範例中的引腳13替換為12。您可以使用快捷鍵CTRL + F:在”查詢”數字中,輸入13,然後在替換中的數字,輸入12,然後點擊”全部替換”。現在將編輯程式碼上傳到Arduino:您所連接的LED現在應該閃爍。

現在你有了基本知識,我們可以做些更壯觀的事情…

更多LED

將5個額外的LED用較長的腳連接到引腳2、4、6、8和10,並將其較短的腳與麵包板上的12引腳和電阻上的LED連接到相同的導軌上。

如果您還記得Blink範例,那麼預測該程序的功能應該不會太困難。將其上傳到Arduino,並檢查您的假設是否正確!這裏附上範例程式碼。

程式碼優化

如果仔細研究,您會發現某些代碼段落是重覆指令,只是引腳號不同而已…嗯,有一種解決方法:我們將其稱為for迴圈。

你可以將程式碼改為上圖裏的代碼,當您將其上傳到Arduino時,您會看到它的功能與blink6-a完全相同,但是它的代碼行卻少得多。

這全都歸功於所使用的兩個for迴圈。
在我解釋for迴圈之前,我首先必須解釋變數如何工作:

在第一行,有一個表達式’int delayTime = 200;’。這就是變數“ delayTime”的宣告。變數只是一塊記憶體,您可以在其中存上任何您喜歡的東西。變數是一個data type(資料型別),一個名稱(name)和一個值(value):在這範例情況下,data type是’int’:整數。整數,可以為正或負。名稱為” delayTime”,這只是您為變數指定的任意名稱,它可以包含字母和數字,以及一些符號(如under line)。如果名稱包含多個單詞,則建議每個新單詞都使用大寫字母,因為您不能使用空格。為變數選擇適合的名稱將對代碼的可讀性產生巨大的影響。使用”int delayTime;”,這只是宣告而已,還沒有值。為變數分配初始值稱為“ 初始化”。在這種情況下,我們將變數delayTime初始化為200。現在,每當我們在程式碼中使用”delayTime”時,它將被數字200代替。如果你在不先初始化變數的情況下讀取了變數,則它只會為回傳給你0的值,若我們沒有將變數初始化,這時程式碼可能會回傳一個隨機值,這樣可能會導致程序出現錯誤。

您還必須知道變數具有所謂的作用區域。在此範例中,delayTime在一開始的地方宣告,因此它是全域變數。這意味著你將能夠在整個程序的每個函數,每個迴圈中調用它。變數也可以是local,這意味著你只能在定義它的範圍內使用它。例如,如果我們將第一行移至setup函式內,我們將得到錯誤

未在此範圍內聲明“ delayTime”

所以當我們嘗試在loop(delay(delayTime);)中訪問它時,會出現這樣的錯誤,因為這是與setup函式不同的作用區域。
但是,假設你沒有足夠的可用空間來儲存局部變數時,它會派上用場,因為當你離開它們的作用區域時,local變數會被“刪除”。

但是為什麼要使用這樣的變數方式?好吧,因為不要一一的更改所有delay(200);我們只需更改第一行。在這個範例中因為只有兩個delay(200);需更改,可能看不太出來這樣寫程式碼的差別,若是你的程式碼有非常多行,這樣的方式就變得很重要。

Arduino參考:Variable

Arduino參考:int

Arduino參考:Scope

關於變數的另一個有用的事情是,您可以在程式碼執行時更改它們。這正是在for循環中發生的情況。中括號之間的第一部分只是某個變數’i’的聲明,我們將其初始化為2。下一部分是’i <= 12’,這意味著i只要小於或等於12,就會在for迴圈中重複執行。第三部分也是最後一部分’i = i + 2’意味著每次重複執行時,i的值都會加2。

整行程式碼的意思是首先執行括號內(i的值為2),並將引腳2設置為輸出。然後再次把i加2加到i→i現在等於4,並且程式碼以i的新值再次執行:將引腳4設置為輸出。再次添加2,現在i等於6,再次執行程式碼,再加2 …,依此類推。直到i等於12為止。當i = 12時執行迴圈時,一切正常,最後當程式碼的i再加2時,因不滿足條件’i≤12’(i現在是14)。程序退出for迴圈。
這樣同樣只有兩行程式碼的for迴圈方式,一樣圖以將LED的引腳都設置為輸出,不用寫到六行程式碼。

Arduino參考:for迴圈

總結:

找到適合你的LED的電阻

  1. 在LED的數據表或上表中查找正向電壓。這是V L
  2. 在LED的數據表中查找正向電流,或使用2至20mA之間的電流,並將此數字轉換為安培。這裏是IL
  3. 為大多數微控制器(如Arduino)找到電源電壓5v或3.3v。這是V s
  4. 接著,使用以下公式查詢電阻值:R =(V s -V L)/ I L
  5. 將這個值四捨五入到最接近的電阻。你甚至可以使用比計算出的電阻高的值,若是使用較低的電阻,則會大大縮短LED的使用壽命。另外若電阻值太高,LED的亮度會非常暗。
  • LED的引腳較長,是陽極,是正極。
  • LED的引腳較短,是陰極,是負極。
  • int delayTime; 這是data type(資料型別)為int的變數的宣告,稱為”delayTime”
  • int delayTime = 200; 這是一個data type為int的變數的宣告,稱為”delayTime”,其初始化值為200。
  • 全局變數可以在程序中的任何地方調用,local變數只能在宣告它們的範圍內調用。
  • for(int i = 0; i <10; i = i + 1){}是一個for迴圈,它將變量i初始化為0,每次重複將i加1,直到i < 10次​​(10次)。

附加:計算電阻的功耗

如果您使用5v電源,例如Arduino上的電源,那麼一個普通的1/4瓦電阻就足夠了,但是當您使用更高的電源電壓或一個消耗更多電流的LED時,電阻中的功率耗散也會太大高,它會耗盡。

因此,我們需要計算電阻的功耗是多少。

計算功率的公式為P = V∙I。因此,我們可以剛好計算電阻兩端的電壓:電源電壓減去LED兩端的電壓:V R = V S – V L
通過電阻的電流是一樣的過LED的電流:I R = I L

因此:P R =(V s -V L)∙I L

在上圖所示的範例中,電阻中的功耗非常低,因此一個1/4瓦特的電阻就足夠了,但是如果計算出的值更高,則需要一個功能更強大(更厚)的電阻。

但是,這些值只是理論上的假設。

如果您真的想知道電阻器消耗的實際功率,則必須測量電阻上的電流或電壓,或者最好是同時測量兩者。

如果可以同時測量電流和電壓(情況A),則可以使用相同的公式。

但是,如果只能測量這些值之一,則可以使用歐姆定律在公式中用電壓或電流代替功率。(案例B和C)

只有情況A可以提供實際的功耗,而情況B和C則需要電阻的值。電阻上寫的值具有一定的誤差,因此你的功率也會有所偏差。

發佈留言