在前面的章節中,我們學會了如何讓 LED 進行簡單的「開」與「關」(數位訊號 High / Low)。但如果想要實現像檯燈一樣的微調亮度(調光 effect),該怎麼做呢?
答案就是使用 PWM(Pulse Width Modulation,脈衝寬度調變) 技術!本篇教學將手把手帶你結合可變電阻與 PWM 輸出,實現轉動電阻器就能即時改變 LED 亮度的實作專案。
一、 什麼是 PWM 脈衝寬度調變?
Arduino Uno 的數位腳位通常只能輸出 5V(High) 或 0V(Low)。但透過 PWM 技術,板子可以藉由快速切換高低電位的時間比例(稱為工作週期 Duty Cycle),模擬出介於 0V 到 5V 之間的連續類比電壓效果。
Arduino Uno 的 PWM 腳位
在 Arduino Uno R3 上,並非所有腳位都支援 PWM。你可以觀察板子上標有波浪符號 ~ 的腳位,共有 6 個:
PWM 腳位:Pin
3、5、6、9、10、11
二、 實驗目標與所需硬體材料
🎯 實驗目標
轉動可變電阻器,調整輸入至 A0 的類比電壓,透過 Arduino 計算後輸出 PWM 訊號至 Pin 11,動態調整 LED 的明暗亮度,並在電腦的「序列埠監控視窗」觀察電阻數值變化。
🛠️ 材料清單
主控板:Arduino Uno R3 開發板 × 1
傳輸線:USB 傳輸線 × 1
發光元件:直插式 LED 燈 × 1
限流電阻:220Ω 電阻 × 1(防止 LED 燒毀)
控制元件:可變電阻器(Potentiometer) × 1
輔助配件:麵包板 × 1、麵包板跳線 若干
💡 新手推薦:想一次購足所有電子零件?歡迎選購 米羅科技-Arduino 程式學習經典套件組,輕鬆開啟自造者之旅!
三、 電路接線說明
可變電阻器共有 3 個引腳,沒有分正負極:
兩側固定端:分別連接至 Arduino 的 5V 與 GND。
中間滑動端:連接至 Arduino 的類比輸入腳位 A0。
LED 燈腳位:
長腳(正極)連接 220Ω 電阻 後接至 PWM Pin 11。
短腳(負極)連接至 GND。
四、 Arduino 範例程式碼與詳細說明
請將以下程式碼複製並上傳至你的 Arduino 開發板:
/*
* Arduino PWM 控制 LED 亮度實驗
* 來源:米羅科技文創學院
*/
// 定義腳位與變數
const int potPin = A0; // 可變電阻中間腳位接至類比 A0
const int ledPin = 11; // LED 長腳接至 PWM 數位腳位 11
int val = 0; // 儲存讀取到的類比數值
void setup() {
pinMode(ledPin, OUTPUT); // 設定 Pin 11 為數位輸出
Serial.begin(9600); // 初始化序列埠通訊,鮑率設為 9600 bps
}
void loop() {
val = analogRead(potPin); // 讀取可變電阻數值(範圍 0 ~ 1023)
Serial.println(val); // 將讀取值輸出至序列埠監控視窗
// 將 10 位元類比值 (0-1023) 轉為 8 位元 PWM 值 (0-255)
analogWrite(ledPin, val / 4);
delay(10); // 延遲 10 毫秒,維持穩定性
}🔍 關鍵程式碼解析
analogRead(potPin)Arduino 的 ADC(類比轉數位轉換器)為 10 位元解析度,讀取到的類比數值範圍為
0 ~ 1023。analogWrite(ledPin, val / 4)analogWrite()函數用於輸出 PWM 訊號,其支援的解析度為 8 位元(範圍為0 ~ 255)。因此,我們需要將讀取到的val除以 4(),才能正確將訊號對映至 LED 的亮度範圍。💡 進階技巧:也可以使用 Arduino 內建函數
map(val, 0, 1023, 0, 255)來做對映轉換!Serial.println(val)開啟 Arduino IDE 的「序列埠監控視窗」(Ctrl + Shift + M),即可即時看到當前可變電阻傳回的數值變化。
五、 常見問題 FAQ
Q1:為什麼可變電阻轉到底時,LED 沒有達到最亮或完全熄滅?
請確認可變電阻兩側引腳是否確實接在 5V 與 GND 上。若接錯引腳,類比讀取值將無法達到 0 或 1023 的極值。
Q2:為什麼 LED 不會調光,只有開與關?
請檢查 LED 是否接在帶有 ~ 標籤的 PWM 腳位(如 Pin 3, 5, 6, 9, 10, 11)。如果接在一般數位腳位(例如 Pin 12),analogWrite() 會直接將小於 128 的值視為 0 (OFF),大於等於 128 視為 255 (ON)。
🎯 延伸學習與推薦專案
學會了 PWM 調光之後,你可以試著:
加入呼吸燈效果:不透過可變電阻,改用
for迴圈自動讓 LED 實現由暗漸亮、由亮漸暗的呼吸燈效果。升級 RGB 全彩 LED:同時控制三個 PWM 腳位(紅、綠、藍),混色出上萬種炫彩燈光!
👉 下一步看更多:【Arduino入門教學】第六篇:交通燈號控制實作
👉 探索更多物聯網與 Maker 套件:歡迎造訪 米羅科技官方商城 取得最新開發板與感測器模組!
