Arduino基礎:透過數位輸出控制LED照明

本文為英譯版,原文發表於deviceplus.jp

雖然Devices Plus已經介紹過Arduino的多種應用程式和示例,但是瞭解相關基礎知識對於任何項目的構建仍然是非常重要的!

這次,我們將介紹Arduino電子產品的基礎知識。以編寫Arduino入門書籍而聞名的福田和宏先生將作為本文的指導。

本文將介紹可以透過Arduino進行開啟和關閉的數位輸出的有關內容,並且說明如何創建使用LED的數位輸出程式。

另外,為了使用電子部件,需要瞭解電氣的有關術語,例如“電壓”和“電流”。如果不理解這些術語的含義,您在購買電子元件的時候將無法確認其是否適用於您的用途。

[目錄]

  • Arduino上的介面
  • “數位輸出”的兩種輸出狀態
  • 透過程式點亮LED
  • 程式結構
  • 需要瞭解的電氣術語
  • 透過電阻控制電流
  • 將LED與電阻連接並點亮LED

Arduino上的介面

Arduino具有類似插孔的串聯分佈的端子,作為連接和控制電子元件的介面。這些介面可以實現多種控制功能,例如在這裡連接一個LED或電機來對電子元件的運行進行控制,連接開關或類似的控制項以進行打開/關閉的操作,或連接溫度感測器來測量室溫。

Arduino UNO的頂部有14個(0至13)“數位輸入/輸出”端子,右下方有6個(A0至A5)“模擬輸入/輸出”端子。

數位輸入/輸出端子的輸出具有兩種狀態:“高電平狀態”和“低電平狀態”,以實現對電子元件的操作,並且可以檢查電壓狀態。

而類比輸入是一個可以輸入連續變化電壓的端子。給每個端子分配一個數字編號,在透過程式控制電子元件時會指定其數位編號。

digital input/output terminal

“數位輸出”的兩種輸出狀態

數位輸出是一種可以更改程式中每個引腳狀態的介面。您可以在兩種狀態之間進行切換:“高電平”或“低電平”。例如,如果連接LED且電壓是高電平,那麼LED將會被點亮。相反,如果是低電平,則LED會熄滅。

digital output

在Arduino中,當電壓是高電平時,端子電壓為“5V”,是低電平時,端子電壓切換為“0V”。高電壓狀態被稱為“高電平”,低電壓狀態被稱為“低電平”。在程式中使用“HIGH”和“LOW”來分別指定高電平和低電平。數位輸入和類比輸入將在本系列的後面部分內容中進行介紹。

透過程式點亮LED

我們透過用程式控制數位輸出來打開LED。本節將介紹如何打開連接到第13個數位輸入/輸出端子的LED。按照以下步驟創建程式。創建程式後,像之前介紹的那樣將其寫入Arduino,然後檢查LED是否被點亮。

view rawcode01.ino hosted with ❤ by GitHub

當對數位輸出進行控制時,第4行和第8行的內容非常重要。數位輸入/輸出有兩種方式:可以改變端子狀態的“數位輸出”以及可以讀取端子狀態的“數位輸入”。因此,必須預先指定要使用的設置。該設置的內容就是第4行的“pinMode ()”。
pinMode( LED_PIN, OUTPUT );
在pinMode ()的括弧中輸入目標引腳編號以及模式。本項目中使用了第13個端子,所以目標端子編號為“13”,如果使用的是數位輸出模式,則輸入“OUTPUT”。但是,由於本項目中將端子編號設置為“LED_PIN”,所以將目標端子編號指定為“LED_PIN”(稍後解釋)。

透過第8行上的“digitalWrite ()”更改輸出。
digitalWrite( LED_PIN, HIGH );
指定所要更改輸出的端子編號以及端子輸出的狀態。引腳編號指定為和pinMode ()中一樣的“LED_PIN”。如果端子狀態被指定為“HIGH”,將會輸出5V的電壓。如果您連接了一個LED,那麼將會產生電流,LED會亮起。如果要關閉LED,請將狀態指定為“LOW”,使端子電壓變為0。

程式結構

本節將會介紹程式中數位輸出以外的內容。以下所示的第一行代碼將電子元件所連接的端子編號進行了命名。
const int LED_PIN = 13
將電子元件連接到Arduino的介面被進行了編號。例如,將“13”分配給了上次連接了外部LED的端子。在實際控制LED時,必須在程式中指定所連接的介面編號。但是,如果您直接在程式中輸入數位,將很難分清數位的含義,並且如果您之後對程式進行了修改,就要花費更多的時間來研究這些數字。另外,如果更改了連接的物件,就需要在程式中所有指定介面編號的位置進行更改,這非常耗時,並且有可能造成其他部分被意外更改,從而導致故障的發生。

因此,最好為電子部件所連接的介面編號指定為一個描述性的名稱。本文中,我們指定了“LED_PIN”(變數名)的名稱,並且在變數中存儲了“13”。之後,如果想要對LED進行控制,輸入“LED_PIN”即可。需要注意的是,變數名前面的“int”表示變數為整型,“const”可以防止程式中的變數內容被更改。

如下所示的第3行到第5行為setup ()函數,該函數僅被執行一次。
void setup() {

}
Arduino開啟後,將根據其中的程式執行該函數。本專案中的setup ()函數中的程式僅被執行一次。因此,setup ()被用於初始設置。該程式用於設置數位輸入/輸出端子的模式。

如下所示的第7行到第9行為loop ()函數,該函數將被重複執行。
void loop(){

}
setup ()函數中的程式被執行後,將開始執行loop ()函數。當程式運行到loop ()函數的結尾時,將會返回到loop ()的開頭再次運行。程式的主體內容(如LED照明和電機控制)將會在這裡進行描述。在該程式中,可以對數位輸出進行切換從而點亮LED。

