這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。
Originally published by Feb 5, 2020
前言
本文最初發(fā)布在deviceplus.jp網(wǎng)站上,而后被翻譯成英語。
Device Plus網(wǎng)站中介紹了有關(guān)Arduino的各種應(yīng)用和作品示例,但無論創(chuàng)作任何作品,基礎(chǔ)知識都很重要!
在本文中,我們將通過使Arduino能夠調(diào)節(jié)LED亮度,為您帶來“關(guān)鍵”的Arduino基礎(chǔ)知識。
我們曾介紹過,通過將LED連接到Arduino的數(shù)字輸出引腳,并設(shè)置HIGH (5V) 和LOW (0V) ,可以輕松地切換LED的開和關(guān)。但是,由于數(shù)字輸出只能輸出兩種狀態(tài),因此無法進行亮度調(diào)節(jié)等控制。
要想解決這個問題,您可以使用“PWM”輸出。PWM可在HIGH和LOW狀態(tài)之間反復(fù)切換輸出,所以可以用來調(diào)節(jié)LED的亮度。
在本文中,我們將學(xué)習如何使用PWM來調(diào)節(jié)LED的亮度。我們還將學(xué)習如何編寫使用PWM輸出逐漸點亮LED的程序。
數(shù)字不能調(diào)節(jié)亮度
正如我們上次介紹過的,LED的亮度會隨電流的變化而變化。比如,分別通過330Ω的電阻和10kΩ的電阻來調(diào)節(jié)連接到LED的電流量,并對它們的結(jié)果進行比較時,會發(fā)現(xiàn)連接330Ω小電阻時電流量更大,這會使LED更亮?;蛘?,改變連接到LED的電源電壓,也會使流過的電流量發(fā)生變化。
如果分別施加5V和3.3V的電壓,施加5V電壓時LED燈更亮。根據(jù)上一次介紹過的電阻和流過LED的電流之間的關(guān)系式,要想讓LED更亮,要么“降低電阻”,要么“提高電壓”。
然而,Arduino的數(shù)字輸出只有HIGH (5V)或 LOW (0V)兩種狀態(tài),這意味著直接連接并不能改變電壓和電阻值,也就是說,無法調(diào)節(jié)LED的亮度。但是,雖然只有HIGH和LOW兩種輸出狀態(tài),通過一些努力還是可以改變LED亮度的。
使用數(shù)字輸出改變LED亮度
讓我們嘗試一下只用數(shù)字輸出來改變LED的亮度吧。亮度可以通過讓LED閃爍來調(diào)節(jié)。我們按照步驟一步一步來實際操作,看看LED的亮度是如何變化的。將LED連接到Arduino的數(shù)字引腳5,如下圖所示:
接下來,創(chuàng)建如下所示的程序并將其傳送給Arduino。此時,LED應(yīng)該會每隔1秒閃爍1次。
在程序中,通過第11行的“digitalWrite( LED_PIN, HIGH )”輸出HIGH,使LED亮起,然后通過第12行的“delay (ON_TIME)”在指定的時間內(nèi)保持亮燈。持續(xù)時間以毫秒為單位,如果指定1000,則LED將保持點亮1秒鐘。
接下來,通過第14行的“digitalWrite( LED_PIN, LOW )”輸出LOW,使LED熄滅,然后通過第15行的“delay( OFF_TIME )”在指定的時間內(nèi)保持熄滅狀態(tài)。通過反復(fù)執(zhí)行該程序即可實現(xiàn)LED的閃爍。
下面,讓我們嘗試一下縮短點亮和熄滅的持續(xù)時間??梢允褂玫?行的“const int ON_TIME”來更改點亮狀態(tài)的持續(xù)時間,使用第4行的“const int OFF_TIME”來更改熄滅狀態(tài)的持續(xù)時間。將這兩個值都更改為“500”并發(fā)送程序,然后確認LED的狀態(tài)??梢钥吹介W爍速度增加。接著,當將值逐漸減小到“250”、“100”、“75”、“50”等數(shù)字時,閃爍速度變得更快。當值為“10”左右時,LED看起來像在保持點亮狀態(tài)。這是因為如果它閃爍得太快,人眼就跟不上它的速度,從而使燈看起來就像一直亮著。
接下來,我們試著改變點亮和熄滅的持續(xù)時間。將“ON_TIME”和“OFF_TIME”都設(shè)置為“10”。然后,依次將“ON_TIME”的值更改為“9”、“8”、“7”……“1”,并確認LED的點亮狀態(tài)??梢钥吹疆敎p小該值時,LED會逐漸變暗。
這是因為持續(xù)亮燈時間縮短,發(fā)光量減少,從而使LED看起來變暗。也就是說,通過改變“點亮持續(xù)時間”也可以調(diào)節(jié)LED的亮度。使用該方法,可以實現(xiàn)用僅能控制開/關(guān)的Arduino數(shù)字輸出功能來控制LED的亮度。
通過PWM調(diào)節(jié)亮度
如上所述,通過調(diào)整HIGH和LOW的比例,使LED以較短的周期閃爍,即可調(diào)節(jié)LED的亮度。但是,自己創(chuàng)建程序來控制閃爍持續(xù)時間并不現(xiàn)實。因為處理其他程序需要時間,而這會使閃爍間隔出現(xiàn)偏差,從而會使亮度發(fā)生變化。
Arduino可以使用PWM(Pulse Width Modulation,脈沖寬度調(diào)制)功能來周期性地輸出HIGH和LOW。PWM是以指定的速率周期性地在HIGH和LOW之間切換的一種功能,可用于上述的LED亮度調(diào)節(jié)。
但是,需要注意的是,可用于PWM功能的引腳在Arduino中是固定的。只有數(shù)字旁邊帶有“?”標記的引腳(即引腳3、5、6、9、10和11)可使用PWM功能,其他引腳不支持PWM輸出。
另外,由于PWM是通過Arduino的微控制器產(chǎn)生的功能,因此具有輸出穩(wěn)定、不影響程序運行的優(yōu)點。
在這里,我們將LED連接到引腳5來試一下。用與前述電路相同的方式連接LED。
接下來,創(chuàng)建如下所示的程序并將其發(fā)送給Arduino,LED將會亮起,但是較暗。
通過PWM功能輸出時,需要通過第6行的“pinMode()”將對象引腳設(shè)置為輸出模式。實際輸出時,使用第10行的“analogWrite()”。指定對象引腳編號,然后在0到255的范圍內(nèi)設(shè)置保持HIGH的比率。如果設(shè)置為“0”,將始終輸出LOW,如果設(shè)置為“255”,則始終輸出HIGH。如果設(shè)置為“127”,將會以各一半的比率輸出HIGH和LOW。
在這個程序中,可以通過第3行的“const int DUTY”來指定PWM比率。更改該值可以確認亮度的變化情況。
讓LED逐漸閃爍
我們使用PWM輸出拓展了LED點亮的方法?,F(xiàn)在,讓我們逐漸改變PWM來嘗試實現(xiàn)LED逐漸變亮的效果。
編寫如下程序:
在上述程序中,將PWM比率存儲在loop()函數(shù)中使用的“i”變量中,以使其可以逐漸增加該值,從而使LED逐漸變亮。
第14行的while處理以STEP指定的增量增加值,直到i達到 255。增加的值由第15行的analogWrite()輸出,以使LED的亮度改變。此外,每次第16行的PWM輸出改變時,將等待由WAITTIME指定的持續(xù)時間。
當PWM比率達到255時,它會逐漸減小該值直到0,以使LED逐漸變暗(第21到25行)??梢酝ㄟ^更改第3行的WAITTIME或第4行的STEP的值來調(diào)節(jié)閃爍速度。
此次我們學(xué)習了如何控制LED的亮度。下篇再見!
審核編輯:湯梓紅
-
led
+關(guān)注
關(guān)注
242文章
23277瀏覽量
660869 -
PWM
+關(guān)注
關(guān)注
114文章
5186瀏覽量
213937 -
數(shù)字輸出
+關(guān)注
關(guān)注
0文章
24瀏覽量
8925 -
Arduino
+關(guān)注
關(guān)注
188文章
6469瀏覽量
187063
發(fā)布評論請先 登錄
相關(guān)推薦
評論