在前面兩篇文章中,我們分別透過軟體硬體 PWM 功能來控制單一 LED 燈泡的亮度。在這篇文章中,我們將利用 PWM 功能來控制全彩的 RGB LED 燈泡,並透過調整紅色 (R)、綠色 (G)、藍色 (B) 三種光源的強度來達到混色的效果,變化出各種不同顏色的光源。

全彩 LED 燈泡

通常我們看到的全彩 LED 燈泡,其實就是依據光的三原色原理,將紅色 (R)、綠色 (G)、藍色 (B) 三種顏色的單色 LED 包裝在一起,然後利用三種光源的強度變化來達到混色的效果。舉例來說,將紅色光源與綠色光源加好加滿,而不留一點藍色光源時,在視覺上就會變成黃色光 (請參考下圖)。而當三種顏色的光源都一起加好加滿,在視覺上則會變成白色光。

紅色 LED 加綠色 LED 變成黃色

紅色 LED 加綠色 LED 變成黃色

上圖中的全彩 LED 燈泡混色時效果還算不錯,有渾然一體的感覺。然而並不是所有的全彩 LED 都能有如此效果,以下圖中的全彩 LED 燈泡為例,在同樣保留紅色光加上綠色光的情況下,可以看到出現三種顏色的光,分別是原本的紅色光與綠色光,另外加上混出來的黃色光。因此在實務應用時如果希望達到良好的混色效果,對於元件的選擇就必須多加注意。

混色效果不均勻的全彩 LED 燈泡

混色效果不均勻的全彩 LED 燈泡

共陰極 vs. 共陽極

原本三個單色 LED 燈泡應共有六支接腳,但是全彩 LED 燈泡通常只有四支接腳,減少了兩支。而到底是減少哪兩支接腳?如果減少的是兩支負極接腳,稱為共陰 (極) 全彩 LED 燈泡。而如果減少的是兩支正極接腳,則稱為共陽 (極)。

一般而言,共陰極與共陽極全彩 LED 燈泡除了接線上需要因應正負極不同而調整外,程式部分也需要跟著調整。

以共陰極的形式來看,因為只有一個陰極,所以陰極接腳必須接地,也就是 GND 的腳位,而其他三支分別代表紅色、綠色、藍色的接腳則各自接至不同的數位輸出當作控制腳位。當代表該顏色的腳位處與高電位時,表示此顏色的 LED 光源是顯示的。如果是以 PWM  來控制其亮度,則工作週期越高表示該腳位所代表的顏色就越亮,也就是比例就越高。

但是對於共陽極的全彩 LED 而言,共用的陽極則必須接至電源輸出的腳位 (如 +5V),而其他三支分別代表紅色、綠色、藍色的接腳則一樣各自接至不同的數位輸出當作控制腳位。跟共陰極不一樣的是,當代表該顏色的腳位處與高電位時,表示此顏色的 LED 光源是不顯示的。而如果是以 PWM  來控制其亮度,則工作週期越高表示該腳位所代表的顏色就越暗,也就是比例就越低。

我在前面文章中有提到,LED 燈泡應該串聯一個限流用的電阻。現在問題來了,全彩 LED 燈泡的限流電阻應該要怎麼串聯?是應該串聯在共用的那支接腳,還是各自串聯在不共用的那三支接腳?不論是共陰極或共陽極的形式,比較建議的接法都是各自串聯在不共用的那三支接腳。

針對共陰極與共陽極全彩 LED 燈泡的比較,整理如下

 共陰極形式共陽極形式
共用接腳陰極正極
共用接腳應連結腳位接地 (GND)電源輸出 (如 +5V)
控制腳位處於高電位時該腳位控制之光源發光該腳位控制之光源不發光
控制腳位處於低電位時該腳位控制之光源不發光該腳位控制之光源發光
使用 PWM 控制因工作週期代表通電的時間比例,所以工作週期越高時越亮因工作週期代表斷電的時間比例,所以工作週期越高時越暗
限流用電阻分別串聯在三支不共用的接腳與輸出控制腳位之間分別串聯在三支不共用的接腳與輸出控制腳位之間

一般而言,除了上述幾個差異點需要特別注意之外,共陰極全彩 LED 燈泡跟共陽極全彩 LED 燈泡在應用上很多時候是可以互相取代的。不過,對 Raspberry Pi 來說,兩者在使用上還有其他的差異,在說明實際接線時我會再提出討論。

因為這個範例一樣是控制 LED 燈泡,所以準備工作與 在 Raspberry Pi 3 Model B 建立 Python 3.6 環境 一致。如果你還沒有完成相關的準備,請務必先行完成再繼續進行後面的工作。

線路圖

Raspberry Pi 與共陽極全彩 LED 燈泡

Raspberry Pi 與共陽極全彩 LED 燈泡