需要瞭解的電氣術語

現在我們來瞭解一些電氣術語的基本含義。當您挑選電子元件或者使用電子元件時,對電氣術語有一定瞭解會幫助您進行的更加順利。第一個要知道的電氣術語是“電流”。

金屬中存在一種被稱為“正電荷”的正靜電。靜電這一概念很難理解,我們可以把正電荷視作帶有正電荷的粒子,如圖所示。
這些正電荷由電池或其他電源產生,穿過導體,然後流入電子元件(如LED)。“電流”表示在金屬中流動的正電荷量。如果有大量正電荷流過,則LED等電子部件就能夠獲取大量的電能(能量),光照強度更大。相反,如果電流較小,那麼供給的正電荷就較少,在使用LED時,光照強度將會更弱。

電流的單位是“A”(安培)。

除此之外,帶負電的電荷被稱為“負電荷”,但是,在電子電路中,我們通常將正電荷在電路中的移動方向作為電流方向。

electronic circuit

需要瞭解的另一個電氣術語是“電壓”。金屬中的正電荷是電力的來源。正電荷可以在電場力的作用下進行移動。這種可以移動正電荷的力被稱為“電壓”。如果電壓很大,就可以驅動更多的正電荷移動,從而產生更大的電流。而如果電壓較小,那麼移動的正電荷數量也會較少,因此產生的電流較小。

電壓的單位是“V(伏特)”。

電池可以提供1.5V的電壓,Arduino的電源端子可以提供5V的電壓,家用電源可以提供120V的電壓。

electrical currents

透過電阻控制電流

許多電子元件都具有可承受的最大電流值,如果透過的電流超過了這個值,電子元件會發生損壞。例如,如果流經LED的電流超過了LED可以承受的極限值,那麼LED可能會冒出煙霧或者發熱至破裂。損壞的LED將會無法使用。觸摸熱的LED還有燒傷的危險。

因此,對流經電子元件的電流進行調整很重要。電阻器的作用是限流。電阻器是可以阻止電流流動,並且阻礙正電荷流入其內部的電子元件。因為電阻器抑制了電流,所以流經電子元件的電流量減少了,電子元件就可以安全地進行工作。

resistance value

電阻器對正電荷流動的抑制程度用“電阻值”來表示。電阻值越小,流動的正電荷量就越多,電流越大。反之,如果電阻值較大,那麼電流就會更小。電阻值的單位為“Ω(歐姆)”。電阻值、電壓和電流之間的關係可以用“歐姆定律”的公式來表示。當電壓施加到具有固定電阻值的電阻器兩端時,將電壓除以電阻值就可以得到流經的電流值。

resistance value

例如,如果將1kΩ電阻連接到Arduino的5V端子上,可以用以下公式計算電流量。1kΩ 是1000Ω。
5V ÷ 1000Ω = 0.005A = 5mA

如果流經電子元件的電流值恒定,您就可以計算出所連接電阻器的電阻值。在這種情況下,用施加的電壓值除以流經的電流值就可以得到電阻值。例如,要在施加5V電壓的同時施加10mA的電流,使用以下公式得到所連接電阻器的電阻值。10mA是0.01A。

5V ÷ 0.01A = 500Ω

您可以在此處獲取有關歐姆定律的更多資訊:Learn About Ohm’s law, GPIO, and transistors by simple LED circuit on Raspberry Pi(透過Raspberry Pi上的簡單LED電路瞭解歐姆定律、GPIO和電晶體)。

電阻器的側面印有4個或5個色帶。您可以透過色帶知道其電阻值。色帶的含義如下表所示。第一個和第二個數位組合起來是一個兩位元數的數位,第三個數位是倍數,第四個表示的是電阻誤差。

resistor has color bands

例如,印有“Brown Black Red Gold(棕色 黑色 紅色 金色)”的電阻器的電阻值是1 kΩ。

將LED與電阻連接並點亮LED

使用LED時,必須連接適當的電阻器來點亮LED。可以透過簡單的計算知道需要連接多少阻值的電阻器。當LED和電阻器串聯連接並且兩端連接了電源時,電阻值可以用以下公式計算得到。

power supply is connected

電源電壓即為所連接電池的電源電壓。連接到Arduino的數位輸出時,將高電平狀態下輸出的5V作為電源電壓。對於流經LED的電流和電壓,使用電子元件銷售點和資料手冊上所提供的“正向電壓(VF)”值和“正向電流(IF)”值。如果將流經LED的電流設置為正向電流值,那麼其兩端的電壓即為正向電壓。例如,如果使用了紅色LED“SLR-56VC3F”,正向電壓是2V(光電特性中的正向電壓Vf項),正向電流是10mA(光電特性中的If項)。將該值作為“LED電壓”和“LED電流”進行計算。如果電源電壓是5V,LED電壓是2V,電流是10mA,那麼如下所示,得到的電阻值為“300Ω”。

(5V – 2V) ÷ 0.01A = 300Ω

另外,如果您想要將LED燈調暗,可以減小電流值。鑒於LED電壓幾乎不會發生改變,所以仍然使用正向電壓值。例如,當流經電流為1 mA時,計算結果如下:

(5V – 2V) ÷ 0.001A = 3000Ω = 3kΩ

我們將具有計算得到的電阻值的電阻器與LED連接。如果無法獲取與計算得到的電阻值完全一致的電阻器,可以使用阻值相近的電阻器。

在本文中,我們講解了數位輸出方式、電壓以及電流。下次,我們將會改變LED的亮度。