搜尋程式碼

第98-7課:用Arduino同5粒LED整走馬燈

第98-7課:用Arduino同5粒LED整走馬燈

走馬燈(又叫「追逐」燈或者「霹靂遊俠」燈)係經典嘅 Arduino 初學者項目之一——而且係有原因嘅。佢教你點樣順序控制多個輸出、點樣計時事件,同埋點樣諗限流電阻,同時仲整到啲睇落好滿足嘅嘢。喺呢個項目入面,你會將五粒 LED 駁去 Arduino,然後寫程式令佢哋逐粒著起,營造出一盞燈沿住成排「行」嘅錯覺。

5 leds on breadboard with resistor shown connected to Arduino UNO
5 leds on breadboard with resistor shown connected to Arduino UNO

一旦你明白咗個模式,你就可以喺好多現實世界嘅製作入面重新運用佢:

  • 裝飾燈光:用喺層架、相框或者模型嘅追逐邊框。
  • 方向指示:用喺道具車或者電動單車嘅順序指揮燈效果。
  • 進度或者狀態顯示:一排 LED 隨住過程完成而推進。
  • 遊戲同計分板道具:「移動目標」或者等級指示器。
  • 教學輔助:數位輸出同計時最清晰嘅示範。

同一個五粒 LED 嘅接線會喺呢個課程嘅其他幾個項目入面重用,所以你喺度砌嘅硬件會變成一個可重用嘅平台。

走馬燈點樣運作

原理同著起單粒 LED 完全一樣——只係重複五次(影片 30:47)。每粒 LED 都透過自己嘅限流電阻駁去自己嘅 Arduino 腳位,而所有電阻都共用一條接地軌。然後個 sketch 會將一個腳位設做 HIGH、等一等、設做 LOW、再等一等,然後去下一個腳位。因為任何時候都只有一粒 LED 著住,對眼就會將個序列睇成移動。

兩個計時數值就係賦予呢個效果特色嘅嘢。著燈時間控制每粒 LED 亮幾耐,而熄燈時間控制下一粒 LED 著之前嘅間隔。短著燈時間配長熄燈時間會產生一粒快速移動嘅光點;長著燈時間配短熄燈時間就會產生更順滑、更連續嘅掃動(影片 35:00)。

硬件同組件

  • 1 × Arduino 板(Uno、Nano 或者類似型號)
  • 5 × LED(任何顏色;混合顏色會令效果更易睇)
  • 5 × 電阻——300 Ω 到 1 kΩ 都好好用
  • 1 × 麵包板
  • 跳線
  • USB 線或者電池組供電

如果你想之後加一個按鈕版本,你仲需要一個瞬時按鈕同兩條額外跳線。

揀電阻值

一粒 LED 嘅順向電壓大約係 2 V,而要達到全亮度就需要大約 10 mA(影片 03:49)。喺 5 V 供電下,電阻必須降壓剩低嘅 3 V。應用歐姆定律,R = V / I = 3 V / 0.01 A = 300 Ω。實際上由 300 Ω 到大約 1 kΩ 都行——電阻越高,LED 越暗,但電路就越安全同越有效率(影片 05:33)。

Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button

接線指南

wiring of 5 LED on Arduino
wiring of 5 LED on Arduino

將五粒 LED 插入麵包板,令佢哋嘅陽極(長腳)朝向同一個方向。將每粒陰極(短啲、側邊扁平嘅腳)駁去自己嘅電阻,然後將五個電阻嘅另一端全部駁去一條共用接地軌。之後由每個陽極拉一條跳線去一個 Arduino 腳位。

喺呢個製作入面,LED 會分配到腳位 3、4、5、6 同 7(影片 31:29)。腳位編號喺 sketch 頂部定義,所以如果你想要唔同嘅排列,你只需要改嗰五行。

程式碼解釋

個 sketch 特登整到好簡單,等初學者可以跟到每一行。只有最頂嗰個區塊需要為你自己嘅設定而修改。