說明如下:

  • 在這個範例中,我們使用的是共陽極的全彩 LED 燈泡,所以共用的陽極接腳連結至電源輸出腳位。
  • 眼尖的朋友可能已經注意到,這次電路所使用的電源腳位是 +3.3V,而不是之前使用的 +5V,而這樣的接法是有原因的。因為共陽極 LED 燈泡的正極接腳如果接至 +5V 的電源腳位,當控制用的腳位設定為高電位時,該顏色的光源理應因為沒有電位差而無法通電發光。但問題來了,Raspberry Pi 的輸出腳位其高電位只有 +3.3V,與 +5V 之間還有 +1.7V 的電位差,而這 +1.7V 的電位差往往已經足夠讓紅色的 LED 燈泡通電發光。也就是說如果共陽極連結至 +5V 的電源輸出腳位,無論如何都會發出紅色的光,只是亮度大小的差別。如果改用共陰極的全彩 LED 燈泡,由於接地端與控制腳位為低電位時不存在電位差 (都是 0V),所以不會有紅色 LED 持續發亮的情況發生,而這正是我之前提到 Raspberry Pi 在使用共陰極或共陽極時的額外差異點。至於使用 +5V 當作輸出腳位高電位的設備而言 (如 Arduino),因為電源與控制腳位高電位之間沒有電位差,所以不會造成同樣的問題。
  • 要解決這個問題,可以改用共陰極的 LED 燈泡,或者採用電位調整器,將控制用的腳位輸出電位提高為 +5V。而我在此採用了偷懶的方式,也就是只使用了 +3.3V 的電源輸入。一般而言,LED 燈泡在 +3.3V 亦可正常工作,但是能夠提供的亮度將可能較為不足,不過還不至於影響到我們的範例。
  • 限流電阻分別串聯三支不共用的接腳與控制用的輸出腳位,在此我統一使用 220 歐姆的電阻。此三個限流電阻相當靠近,連結時務必小心,以避免彼此之間發生接觸。
  • 各顏色之控制腳位對應如下
    全彩 LED 接腳Raspberry Pi 對應腳位
    紅色 (R) 接腳實體編號 3 (BCM 編號 2) 腳位
    藍色 (B) 接腳實體編號 5 (BCM 編號 3) 腳位
    綠色 (G) 接腳實體編號 7 (BCM 編號 4) 腳位
  • 每個全彩 LED 燈泡的腳位編排可能有所不同,需依照實際使用的元件作出相對的調整。下圖為此範例所使用的元件照片,四隻接腳由上而下分別為綠色 (G)、藍色 (B)、紅色 (R)、共陽極 (V):

    共陽極全彩 LED

    共陽極全彩 LED

程式代碼

利用文字編輯器 (如 nano) 新增 Python 程式 pwm_led_rgb.py

內容如下

程式說明如下:

  1. 這個程式看起來很龐大,但是不用太過緊張,幾乎都是我們之前就用過的功能。我們在此跳過與之前範例相同的部分,僅針對不同的地方加以說明。
  2. 第 1 行引入我們之前安裝過的 RPi.GPIO,我們在此使用其提供的 PWM 功能。還記得這是軟體模擬的 PWM 嗎?因為 LED 燈泡的亮度可以接受一定程度的不精準,所以我們在此使用軟體模擬的 PWM 功能即可。
  3. 第 3 行引入 random 模組,在隨機產生混色光源時會用到。
  4. 第 5~7 行分別定義三個 LED 陰極所連結之腳位 BCM 編號。
  5. 第 8 行定義 PWM 所使用之頻率。
  6. 第 10~20 行與之前程式類似,只是這次需要三個 pwm 物件來分別控制三種顏色的 LED 燈泡。
  7. 第 22~25 行是本範例最重要的指令,可以用來控制三種光源的強度以達到混色的效果。RPi.GPIO 的 PWM 工作週期範圍為 0~100,但是在我們習慣上電腦中的三原色範圍卻是 0~255,所以在此進行轉換。此外,因為對共陽極的全彩 LED 而言,工作週期是代表斷電的時間比例,而 int(r/255*100) 是我們希望通電的時間比例,所以要用 100 減掉後才是應該斷電的時間比例。
  8. 第 30~45 行依序顯示各種基本顏色,並將顏色名稱顯示在螢幕上。
  9. 第 48 行亂數產生三種顏色的強度。 如之前所述,各顏色的強度範圍為 0~255。
  10. 第 49 行以 16 進位的方式將三色色碼顯示在螢幕上,如紅色會顯示為 #FF0000。
  11. 第 50 行使用全彩 LED 燈泡顯示該隨機產生的色碼。
  12. 第 55~57 行停止所有 pwm 物件的功能。
  13. 第 58 行將程式所使用到的腳位回復至預設狀態,也就是輸入模式。

程式完成後,輸入下列指令執行程式

順利的話,就可以看到 LED 燈泡開始依序發出紅光、綠光、藍光、熄滅、白光,之後則隨機產生不同顏色的混合光源,如以下影片中所示:

透過 PWM 功能分別控制三種顏色 (紅色、綠色、藍色) LED 燈泡的亮度,我們可以混出各種顏色的光源。如搭配之前提過的呼吸燈功能,可以提供更貼近人性的訊息提示。此外,如果可以根據我們的心情自動調整光源顏色,那可就更加智慧與貼心了。

Facebook 留言
Print Friendly, PDF & Email
Summary
在 Raspberry Pi 3 Model B 利用 PWM 控制全彩 LED 燈泡顏色變化
Article Name
在 Raspberry Pi 3 Model B 利用 PWM 控制全彩 LED 燈泡顏色變化
Description
在這篇文章中,我們將利用 PWM 功能來控制全彩的 RGB LED 燈泡,並透過調整紅色 (R)、綠色 (G)、藍色 (B) 三種光源的強度來達到混色的效果,變化出各種不同顏色的光源。
Author
Publisher Name
Everlearn Studio
Publisher Logo