使用8位元微控制器(MCU)和藍牙(Bluetooth)4.1低功耗模組來控制紅色、綠色、藍色和Alpha的色彩空間,進而以低功耗無線方式進行精確控制發光二極體(LED)的顏色平衡。
圖1的展示板有四個LED,由上至下分別為紅色、綠色、藍色和琥珀色。透過脈衝寬度調變(PWM)工作週期控制各個LED的亮度。這可以透過微控制器(如Microchip的PIC16F1579)實現,該微控制器具有四個用於驅動LED的16-bit PWM,這些16-bit PWM可精確控制各色LED的強度,還能藉由混合不同亮度的RGBA呈現不同的顏色。
使用mTouch電容式觸摸感測技術可以操作兩個電容式觸摸滑動條,板上藍牙模組用於透過Bluetooth低功耗通訊從Android行動應用程式或桌面程式接收PWM的數值。而展示板使用1.5V AAA電池供電。
LED
LED產生的光會因多種因素發生變化。不同類型的LED以及相同類型的各個LED的亮度(以流明為單位)都會有所不同。對於彩色LED,根據色度值測得的特定顏色也會因LED而異。針對少量特定品牌LED的樣本進行了測量以開發亮度和色度設定檔,隨後會在硬體設計和軟體色度計算中將這些值用作典型值,此過程稱為顏色調整。每種顏色的電阻值是固定的,以便產生相同的流明數。各個LED串聯電阻的阻值如下:紅色820Ω、藍色400Ω、綠色500Ω以及琥珀色500Ω。
工作模式
有兩種工作模式:第一種是色相飽和度值加白色(HSVW)和亮度滑動條模式;第二種是使用低功耗藍牙(BLE)的色度選擇器模式。電路板在模式一之下,初次上電時使用電路板上有兩個電容式觸摸滑動條:一個用於輸入顏色,另一個用於控制亮度。如果在滑動條模式下觸摸第一個滑動條,則滑動條上所選擇的顏色將在呈現在LED上輸出。在接收到另一個輸入之前,將一直顯示所選顏色。可以使用另一個滑動條控制特定顏色的亮度。
對於第二種模式,使用基於Android的行動應用程式或基於Windows的桌面應用程式選擇顏色PWM值。然後通過藍牙連接將相應的PWM值發送到電路板。應用程式使用CIE 1931 XY色度圖(圖2)。將計算所選顏色和亮度的精確PWM值,並通過藍牙連接發送到RGBA板。電路板上的藍牙模組隨後會接收PWM值,RGBA板韌體將使用這些值來顯示所選顏色。
色度選擇器應用程式GUI包含CIE 1931 xy色度圖。CIE 1931顏色空間按色度(x)和亮度(y)顯示各種顏色。映射到CIE顏色空間的紅色、綠色和藍色LED的顏色和亮度定義了一個三角形,此三角形內包含了三個元件的輸出可產生的所有可能的顏色明暗;此三角形稱為色域。
為獲得更寬的顏色範圍,添加了一個琥珀色LED。琥珀色LED的xy資料被映射到CIE 1931 xy顏色空間。這在紅色、琥珀色和綠色座標之間定義了另一個三角形。如果按照不同的比例混合紅色、琥珀色和綠色,將獲得圖2中的色域內的顏色。在該模式下使用的PC GUI和Android應用程式透過此混色演算法來計算產生選定顏色所需的PWM工作週期值。色度選擇器應用程式透過藍牙連接發送PWM值。此連接模組將能夠與包含藍牙4.0(及更高版本)收發器的手機和PC進行通訊。此模組主要用於從運行色度選擇器應用程式的主設備接收工作週期值。
藍牙通訊
藍牙設備有兩種類型:傳統藍牙和低功耗藍牙。低功耗藍牙設備只能與另一個低功耗藍牙設備或同時具備傳統藍牙和低功耗功能的藍牙雙模設備進行通訊。因此,為了能夠與RGBA板上的模組進行通訊,主機設備必須是低功耗藍牙或藍牙雙模設備。
該模組符合藍牙核心規範v4.1並由使用者透過輸入/輸出線和UART介面控制。UART支援ASCII命令,可針對基於應用的任何要求控制或配置模組。
應用軟體
電路板工作在模式2下時,所需LED顏色從來自RGBA混色桌面應用程式或RGBA混色Android應用程式的色度選擇器應用程式內的色度圖中選擇。紅色、藍色、綠色和琥珀色PWM工作週期透過應用程式計算。工作週期值透過低功耗藍牙連接傳送給電路板。使用的桌面應用程式是使用Visual Studio C#.NET開發的。應用程式遵循MVC原則,具有以下幾個類別:
1. RGBA視圖控制器類別用作GUI或視圖管理器,也可用作應用程式的控制器。該類別位於層級頂部,負責編譯各類新物件和執行依賴注入(Dependency Injection)。此外,它還處理所有GUI事件並調用相應的方法。
2. RGBA計算類別負責確定選定點處於RGB或RGA三角形的內部還是外部,並為所有LED計算每種顏色的工作週期。
3. 矩陣3×3類別實現了所有3×3矩陣的數學運算,例如逆矩陣、行列式、轉置、餘因數和乘法。向量3類別實現了大小為3的列向量,該列向量用於矩陣3×3類的矩陣數學運算。RGBA資料類為自訂資料類型,用於儲存所有顏色的工作週期值。
4. 在無線通訊包裝類別中,該介面包含無線通訊要實現RGBA應用所需的全部方法。任何無線通訊方法都可以使用該介面。為RGBA板實現該介面後,使用RN4020 PICtail卡透過RS232通訊即可完成低功耗藍牙通訊。
程式設計人員可透過Visual Studio中的內置低功耗藍牙程式庫或協力廠商程式庫編譯新類別以實現無線通訊。該介面會將通訊的實現與實際控制器分離,這樣一來,當實現新的通訊時,視圖控制器和其他類別不會發生變化。
採用RGBA低功耗藍牙通訊實現了無線通訊包裝介面,可與RGBA板進行低功耗藍牙通訊。使用PICtail卡,並透過UART介面或RS232埠將其連接至PC。建立串列通訊並發送命令以實現低功耗藍牙通訊。
低功耗藍牙設備資訊類別儲存有關遠端連接設備的基本資訊(即名稱、位址和支援的伺服器服務),這些資訊用於識別和連接遠端設備。在搜尋結果委託類別中,該委託在結束設備搜尋且設備可以清單形式供使用者選用時處理來自低功耗藍牙類別的事件。搜尋操作需要十秒鐘時間。
在連接狀態變化委託類別中,該委託處理來自低功耗藍牙類別的事件,用於確定主PICtail卡是否已連接至遠端設備,並為使用者顯示當前連接狀態。常量類儲存應用程式所需的所有常量,例如模組命令和回應、服務以及特性UUID等。
Android作業系統的Java應用程式類同樣嚴格遵循MVC原則,採用與桌面應用程式結構類似的Android活動類別。但是Android應用程式使用Android手機的內置低功耗藍牙硬體。Android作業系統透過所有必需事件和回檔為低功耗藍牙通訊提供所有必要的程式庫。RGBA視圖活動類別與桌面上的視圖控制器類別相似,只是GUI控制項在XML檔中定義。
結論
本文說明如何使用16-bit PWM精確控制每個LED的亮度。文中介紹的RGBA LED混色板具有電容式觸摸滑動條按鈕,可實現顏色輸入和亮度控制功能,還使用藍牙4.1低功耗模組來進行通訊,因此用戶可向RGBA板發送PWM值以輸出所需顏色。顏色在Windows桌面或Android手機上的色度選擇器應用程式中選擇。
(本文作者皆任職於Microchip)