Arduino基礎: 調節LED的亮度

Originally published by Feb 5, 2020

目錄

  1. 前言
  2. 數字不能調節亮度
  3. 使用數位輸出改變LED亮度
  4. 透過PWM調節亮度
  5. 讓LED逐漸閃爍
  6. 相關文章

前言

本文最初發佈在deviceplus.jp網站上,而後被翻譯成英語。

Device Plus網站中介紹了有關Arduino的各種應用和作品示例,但無論創作任何作品,基礎知識都很重要!
在本文中,我們將透過使Arduino能夠調節LED亮度,為您帶來“關鍵”的Arduino基礎知識。

◆

我們曾介紹過,透過將LED連接到Arduino的數位輸出引腳,並設置HIGH (5V) 和LOW (0V) ,可以輕鬆地切換LED的開和關。但是,由於數位輸出只能輸出兩種狀態,因此無法進行亮度調節等控制。
要想解決這個問題,您可以使用“PWM”輸出。PWM可在HIGH和LOW狀態之間反覆切換輸出,所以可以用來調節LED的亮度。
在本文中,我們將學習如何使用PWM來調節LED的亮度。我們還將學習如何編寫使用PWM輸出逐漸點亮LED的程式。

數字不能調節亮度

正如我們上次介紹過的,LED的亮度會隨電流的變化而變化。比如,分別透過330Ω的電阻和10kΩ的電阻來調節連接到LED的電流量,並對它們的結果進行比較時,會發現連接330Ω小電阻時電流量更大,這會使LED更亮。或者,改變連接到LED的電源電壓,也會使流過的電流量發生變化。

如果分別施加5V和3.3V的電壓,施加5V電壓時LED燈更亮。根據上一次介紹過的電阻和流過LED的電流之間的關係式,要想讓LED更亮,需要“降低電阻”,或“提高電壓”。

logic behind creating larger current

然而,Arduino的數位輸出只有HIGH (5V)或 LOW (0V)兩種狀態,這意味著直接連接並不能改變電壓和電阻值,也就是說,無法調節LED的亮度。但是,雖然只有HIGH和LOW兩種輸出狀態,透過一些努力還是可以改變LED亮度的。

使用數位輸出改變LED亮度

讓我們嘗試一下只用數字輸出來改變LED的亮度吧。亮度可以透過讓LED閃爍來調節。我們按照步驟一步一步來實際操作,看看LED的亮度是如何變化的。將LED連接到Arduino的數位引腳5,如下圖所示:

LED circuit

接下來,創建如下所示的程式並將其傳送給Arduino。此時,LED應該會每隔1秒閃爍1次。

 

在程式中,透過第11行的“digitalWrite( LED_PIN, HIGH )”輸出HIGH,使LED亮起,然後透過第12行的“delay (ON_TIME)”在指定的時間內保持亮燈。持續時間以毫秒為單位,如果指定1000,則LED將保持點亮1秒鐘。

接下來,透過第14行的“digitalWrite( LED_PIN, LOW )”輸出LOW,使LED熄滅,然後透過第15行的“delay( OFF_TIME )”在指定的時間內保持熄滅狀態。透過反復執行該程式即可實現LED的閃爍。

下面,讓我們嘗試一下縮短點亮和熄滅的持續時間。可以使用第3行的“const int ON_TIME”來更改點亮狀態的持續時間,使用第4行的“const int OFF_TIME”來更改熄滅狀態的持續時間。將這兩個值都更改為“500”並反射程式,然後確認LED的狀態。可以看到閃爍速度增加。接著,當將值逐漸減小到“250”、“100”、“75”、“50”等數位時,閃爍速度變得更快。當值為“10”左右時,LED看起來像在保持點亮狀態。這是因為如果它閃爍得太快,人眼就跟不上它的速度,從而使燈看起來就像一直亮著。

接下來,我們試著改變點亮和熄滅的持續時間。將“ON_TIME”和“OFF_TIME”都設置為“10”。然後,依次將“ON_TIME”的值更改為“9”、“8”、“7”……“1”,並確認LED的點亮狀態。可以看到當減小該值時,LED會逐漸變暗。

high duration and brightness

這是因為持續亮燈時間縮短,發光量減少,從而使LED看起來變暗。也就是說,透過改變“點亮持續時間”也可以調節LED的亮度。使用該方法,可以實現用僅能控制開/關的Arduino數位輸出功能來控制LED的亮度。

透過PWM調節亮度

如上所述,透過調整HIGH和LOW的比例,使LED以較短的週期閃爍,即可調節LED的亮度。但是,自己創建程式來控制閃爍持續時間並不現實。因為處理其他程式需要時間,而這會使閃爍間隔出現偏差,從而會使亮度發生變化。

Arduino可以使用PWM(Pulse Width Modulation,脈衝寬度調製)功能來週期性地輸出HIGH和LOW。PWM是以指定的速率週期性地在HIGH和LOW之間切換的一種功能,可用於上述的LED亮度調節。

但是,需要注意的是,可用於PWM功能的引腳在Arduino中是固定的。只有數位旁邊帶有“〜”標記的引腳(即引腳3、5、6、9、10和11)可使用PWM功能,其他引腳不支援PWM輸出。

pins that support PWM output

另外,由於PWM是透過Arduino的微控制器產生的功能,因此具有輸出穩定、不影響程式運行的優點。
在這裡,我們將LED連接到引腳5來試一下。用與前述電路相同的方式連接LED。
接下來,創建如下所示的程式並將其發送給Arduino,LED將會亮起,但是較暗。

 

透過PWM功能輸出時,需要透過第6行的“pinMode()”將物件引腳設置為輸出模式。實際輸出時,使用第10行的“analogWrite()”。指定物件引腳編號,然後在0到255的範圍內設置保持HIGH的比率。如果設置為“0”,將始終輸出LOW,如果設置為“255”,則始終輸出HIGH。如果設置為“127”,將會以各一半的比率輸出HIGH和LOW。

在這個程式中,可以透過第3行的“const int DUTY”來指定PWM比率。更改該值可以確認亮度的變化情況。

讓LED逐漸閃爍

我們使用PWM輸出拓展了LED點亮的方法。現在,讓我們逐漸改變PWM來嘗試實現LED逐漸變亮的效果。

編寫如下程式:

 

在上述程式中,將PWM比率存儲在loop()函數中使用的“i”變數中,以使其可以逐漸增加該值,從而使LED逐漸變亮。

第14行的while處理以STEP指定的增量增加值,直到i達到 255。增加的值由第15行的analogWrite()輸出,以使LED的亮度改變。此外,每次第16行的PWM輸出改變時,將等待由WAITTIME指定的持續時間。

當PWM比率達到255時,它會逐漸減小該值直到0,以使LED逐漸變暗(第21到25行)。可以透過更改第3行的WAITTIME或第4行的STEP的值來調節閃爍速度。

此次我們學習了如何控制LED的亮度。下篇再見!

想瞭解更多關於Arduino的知識嗎?歡迎查看相關的文章:

  1. 如何使用Arduino創建摩爾斯電碼生成器
  2. 如何使用環境光感測器控制燈光
  3. 使用Arduino進行USB音量控制
Deviceplus 編輯團隊
Deviceplus 編輯團隊
Device Plus適合所有電子設計和機電一體化發燒友。

Check us out on Social Media