混合與數學:一種使用Bluetooth?低功耗通信實現RGBA混色的方法
作者 / Swathi Sridhar Namrata Dalvi Microchip Technology Inc.資深應用工程師
本文引用地址:http://www.j9360.com/article/201810/393363.htm摘要:本文說明了如何使用16位PWM精確控制每個LED亮度。它還使用Bluetooth 4.1低功耗模塊來進行通信,因此用戶可向RGBA板發送PWM值以輸出所需顏色。
使用8位單片機和Bluetooth? 4.1低功耗模塊來控制紅色、綠色、藍色和alpha(RGBA)顏色空間,從而以無線方式精確控制發光二極管(LED)的顏色平衡。
圖1給出的演示板有四個LED——分別為紅色、綠色、藍色和琥珀色。通過脈沖寬度調制(PWM)占空比控制各個LED的亮度。
這可以通過Microchip的PIC16F1579單片機實現,該單片機具有四個用于驅動LED的16位PWM。這些16位PWM可精確控制各色LED的強度,還能通過混合不同亮度的RGBA呈現不同的顏色。
使用mTouch?電容式觸摸傳感技術可操作兩個電容式觸摸滑動條。板上RN4020藍牙模塊用于通過Bluetooth低功耗通信從Android?移動應用程序或桌面程序接收PWM值。演示板通過1.5V AAA電池供電。
1 照明
LED產生的光會因多種因素發生變化。不同類型的LED以及相同類型的各個LED的亮度(以流明為單位測得)都有所不同。對于彩色LED,根據色度值測得的特定顏色因LED而異。
我們對少量特定品牌LED的樣本進行了測量以開發亮度和色度配置文件。隨后會在硬件設計和軟件色度計算中將這些值用作典型值。此過程稱為顏色調節。
每種顏色的電阻值是固定的,以便產生相同的流明數。各個LED串聯電阻的阻值如下:紅色820Ω、藍色400Ω、綠色500Ω以及琥珀色500Ω。
2 工作模式
有兩種工作模式:第一種是色相飽和度值加白色(HSVW)和亮度滑動條模式;第二種是使用藍牙低功耗的色度選擇器模式。
電路板在模式1下初次上電。電路板上有兩個電容式觸摸滑動條:一個用于輸入顏色,另一個用于控制亮度。
如果在滑動條模式下觸摸第一個滑動條,則滑動條上選擇的顏色將在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值。此連接模塊將能夠與包含Bluetooth v4.0(及更高版本)收發器的手機和PC進行通信。此模塊主要用于從運行色度選擇器應用程序的主設備接收占空比值。單片機和BLE模塊之間的引腳連接配置如圖3所示。
3 藍牙通信
有兩種類型的藍牙設備——藍牙經典和藍牙低功耗。藍牙低功耗設備只能與另一個BLE設備或同時具備藍牙經典和藍牙低功耗功能的藍牙雙模設備進行通信。因此,為了能夠與RGBA板上使用的RN4020模塊進行通信,主機設備必須是BLE或藍牙雙模設備。
該模塊符合藍牙核心規范v4.1并由用戶通過輸入/輸出線和UART接口控制。UART支持ASCII命令,可針對基于應用的任何要求控制或配置模塊。
4 應用軟件
電路板工作在模式2下時,所需LED顏色從來自RGBA混色桌面應用程序或RGBA混色Android應用程序的色度選擇器應用程序內的色度圖中選擇。紅色、藍色、綠色和琥珀色PWM占空比通過應用程序計算。占空比值通過藍牙低功耗連接傳送給電路板。使用的桌面應用程序是使用Visual Studio C#.NET開發的。應用程序遵循MVC原則,具有以下幾類:
RGBA視圖控制器類用作GUI或視圖管理器,也可用作應用程序的控制器。該類位于層級頂部,負責編譯各類新對象和執行依賴注入。此外,它還處理所有GUI事件并調用相應的方法。
RGBA計算類負責確定選定點處于RGB或RGA三角形的內部還是外部,并為所有LED計算每種顏色的占空比。
矩陣3x3類實現了所有3x3矩陣的數學運算,例如逆矩陣、行列式、轉置、余因子和乘法。向量3類實現了大小為3的列向量,該列向量用于矩陣3x3類的矩陣數學運算。RGBA數據類為自定義數據類型,用于存儲所有顏色的占空比值。
在無線通信包裝類中,該接口包含無線通信要實現RGBA應用所需的全部方法。任何無線通信方法(例如藍牙低功耗和藍牙經典等)都可以使用該接口。為RGBA板實現該接口后,使用RN4020 PICtail?卡通過RS232通信即可完成藍牙低功耗通信。
編程人員可通過Visual Studio中的內置藍牙低功耗庫或第三方庫編譯新類以實現無線通信。該接口會將通信的實現與實際控制器分離,這樣一來,當實現新的通信時,視圖控制器和其他類不會發生變化。
采用RN4020器件類的RGBA藍牙低功耗通信實現了無線通信包裝接口,可與RGBA板進行藍牙低功耗通信。使用PICtailTM卡,并通過UART或RS232端口將其連接至PC。建立串行通信并發送命令以實現藍牙低功耗通信。
藍牙低功耗設備信息類存儲有關遠程連接設備的基本信息(即,名稱、地址和支持的服務器服務)。這些信息用于識別和連接遠程設備。
在搜索結果委托類中,該委托在結束設備搜索且設備可以列表形式供用戶選用時處理來自藍牙低功耗類的事件。搜索操作需要十秒鐘時間。
在連接狀態變化委托類中,該委托處理來自藍牙低功耗類的事件,用于確定主PICtailTM卡是否已連接至遠程設備,并為用戶顯示當前連接狀態。
常量類存儲應用程序所需的所有常量,例如RN4020模塊命令和響應、服務以及特性UUID等。Android操作系統的Java?應用程序類同樣嚴格遵循MVC原則,采用與桌面應用程序結構類似的Android活動類。但是,Android應用程序使用Android手機的內置藍牙低功耗硬件。Android操作系統通過所有必需事件和回調為藍牙低功耗通信提供所有必要的庫。RGBA視圖活動類與桌面上的視圖控制器類相似,只是GUI控件在XML文件(而非類)中定義。
5 結論
本文章說明了如何使用16位PWM精確控制每個LED的亮度。文中介紹的RGBA LED混色板具有電容式觸摸滑動條按鈕,可實現顏色輸入和亮度控制功能。它還使用Bluetooth 4.1低功耗模塊來進行通信,因此用戶可向RGBA板發送PWM值以輸出所需顏色。顏色在Windows桌面或Android手機上的色度選擇器應用程序中選擇。
參考文獻:
[1]Sridhar S,Tiwari A,Dalvi N. RGBA Color Mixing with Bluetooth? Low Energy Communication[R/OL].http://ww1.microchip.com/downloads/en/AppNotes/00002026A.pdf
本文來源于《電子產品世界》2018年第11期第21頁,歡迎您寫論文時引用,并注明出處。
評論