2022年5月14日 星期六

[micro:bit, maker] 小彼特(micro:bit)創客(maker)趣之燈條篇

   小彼特(micro:bit)創客(maker)趣之燈條篇 [1]

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FBhttp://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/

May 14, 2022
88x31.png[2]

以小彼特做為機電整合控制的開發板一直是這塊板子想要引導年輕學子培養數位創意(digital creativity)願景(vision)
本場分享以「燈」為主題,從曼陀羅(Mandala)創意思考工具觀察其在生活中的相關應用場景,並結合小彼特的各種控制方法來開展出創客創作的設計思考(design thinking)
因為疫情嚴峻,主辦單位不得不臨時改採遠距的方式舉辦。而筆者也以 MakeCode 便於同時開發傳送與接受廣播遙控程式的 Multi Editor 介面並配合微軟創意獨具的燈條模擬環境來展式電控程式的開發流程。
最後,我們也整理了數件過往專案合作的中大型作品來展示燈條的一系列創作集。

從曼陀羅玩起

我們使用試算表(speeadsheet)繪製了雙層九宮格的曼陀羅,最中心的內層是用來發想燈條在日常生活中應用到的場合。依序將想到的答案填入外環的八個格子時,試算表會立即將之顯示到第二外層以開展出可以用小彼特來控制的方式。
完成這個曼陀羅的腦力激盪的同時等同於設計了在某個場景下操做燈條的方法(圖 1),例如:遙控聖誕樹彩燈。

圖 1:生活中的燈條及其控制之雙層曼陀羅

專案架構

每一個大程式專案都是從小的程式片斷所積累,或者說:大程式是可以拆解(decompose)為若干功能獨立(functional dependent)的小程式。

首先,我們會先介紹燈條控制的三個基本動作(燈條控制三部曲)。接著,是廣播的控制邏輯(廣播控制三部曲)。最後,將前兩項組成「遙控燈」的操作。

燈條控制三部曲

燈條控制的完整程式範例如圖 2 所示,讀者們可以從這裡下載。

圖 2:燈條控制三部曲

因為燈條屬於小彼特的外接硬體,如圖 3 所示,在使用前需要先加入美商 Adafruit 為它撰寫的擴充積木包(extension blocks)。註:新像素(neopixel)為其內部用語。

圖 3:燈條擴充積木

相同地,我們 Arduino 界最富盛名的 Blink 來測試小彼特開發的軟硬體平台:

步驟一:在 on start 中初始化(initialize)燈條物件 strip,積木最右的格式參數用預設值(default),中間的參數要配合硬體上燈珠數(讀者可以試試大於或小於實際燈珠數會如何?),最左邊的參數是燈條接在小彼特的哪一隻接腳(pin)上(因為小彼特預設 P0 腳是和板載的(built-in)蜂鳴器(buzzer)共線路,強烈建議保留給它專門用來控制聲音之用。
步驟二:設定燈條要顯示的顏色。
步驟三:關閉燈條。

註:為了教學統一起見,只要燈條顏色有異動就請加上 show 積木!

廣播控制三部曲

我們採用十分適合廣播程式開發的雙拼工具 MakeCode Multi Editor(使用這個相同功能的網站 BuildBee 亦可)。完整的範例程式可參考圖 4 所示。

圖 4:廣播三部曲

在圖 4 中,我們設定共同的廣播群組代碼為 13。當 Tx 按下 A 時傳送 ("TedLee",  14);Rx 收到後,確認發送者是 TedLee 後,就播出 hello 音效(sound effect)

步驟一:設定廣播群組(group),群組代碼為 0~255,共 256 組。

依照圖 4 寫好 Tx 和 Rx 之後,在 MakeCode Multi Editor 中用模擬器(simulator)直接測試:當 Tx 按下 A 時,Rx 就播出 hello──讀者們應該會和我們一樣跳起來:居然可以在同一畫面上模擬出廣播的收送結果啊!

註:很神奇的,在 MakeCode Multi Editor 上編輯的程式 Tx 和 Rx,會存到瀏灠器快取(cache)中,打開 MakeCode 時就會看到它們,如圖 5 所示。

圖 5:MakeCode Multi Ediot 和 MakeCode 均存在同一瀏灠器快取處

加在一起:遙控燈

將以上兩小節的參考程式合併後就可以像圖 6 一般輕鬆地組成一隻使用廣播來遙控燈條的程式了(在 Rx 中,我們再進一步地將燈條控制改用 blink() 函式(function) 來處理)。其中,歷史總是分分合合。然而,程式也只不過是拼拼湊湊罷了:

數個基元小程式 ---合併---> 大程式

大程式 ---拆解(dempose)---> 數個基元小程式


圖 6:廣播遙控燈條

創客作品集

筆者雖然身在教學現場,但仍不斷期許自己能多方面應用所學,並能將之回饋到教學上。因此,卡路里大作戰這件作品是我們和台北市仁愛國中楊昌珣老師的跨領域(cross disipline)合作專案產出。我們依照男、女國中的體型分成四個類型來計算跑步一分鐘所消耗的卡路里(carloine)熱量。
氣有多長這件創作是用來將音量以燈條做視覺化(visualization)呈現。
聖誕樹是將燈條固定在以 PP 板設計的聖誕樹造形上,並以編程來實現各種燈條的閃爍樣式(patterns)
最後,和新北市三重區明志國中共同開發酷跑遊台灣大型教具,在一分鐘之內,會不斷的累加三位環台跑者的步伐(已發表專文於《「酷跑遊台灣」之機電整合分享:新北市108年資訊科技教育成果展專案》)。

附錄 1:燈條原理

我們選用的是 WS2812B 可程化(programmable)的 +5V 軟管燈條(圖 7),它的資料手冊(datasheet)可從這裡查看。其中,我們可以看到燈條上的每顆燈珠 VDD(電源)、VSS(接地)是全部各自串聯在一起,而 24 位元(RGB 3 色,每色 256 階)控制訊號是以 DIN - DOUT - DIN - DOUT …相接。註:因為我們是要接到小彼特上自行設定燈條樣式,所以,要找像 WS2812B 這類型的燈條才符於使用。 讀者若不清楚它們的採購方式,可在本文下方留言版中詢問,或者到我們的臉書社團上來一起討論。

圖 7:WS2812B 軟管燈條


附錄 2:燈條還可以怎麼玩?

文末,我們想邀請有興趣的讀者們一起來想想這個用 Arduino 控制的光彈效果是否也能改用小彼特來實現呢?或者,像我們在《讓我們Py在一起:手勢控制PowerPoint放映切換》所展示的,能否用手勢(gestures)來控燈呢?歡迎大家在本文下方的留言版中一起討論,或者也可以到我們的臉書社團上一起來分享。