前些日子我做了有關於如何從8X8 RGB LED燈板看運算思維,今天因為ePy實驗室又新增積木,多了一些功能之後,我來做出更多有趣的燈板顯示。
「從8X8 RGB LED燈板看運算思維」這個主題我想應該會變成一個系列,只要有新的想法或做出不同的功能,我就會分享出來供給大家製作。
首先進入線上實驗室,點選視窗右上角的齒論,進入『版本選擇』請選擇『進階版』後關閉視窗,這時候我們可以從主機板中的LED看見新的積木。
這次吳老師新增了像是亮度、座標、畫布和陣列,這些功能無論是在使用上或教學上都會變得相當實用!
那我們就開始吧
首先,我們先來製作一個叉叉
首先我們觀察到結果的畫面後,先來拆解問題。
就如同OLED顯示器一樣,燈板(畫布)最左上角的座標為(1,1),往右水平方向x遞增,往下垂直方向y遞增,所以如果以同個水平來看,第一排出現的LED座標就會是(1,1),(8,1),第二排出現的LED座標就會是(2,2),(7,2)以此類推,到了中心點之後就會反過來。
接著我們找出模式。
其實一次看兩排是很不直觀的,如果我先看從左上到右下的這一條LED,就會發現他的x座標為遞增;反之,看從右上到左下的這一條LED,他的x座標是遞減,另外y座標都是遞增,因此LED點亮的模式就出現了。
然後我們會發現它的顏色是對稱的,每當y遞增一次,顏色就會改變一次,在這邊提示大家,它的顏色是從暖色系慢慢地變成冷色系,這部分該如何調整呢?待會兒說明。
接下來我試著把程式碼給拼接出來
最外圍的while迴圈先不用看,我們注意到如果要使用座標控制LED燈板的時候,需要先設置「彩色燈 畫布」,畫布會將LED的陣列先準備好;最後要「設置彩色燈 畫布顯示」,這兩個部分是必須的。
接著,我使用一個變數:item作為x、y座標的設定,同時也是設定色相的變化。
左上到右下的順序很簡單,就讓x與y座標在每次迴圈中遞增就好,反向的右上到左下的順序就將x座標遞減,最後將設置好的座標與顏色透過「設置彩色燈 畫布顯示」一次性地顯示出來就好。
將程式碼燒錄之後,我們就可以看到LED慢慢地點亮,範例影片。
接下來可以做出不同的變化,例如加快點燈的速度、或是增加關閉LED的變化等等。
那我要特別說明的是LED顏色的部分,這邊很特別的是採用HSV的方式,與以往RGB的方式不同。在積木區中兩個方法都可以執行,但這次吳老師特別加入HSV的應用,對我來說是大大提高Python在操作WS2812彩色燈的應用,這要怎麼說呢?
首先,如果大家有學過影像辨識,在學習影像辨識時,機器視覺與人眼視覺的邏輯是不同的,簡單說的話機器視覺看的是HSV而不是RGB,這個原因很簡單:RGB並不直覺。
所以習慣HSV之後,在回來看RBG就會變得很卡,不太清楚RBG三個數值整合後到底會出現什麼顏色。
雖然說HSV在學生階段不太會使用到,但在國中物理的光學,可以作為延伸的教材教授給學生補充知識,透過LED燈板時做出結果,我個人是非常認同加入HSV的概念。
那HSV到底是甚麼呢?上維基百科會找到很多的資料,簡單來說HSV就是色相、飽和度、明度。
色相是將彩虹的順序分成360度,他是一個圓形的概念
所以如上圖所示,你可以發現從0度開始就是紅橙黃綠藍靛紫的順序,然後再回到紅色。而H和V則會使該顏色做不同的變化,其值都是0~100%,這就很好理解。
在積木中,吳老師把HSV與RGB之間做運算後,就可以得到我們人眼所看到的顏色。
網路上有一些HSV的模擬器可以使用,建議大家可以去玩玩看,連結在這邊。
因此,一樣是紅色,在不同飽和度和明暗度下,就會呈現出不同的感覺,而這種感覺其實是很好理解的,也就是說HSV其實比較直觀。
今天的分享就先到這邊,下次見。