Basic Tutorial for Arduino, 入門篇

【Arduino入門教學】第五篇:PWM脈衝寬度調變!用可變電阻控制LED燈光亮度

在前面的章節中,我們學會了如何讓 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 35691011

二、 實驗目標與所需硬體材料

🎯 實驗目標

轉動可變電阻器,調整輸入至 A0 的類比電壓,透過 Arduino 計算後輸出 PWM 訊號至 Pin 11,動態調整 LED 的明暗亮度,並在電腦的「序列埠監控視窗」觀察電阻數值變化。

🛠️ 材料清單

  • 主控板:Arduino Uno R3 開發板 × 1

  • 傳輸線:USB 傳輸線 × 1

  • 發光元件:直插式 LED 燈 × 1

  • 限流電阻:220Ω 電阻 × 1(防止 LED 燒毀)

  • 控制元件:可變電阻器(Potentiometer) × 1

  • 輔助配件:麵包板 × 1、麵包板跳線 若干

💡 新手推薦:想一次購足所有電子零件?歡迎選購 米羅科技-Arduino 程式學習經典套件組,輕鬆開啟自造者之旅!

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

 

三、 電路接線說明

可變電阻器共有 3 個引腳,沒有分正負極:

  1. 兩側固定端:分別連接至 Arduino 的 5VGND

  2. 中間滑動端:連接至 Arduino 的類比輸入腳位 A0

  3. 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 毫秒,維持穩定性
}

🔍 關鍵程式碼解析

  1. analogRead(potPin)

    Arduino 的 ADC(類比轉數位轉換器)為 10 位元解析度,讀取到的類比數值範圍為 0 ~ 1023

  2. analogWrite(ledPin, val / 4)

    analogWrite() 函數用於輸出 PWM 訊號,其支援的解析度為 8 位元(範圍為 0 ~ 255)。因此,我們需要將讀取到的 val 除以 4),才能正確將訊號對映至 LED 的亮度範圍。

    💡 進階技巧:也可以使用 Arduino 內建函數 map(val, 0, 1023, 0, 255) 來做對映轉換!

  3. Serial.println(val)

    開啟 Arduino IDE 的「序列埠監控視窗」(Ctrl + Shift + M),即可即時看到當前可變電阻傳回的數值變化。

五、 常見問題 FAQ

Q1:為什麼可變電阻轉到底時,LED 沒有達到最亮或完全熄滅?

請確認可變電阻兩側引腳是否確實接在 5VGND 上。若接錯引腳,類比讀取值將無法達到 0 或 1023 的極值。

Q2:為什麼 LED 不會調光,只有開與關?

請檢查 LED 是否接在帶有 ~ 標籤的 PWM 腳位(如 Pin 3, 5, 6, 9, 10, 11)。如果接在一般數位腳位(例如 Pin 12),analogWrite() 會直接將小於 128 的值視為 0 (OFF),大於等於 128 視為 255 (ON)。

🎯 延伸學習與推薦專案

學會了 PWM 調光之後,你可以試著:

  1. 加入呼吸燈效果:不透過可變電阻,改用 for 迴圈自動讓 LED 實現由暗漸亮、由亮漸暗的呼吸燈效果。

  2. 升級 RGB 全彩 LED:同時控制三個 PWM 腳位(紅、綠、藍),混色出上萬種炫彩燈光!

👉 下一步看更多Arduino入門教學】第六篇:交通燈號控制實作

👉 探索更多物聯網與 Maker 套件:歡迎造訪 米羅科技官方商城 取得最新開發板與感測器模組!

 

相關文章