const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;
int offTime = 30;  // the time each LED waits in the OFF state
int onTime = 100;  // the time each LED is ON

腳位定義。五個 const int 行將每粒 LED 對應到一個實體 Arduino 腳位。因為佢哋聲明做 const,所以啲數值之後喺程式入面唔可以改——呢個係一個安全習慣,防止意外重新賦值。如果你將 LED 駁去唔同腳位,喺度改啲數字就得,其他乜都唔使改。

onTime 同 offTime。呢兩個整數係項目入面唯一嘅「行為」變數,亦係你會想試吓玩嘅嘢:

  • onTime — 每粒 LED 著幾耐(以毫秒計)。數值越大,每一步感覺越慢、越從容。
  • offTime — 一粒 LED 熄咗之後、下一粒著之前嘅停頓。數值越細,啲光行得越快。

試吓 onTime = 200offTime = 200,就會有均勻、中速嘅走馬燈效果;或者 onTime = 30offTime = 30,就會有非常快、幾乎模糊嘅效果(影片 36:06 位置)。

setup() 函式只會執行一次,單純將五個腳位都設做 OUTPUT 模式。loop() 函式就會為每粒 LED 重複同樣嘅四步模式:將腳位設做 HIGH、等 onTime、設做 LOW、等 offTime。當第五粒 LED 完成之後,迴圈就會由第一粒重新開始,產生無盡嘅走動效果。

即時專案同示範

用預設數值嘅話,啲 LED 會以輕鬆嘅節奏沿住一行逐步亮起。上傳將 onTimeoffTime 設做 200 毫秒嘅程式碼,就會有穩定、均勻嘅行進效果;將兩者都降到 30 毫秒,啲光就會幾乎快到跟唔到咁掠過成行(影片 36:21 位置)。

成功之後可以試吓兩個有用嘅實驗:

  • 將 on time 設到短過 off time,就可以造出一個明顯移動嘅光點。
  • 將 on time 設到長過 off time,就可以造出柔和、重疊嘅光暈。

同樣嘅五粒 LED 接線會喺下一個專案重用,嗰度會用一個按鈕令啲光一步一步咁推進。嗰個製作喺 第 98-8 課:用按鈕同 LED 整 Arduino 走馬燈 有講解。

如果你想用類比輸入而唔係按鈕嚟驅動呢行 LED,可以睇 第 98-9 課:用 Arduino 整 LED 電壓電平錶,或者用電位器整走馬燈

更進一步

基本走馬燈成功之後,一個自然嘅下一步就係令啲光來回彈,而唔係由最後一粒 LED 直接跳返第一粒。呢個純粹係程式碼練習 — 唔需要額外硬件 — 而且係練習迴圈同陣列嘅好方法。你亦可以將呢個專案同按鈕版本結合,整一個可以手動推進嘅顯示器。

呢條影片嘅相關專案

章節

  • [00:00] 十個 LED 專案概覽
  • [01:22] Arduino 循序漸進課程簡介
  • [02:29] 咩係 LED 同點樣辨認佢嘅腳位
  • [03:49] 計算限流電阻
  • [30:47] 介紹走馬燈專案
  • [31:06] 五粒 LED 嘅接線圖
  • [32:52] 走馬燈程式碼講解
  • [34:39] 示範同更改時間數值
  • [36:41] 用按鈕推進燈光(另一段教學)
  • [42:25] 用電位器整 LED 電壓條(另一段教學)
  • [49:25] Arduino 交通燈(另一段教學)

圖片

wiring of 5 LED on Arduino
wiring of 5 LED on Arduino
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
5 個 LED 喺麵包板上,電阻連接到 Arduino UNO
5 個 LED 喺麵包板上,電阻連接到 Arduino UNO
939-Lessson 98-LED-7: Arduino code walking LED light
語言: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

文件📁

Arduino 函式庫 (zip)

用户手册