





編者按:在科技發展日新月異的今天,信息技術教學已經遠離了開、關機還需要反復講解的時代,三歲孩童熟練地擺弄著iPad已非奇事。自策劃了“Scratch來了”這一專題之后,編輯深刻感受到研究程序語言的老師的可愛,他們的執著、他們的探索,使得程序教學不再那么枯燥,煥發出勃勃生機。因此,雜志特別策劃了這一專欄,將陸續刊發一些程序教學領域有代表性的教學實踐。也期待更多老師投身到程序教學中去,通過自身的踐行,推動程序教學的復興。
我們知道Arduino這一軟硬結合的產品可以創意出很多作品。然而,類似JAVA、C語言的Processing/Wiring開發環境,依然會讓許多人糾結于代碼中,甚至望而卻步,以至于頭腦中有了創意卻無法得以落實,而ArduBlock就是致力于降低Arduino愛好者的學習難度,把高級的計算機語言和專業的語法,簡化為一個個模塊,堆砌在一起,最后和Arduino開發板互動,做出激動人心的效果。由于ArduBlock是積木的編程方式,很大程度上降低了學習者的門檻,不需要專業的知識,不需要工科的背景,只要你喜歡,就可以玩,尤其是適合親子互動教學及基礎教育階段的課堂教學。那么,就讓我們一起走進ArduBlock吧。
● 什么是ArduBlock
Ardublock是在上海新車間由李大維和何琪辰于2011年起針對少兒學習物理運算而開發的圖形化程序開發環境,屬于Arduino官方編程環境的第三方軟件,目前必須依附于Arduino軟件運行,當時新車間有許多小朋友對Arduino機器人有興趣,但是文本的類C語言的入門門檻很高,所以工作室試圖透過圖形化的拖拉開發方式大大降低這個門檻。這樣的方式會使編程的可視化和交互性加強,編程門檻降低,即使沒有編程經驗的人也可以嘗試給Arduino控制器編寫程序。
Ardublock一直是一個開源的項目,在網上通過社群的力量共同開發,目前有17個語言版本。ArduBlock相關資源可以訪問官方網站http://blog.ardublock.com/zh/。圖1為2011年發布的1.0正式版,圖2是截至發稿時,最新的內部測試版。
開發團隊2013年重寫了全部代碼,新版本內部模塊的分類更加合理,執行效率更高,增加了一些子程序功能。
● ArduBlock的特色
1.JAVA插件
ArduBlock是使用JAVA語言開發的插件,配合Arduino的IDE使用,軟件包ardublock-all.jar下載后,需要將它拷貝到“Sketchbook location”所在目錄的相關文件夾里。那么如何確定“Sketchbook location”所在目錄呢?在Arduino的IDE下,打開菜單“File”→“Preferences”(如圖3)。
筆者電腦中的位置是D:\Backup\我的文檔\Arduino,找到該目錄后,我們需要先一級一級地在這個目錄下建“子目錄”,最終目錄結構是這樣的:D:\Backup\我的文檔\Arduino\tools\ArduBlockTool\tool\,然后將ardublock-all.jar拷貝進去。ArduBlock軟件安裝完畢后,在Arduino IDE的菜單“Tools”下找到ArduBlock,就可以啟動ArduBlock了。需要特別提醒的是,圖3中我們選擇語言為系統默認時,你的ArduBlock將為中文。
2.積木搭建
我們來看這樣一個程序,它能實現開關燈的功能(如圖4),具體描述就是按一次按鈕,LED燈亮,再按一次按鈕,LED燈滅。在以往的編程中,我們寫代碼一般采用“與2取余法”或者“取反法”來實現切換。
觀察圖4程序編寫,如搭積木那么簡單,還可以對程序進行批注,程序中的各個模塊都是從左側的模塊庫里“拖進”編程界面的,然后用這些模塊積木進行拼接,拼接對了,會發出一聲“咔”的清脆響聲。如果要刪去模塊,只需要將模塊“拖出”編程界面即可。
程序中“主程序”循環結構模塊和“如果/否則”條件判斷模塊都是從“控制”分類中提取的,“非”、“設置數字變量”來自于“變量/常量”分類,而“設定數字針腳值”來自“引腳”分類,這樣的分類條理非常清晰,方便用戶查找到所需功能模塊。
3.高度集成
ArduBlock中集成了游戲搖桿、超聲波傳感器、舵機、SD卡寫入、盾板通訊、I2C讀寫等常見卻可以控制復雜設備編程的模塊,讓創客們能專注于創意思維而不為編程所累。
● ArduBlock典型范例
我們在認識Arduino時已經知道編寫相關程序需要Arduino控制板及一定的硬件支持,然后將編制好的程序寫入控制板中,從而實現感知物理世界,控制物理世界,讓虛擬世界與物理世界聯通。然而,類C語言的編寫環境讓以方塊字為工具的我們需要花大量的時間記憶各種命令及關鍵詞,在達到熟練運用的路途上歷經艱辛。
下面我們以智能過道燈為例講解如何用ArduBlock進行程序編寫。
1.功能
樓梯間都裝有智能燈,當有人走到樓梯口并發出聲音時,過道燈自動亮起。這里需要兩個條件同時滿足(環境亮度不足,有人走過而發出聲音)。
2.器材
要實現此功能,我們除了需要Arduino控制板外,還需要感知光線和聲音變化的器材,我們選擇光敏傳感器和聲音傳感器,當然還需要一盞LED作為過道燈。
3.連線
為了降低操作難度,可以使用成品的3p杜邦線、控制板加盾板的結構,外加成品的傳感器電子積木,這樣就省去了繁雜的面包板加電阻及一堆連接線。
4.編程
制作完的過道燈,當環境亮度低,光敏傳感器的值大于800,且環境聲音大,聲音傳感器的值大于700時,過道燈亮起;當低于上述數值時過道燈熄滅。通過傳感器使過道燈具有一定的智能控制。當然在此基礎上,還可以引導學生進一步探究,因為漸進的學習可以激發學生進行深入探究。
5.調試
我們先來看所有設備連接之后的效果,從圖5中可以看出,接線非常簡單,即使是小學生也不存在設備連接上的困難。設備連接完畢后,我們需要分三步完成我們的任務:
(1)記錄三個信息:聲音傳感器接在模擬針腳0,光敏傳感器接在模擬針腳5,LED燈接在數字針腳1。
(2)獲取常態下光敏傳感器及聲音傳感器的值,當低于此數值時LED應該不亮起。通過串口監視器可以獲取此數值,如圖6所示。
(3)編寫程序,有了第二步獲得的數值,具體編程就簡單多了,唯一需要注意的是過道燈的亮起是有一個延時的,完整程序代碼見圖7。
● ArduBlock課程設置建議
筆者在江蘇省南通市港閘區進行實驗教學時發現,對于小學高年級的學生,因為已經有過Scratch的學習經歷,所以對于ArduBlock的軟件界面及使用并不感到陌生,由于ArduBlock完全與硬件結合,所以學生不會遇到代碼語言教學所遇到的如打字速度的問題;而其積木式的搭建方式也不會出現語法拼寫錯誤的問題。因此使用ArduBlock開展Arduino學習時,需要更多地關注硬件的連接與控制及作品的創意。
在部分學校六年級進行實驗教學,一學期安排共計13課時,內容涉及:認識ArduBlock(1課時)、點亮LED燈(1課時)、自制溫度計(1課時)、夏日清涼帽(2課時)、床頭小夜燈(2課時)、智能樓道燈(2課時)、廚房小衛士(2課時)、學生創意設計(2課時)。
結合我區開展ArduBlock教學時的一些經驗教訓,對各地開展ArduBlock課程有如下幾點建議:①這部分內容的教學對象可以考慮小學高年級及以上學生,以主題任務的方式開展教學。②硬件器材要以模塊化的電子積木為主,盡可能不使用面包板、電阻等基礎電子零部件。③學生的知識儲備包括軟硬兩方面,硬件需要學生了解一定的電路知識,認識常見的傳感器模塊。軟件需要學生掌握Scratch軟件的使用,具有初步的編程思想。④教學過程中涉及編程環節時,可以嘗試讓學生比較與Scratch的異同點,從而尋找編程語言的內在關系。⑤以學生身邊的案例入手,尋找貼近生活的實例,如交通信號燈、床頭小夜燈、廚房小衛士等。
總之,ArduBlock是一門比較適合學校開展的基于Arduino的物聯網趣味編程的教學語言,關于ArduBlock的教學嘗試和課程研究,有助于學生直觀地感受到物理世界來自虛擬世界的控制過程與方法,進而提高學生的創作力。