謝作如 李敦勇 唐柳峰
Scratch是一款由美國麻省理工學院(MIT)設計開發(fā)的少兒編程工具。因為其采用了積木式的圖形化編程形式,只要會使用鼠標,就能編寫出各式各樣的作品,大大降低了編程的門檻。目前很多地區(qū)的小學生編程課,大都是基于Scratch進行教學的。Scratch不僅是一款利用積木式工具制作二維動畫的軟件,還是一個學習互動媒體技術(shù)的平臺。Scratch可結(jié)合PicoBoard、樂高WeDo、Arduino、micro:bit等相關硬件,與外部世界進行互動,如讀取傳感器值,驅(qū)動電機等,從而設計出各種有趣的互動作品。
PicoBoard是Scratch開發(fā)團隊設計的傳感器板,通常稱為“Scratch傳感器板”,其功能已經(jīng)內(nèi)置在Scratch的各個版本中。早在2011年,筆者就嘗試用Arduino自制了一款PicoBoard,但因為各種傳感器不好固定,外形也不看,就沒有真正在教學中使用。最近,筆者在拿到掌控板的時候,不禁萌發(fā)一種想法:能不能把掌控板模擬為PicoBoard,讓掌控板和Scratch無縫連接起來呢?
分析規(guī)劃
PicoBoard上有按鍵、光線、聲音、滑桿等傳感器,另外還有四個普通的電阻。這些信息可以從Scratch的擴展功能模塊中看出,以Scratch2.0為例,編程模塊的界面如圖1所示。
掌控板上集成了光線和聲音傳感器,同時有A、B兩個按鈕,分別對應了PicoBoard上的按鍵、光線、聲音這三種傳感器(如圖2)。而滑桿傳感器可以使用六個觸摸按鍵來模擬,這樣就基本上具備了模擬PicoBoard的條件。另外,掌控板的加速度傳感器數(shù)據(jù),可以用阻力(電阻)A、B、C來輸出,這樣學生就能做出更加有趣的交互作品了。
考慮到使用習慣,筆者將掌控板的按鍵B,模擬為PicoBoard的按鈕。加速度傳感器Z軸信息,一般不太容易使用,于是舍棄,留出一個“阻力D”作為擴展接口。確定這些信息后,再對應PicoBoard的協(xié)議,分別進行了通道的編號(如下頁表1)。
代碼編寫
Scratch開發(fā)團隊定義了PicoBoard的協(xié)議。二者采用串口通信,波特率38400bps。當Scratch發(fā)送0x01時,PicoBoard就發(fā)送八路的傳感器數(shù)值。這些信息都是開源的,可以參考sparkfun分享在github的PicoBoard源碼(開源地址:https://github.com/sparkfun/PicoBoard)。
其實有很多人基于各種硬件,編寫了模擬PicoBoard的代碼,如kos Vecsei的Scratchbit,能夠?qū)icro:bit模擬為PicoBoard,用MicroPython編寫。研究這些代碼,很快就能弄明白PicoBoard的通信機制。(Scratchbit的開源地址:https://github.com/vecsei/Scratchbit)
我們采用MicroPython來編寫PicoBoard的代碼,核心代碼如表2所示。
需要說明的是,為了讓交互更加友好,當掌控板和Scratch進行通信時,板子上的RGB燈將會點亮。限于篇幅,這些沒有在上述的核心代碼中體現(xiàn)出來。完整的代碼可以在掌控板的GitHub地址的examples中下載。(掌控板的開源地址:https://github.com/labplus-cn/mPython/)
功能測試
打開mPython軟件,將上述代碼刷入,并設置為默認啟動。掌控板顯示如圖3所示的文字,表示啟動成功。
1.在Scratch1.4測試
打開Scratch1.4,在“偵測”中找到PicoBoard的編程模塊,編寫一個讀取傳感器值的程序,并單擊綠旗運行。等待10秒左右,當三個RGB燈都亮綠燈時,表示連接成功。這時,就能看到掌控板發(fā)來的各種傳感器信息了。
2.在Scratch2.0中測試
打開Scratch2.0,在 “更多積木”中添加擴展板PicoBoard。稍等片刻,軟件界面上出現(xiàn)“PicoBoard”指令模塊,當“PicoBoard”右邊的黃色圖標變成綠色時表示連接成功,同時掌控板上的三個RGB燈為綠色閃爍狀態(tài)[注:可直接使用網(wǎng)頁編程(https://Scratch.mit.edu),也可以使用PicoBoard,但要安裝Web瀏覽器插件]。
應用拓展
下面以Scratch2.0為例,利用“滑桿”來做一個“黃山日出”的效果。
1.前期準備
(1)下載黃山圖片,并利用圖像編輯工具將圖片中的“山”摳出來。
(2)掌控板滑桿數(shù)值取值的測試。
掌控板對應的滑桿為6個觸摸按鍵(p、y、t、h、o、n六個字母),滑桿的初始值約為50.0。按p鍵是0,同時按住py是10,以此類推,剛好把100分為10檔(如表3)。
2.制作過程
(1)硬件連接。將掌控板設置為Scratch傳感器板模式,并與Scratch成功連接。
(2)角色。將黃山圖片設為背景,黃山摳圖為角色1,太陽為角色2。
(3)腳本。
背景:因滑桿的初始值約為50,所以將滑桿傳感器值進行四舍五入,如果其等于50的話一直等待。當觸摸其他按鍵時,返回值將發(fā)生變化,不等于50,進入下面的“重復執(zhí)行”,然后亮度隨著滑桿傳感器值的變化而變化(如圖4)。
角色1(黃山摳圖):開始移至最上層,這樣可以擋住太陽,讓日出效果更佳。同樣在滑桿傳感器值沒有發(fā)生變化時一直等待,然后亮度隨著滑桿傳感器值的變化而變化(如圖5)。
角色2(太陽):開始先將太陽固定在(-20,-20)的坐標位置,同樣在滑桿傳感器值沒有發(fā)生變化時一直等待。為了實現(xiàn)太陽斜向上的效果,將X、Y坐標都隨滑桿傳感器值的變化而變化(如圖6)。這樣當單擊綠旗運行時,用手指從掌控板的p鍵劃向n鍵,這時太陽會慢慢從山的后面升起,天色也慢慢變亮。
當掌控板處在PicoBoard模式時是無法讀取文件和刷入程序的。如果想進入讀取文件或刷入程序的編程模式,得讓掌控板進入REPL模式,具體方法為按下按鍵B不放,然后按下REST鍵,直到OLED顯示屏上顯示“replMode”字樣才松開按鍵B。這時,掌控板又可以恢復到自由編程模式了。
掌控板的價格比市場上通用的Scratch傳感器板便宜不少,還可以隨時恢復到可編程模式,可謂一板多用,價美物廉。相信很快會有更多的教育創(chuàng)客開發(fā)出新的玩法,如利用掌控板的無線通信功能,做網(wǎng)絡版本的Scratch傳感器板等,從而讓更多的孩子愛上Scratch,愛上編程。