第98-5課:用Arduino撳掣嗰陣整暗啲燈光
喺呢一課入面,你會整一個可以按指令淡出嘅燈:撳一下按鈕,LED就會由最光開始,然後平滑咁變暗到熄。呢個係Arduino其中一個最有用嘅初學者範式,因為佢結合咗數位輸入(按鈕)同PWM類比輸出(LED光暗),而且會教你點樣控制變化嘅速率同平滑度,而唔係淨係開同閂。
按需要淡出喺真實產品入面周圍都見到。以下係幾個你可以點樣運用喺呢度學到嘅嘢嘅實際方法:
- 柔和熄滅指示燈 — 唔係盞燈啪一聲熄咗,而係撳一下按鈕就慢慢變暗,喺電器同3D打印外殼上面睇落高級好多。
- 睡眠/待機模式 — 撳一下按鈕,一個光亮嘅狀態LED就會淡出到黑,咁夜晚就唔會騷擾你,而電路仍然通電。
- 「淡出到黑」舞台或模型燈光 — 一個按鈕就可以令LED燈帶或者燈板平滑變暗,而唔係突然熄滅。
- 慳電反饋 — 撳一下瞬時按鈕會畀你一個光亮嘅確認閃光,然後淡走,所以LED只會喺短時間內全亮。
- 互動藝術同道具 — 一個由觸摸觸發嘅「呼氣」效果,非常適合cosplay、情景模型或者博物館展品。
核心概念好簡單:按鈕話畀Arduino知「而家開始淡出」,然後Arduino就會將LED光暗由255(全光)一步一步咁降到0(熄)。因為啲步驟好細而且發生得好快,你隻眼會見到平滑嘅淡出,而唔係跳變。
如果你以前從未試過令LED淡出,底層嘅亮度控制喺第98-4課:用Arduino令LED燈淡出:亮度控制入面有講。呢一課直接建基喺嗰個基礎上面,加一個按鈕做觸發。
硬件同組件
呢個係一個成本好低嘅製作 — 呢度所有嘢都係標準入門套件材料:
- Arduino板(Uno、Nano、Mega,或者任何兼容板)
- 一個LED(5 mm或者3 mm,任何顏色)
- 一個按鈕開關(瞬時、4腳輕觸式都幾好)
- 一個俾LED用嘅電阻 — 由200 Ω到1000 Ω都得(經典嘅220 Ω或者330 Ω就最啱)
- 麵包板同杜邦跳線
- 用嚟編程嘅USB線(如果你想佢唔使插線咁行,就要電池或者5 V適配器)
關於LED電阻嘅快速提示:一個LED需要大約2 V跨過佢,同大約10 mA電流。用5 V供電,電阻就要降壓剩低嘅3 V,所以歐姆定律得出大約300 Ω。由300 Ω到1000 Ω都冇問題 — 數值越高,LED就越暗。用電阻唔係可選嘅;冇佢,LED就會扯太多電流然後燒咗。
接線指南
接線係刻意做到最精簡。LED嘅陽極(長腳)經電阻駁去數位腳3,而佢嘅陰極(短腳,外殼有平邊嗰邊)就去地。按鈕就駁喺數位腳2同地之間 — 唔需要外部上拉電阻,因為程式碼會啟用Arduino嘅內部上拉。
留意LED嘅極性:膠殼嘅平邊同短腳係陰極(負極)。如果你掉轉插,LED就唔會著 — 唔會整壞,反轉佢就得。
至於按鈕,如果你用4腳輕觸開關,記住啲腳係內部成對嘅:四隻腳入面有兩隻係永遠連埋一齊。用萬用錶嘅通斷模式搵一對撳落去會響嘅,然後每邊用一隻腳。一邊駁去腳2,另一邊去地。
程式碼解釋
呢個程式好短,而幾乎所有你可能想改嘅嘢都喺頂部嗰幾行。以下係用戶可以配置嘅部分:
const int pushButtonPin = 2;//按鈕開關連接嘅引腳
const int LEDPin = 3;//LED連接嘅引腳
const int fadeAmount = 10; // LED每次漸暗幾多點
const int fadeSpeed = 5;//漸暗時間,以毫秒為單位。數值越細,漸暗越快
pushButtonPin 同 LEDPin 只係話畀 Arduino 知你將啲嘢駁咗去邊個引腳。如果你將按鈕搬去引腳 4,或者將 LED 搬去引腳 9(一個支援 PWM 嘅引腳),只需要改呢兩個數字去配合你嘅接線就得。要注意 LED 引腳必須支援 PWM — 喺 Uno 上面即係引腳 3、5、6、9、10 或 11 — 因為漸暗需要用到 analogWrite()。
fadeAmount 控制每一步嘅亮度變化有幾大。亮度範圍係 0 到 255,所以 fadeAmount 設做 10 即係 LED 大概分 25 步漸暗。數值越大,漸暗越粗糙同越快;數值越細,漸暗越順滑同越慢。
fadeSpeed 係每一步之間嘅延遲,以毫秒為單位。呢個係影響效果感覺最關鍵嘅一個設定。數值設做 5 ms 會有好快、好爽脆嘅漸暗;設做 30 ms 或以上就會有好慢、好奢華嘅漸暗。配合 fadeAmount 一齊用,呢兩個數值可以讓你將漸暗調校到啱你想要嘅性格。
另外仲有一個內部變數值得認識:
int brightness = 255; // LED有幾光
int pushButtonStatus = 0; // 嚟自引腳2嘅按鈕數值
brightness 一開始係 255,即係每次你撳掣嗰陣,LED 都會由最光開始。如果你想漸暗由暗啲嘅位開始 — 例如半光 — 就將呢個改成 128。
邏輯本身係咁運作嘅:loop 會讀取按鈕。如果撳咗(LOW,因為用咗內部上拉電阻),一個 while 迴圈就會喺 brightness 大過零嘅時候一直行。喺嗰個迴圈入面,Arduino 會將目前嘅 brightness 寫入 LED,減去 fadeAmount,等 fadeSpeed 毫秒,然後重複。當按鈕冇撳嗰陣,LED 就只會寫入 0 並保持熄滅。
一個重要細節:內部上拉電阻代表引腳喺按鈕冇撳嗰陣讀到 HIGH,喺撳咗嗰陣讀到 LOW。呢個就係點解程式碼會檢查 LOW 嚟偵測撳掣。如果你第時轉用外部下拉電阻,就要將嗰個比較改成 HIGH。
即時項目同示範
一上載之後,效果即刻見到而且好有滿足感。撳一下按鈕,LED 就會跳到最光,然後喺你控制嘅時間內明顯咁漸暗到冇。放開按鈕,LED 就會熄滅;再撳一次,漸暗就會由最光重新開始。
喺影片入面,漸暗會用幾個設定示範,等你可以聽到同睇到箇中差別。用 fadeAmount = 20 嗰陣,漸暗好快同好粗糙 — 幾步就見到佢到零。降到 fadeAmount = 10 就順滑好多,而再去到 fadeAmount = 3 就會令漸暗明顯耐好多,睇落幾乎係連續嘅。fadeSpeed 嘅數值都有同樣戲劇性嘅影響:設做 1 ms 會令漸暗幾乎即刻完成,而較大嘅數值就會將佢拉長。
試下呢個實驗:設定 fadeAmount = 5 同 fadeSpeed = 30。你會得到一個緩慢、柔和嘅漸暗,睇落好似盞燈瞓覺咁。然後設定 fadeAmount = 50 同 fadeSpeed = 1,就會得到一個硬淨、快速嘅切斷。兩個都冇話「錯」— 完全取決於你想要嘅氣氛。
同一個按鈕嘅切換行為會喺 第 98-3 課:如何用 Arduino 同按鈕開關一個切換式 LED 度另外講解,而更簡單嘅撳住著燈版本就喺 第 98-2 課:如何用 Arduino 同按鈕開關一個 LED。
因為漸暗係由一個瞬時接點觸發,呢個同樣嘅電路好適合用嚟驅動繼電器或者 MOSFET 而唔係 LED — 你可以用嚟漸暗一盞 12 V 燈、摩打嘅軟啟動,或者發熱元件嘅預熱。按鈕只係觸發器;你想漸暗咩就由你話事。
呢條影片嘅相關項目
- 第 98-1 課:如何用 Arduino 開關一個 LED
- 第 98-2 課:如何用 Arduino 同按鈕開關一個 LED
- 第 98-3 課:如何用 Arduino 同按鈕開關一個切換式 LED
- 第 98-4 課:用 Arduino 漸暗 LED 燈:亮度控制
- 第 98-6 課:Arduino 蹺蹺板 LED 遊戲
- 第 98-7 課:用 Arduino 同 5 個 LED 整走馬燈
- 第 98-8 課:用 Arduino 同按鈕同 LED 整走馬燈
- 第 98-9 課:用 Arduino 整 LED 電壓電平錶,或者用電位器整走馬燈
- 第 98-10 課:Arduino 交通燈
章節
- [00:00] 十個 LED 項目概覽
- [01:00] Arduino 逐步教學課程簡介
- [02:29] LED 基礎:符號、極性同電流
- [03:49] 用歐姆定律計算 LED 電阻
- [05:53] 項目一:開關 LED
- [12:43] 項目二:用按鈕控制 LED
- [17:13] 項目三:用按鈕切換 LED
- [20:12] 項目四:LED 漸暗漸亮
- [23:20] 項目五:用按鈕控制 LED 漸暗漸亮
- [27:32] 項目六:蹺蹺板 LED
- [30:47] 項目七:走馬燈
- [36:41] 項目八:用按鈕控制走馬燈
- [42:25] 項目九:LED 電壓電平計
- [49:25] 項目十:Arduino 交通燈
This code has not been parsed yet. Please return to the admin panel to parse it.
你可能需要嘅嘢
-
亞馬遜SunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
亞馬遜
-
亞馬遜
資源與參考資料
-
文件记录Documentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
文件📁
Arduino 函式庫 (zip)
-
SunFounder 3合1智能車學習套件原始碼
3in1-kit-main-v2.zip12.80 MB
用户手册
-
SunFounder 3合1 Arduino 智能車組裝手冊呢份文件逐步展示 SunFounder 3合1 Arduino 智能車嘅組裝過程
SunFounder_car_assembly_manual.pdf1.20 MB