2009-11-09

Scratch與WeDo的深入瞭解

WeDo的探奇心得


 


緣起


 


原本是為了瞭解Scratch是否可以控制NXT,決定從Scratch著手,先弄清楚Scratch控制WeDo的方式。再依樣畫葫蘆試試,不料卻有了一些意外的發現。


 


從一般經驗推論,WeDo不過是另一種形式的NXTWeDoUSB Hub就相當於NXT主機,差別在於WeDo HubPC直接控制,當然還需要由USB連線及供應電源。


 


想對Scratch有深入的認識必須經過一番努力,還好MIT已經公開Scratch的原始程式碼(真是造福大家!),也同時公布Scratch Plugin,想必應該很單純。豈知事情不是像我這個憨人所想得那麼簡單!


 


SmallTalk


 


在念書的時代就聽聞過這個物件導向語言SmallTalk,也隱約知道是一隻小老鼠(Squeak),直到今天才真是開了眼界,沒錯!Scratch就是用Smalltalk完成的。雖然各種程式語言的特色不盡相同,程式語法也有所差異,但是需要清楚地瞭解各部分的功能,簡直就是劉姥姥進大觀園,眼花撩亂(外加目瞪口呆!)。


 


還好事件驅動的特色使事情比較容易理解。加上有人在網路上提供資源,很幸運地釐清了SmallTalk VM的運作方式。


 


關於如何在Scratch修改新增Block,請有興趣的同好可以參考ItchBot(http://www.richardgoyette.com/ItchBotsMain.html)以及Flip(http://scratch.mit.edu/projects/Jens/75626)的說明。


 


 


WeDo的電子零件設計


 


        過去我對於WeDo的瞭解總是侷限於樂高積木和電子零件的結合,也或許是因為過去工作經驗的關係,總認為這只是自動控制的『小玩意』。從外觀及功能上來看的確是如此,但是內部的設計理念(包含WeDoScratch)卻是非常複雜,因為這牽涉到孩子如何學習,如何累積經驗及知識,如何避免太多的干擾(有點像是盡量減少科學實驗的變因)。現在稍微能夠體會MIT Media Lab成員的真正想法。


        先從WeDoHub說起,採用USB設計,隨插即用(熱拔插),插入電腦後作業系統自動辨識出『USB人性化裝置』,使用內建驅動程式(不用另外安裝),這樣也正好配合OLPC的觀念,方便易用。順道一題,Scratch也可以支援小型筆電的較低解析度,真是MIT的精心考量。


 


WeDo Hub只有兩個接頭,說明只能同時使用兩種電子元件,還具備自動偵測感應器種類及馬達的功能,充分保護感應器元件,也符合孩子操作的簡單直覺觀念。不論使用那個感應器,不用理會插在Hub的左邊還是右邊;也不會因為指令輸出錯誤,造成馬達或感應器的損壞。


 


根據Scratch原始程式碼的分析,它應該利用感應器及馬達內部電阻的特性,辨識不同種類的感應器,(探奇推想是利用四芯接線的其中兩條),除了傾斜感應器(tilt)及距離感應器(distance),還預留一個Light block的編號。


 


傾斜感應器及距離感應器都是讀取感應器原始數值後換算為Scratch顯示的數值,例如距離感應器為0-100,傾斜感應器為0-4的整數值。


 


WeDo的應用中,大部分的模型設計只使用一顆馬達,或是一顆馬達加上一個感應器。讓WeDo模型具備實體輸入及實體輸出的功能。當然也可以將實體輸入擴充為同時使用兩個感應器,孩子不必擔心哪一種感應器需要放在Hub的哪一個插座,因為Scratch已經在幕後做好準備。


 


這些自然是MIT為了降低孩子學習難度的貼心設計,也是Scratch支援weDo計畫中很重要的一項特性。


 


WeDo的突發奇想


 


        既然發現Scratch內部預留Light Block的使用,那麼如果把我的8293拿出來,配合WeDo的使用,不是可以有更多的變化嗎?!


 


        8293是樂高PF馬達組,零件包含9V電池盒,PF馬達一顆,LED燈泡積木(兩顆燈),這些都是拿來測試的好東西。


 


        首先想到的是使用9V的電池盒驅動PF馬達,印象中也認定PF馬達是需要9V電源。那麼WeDo HubUSB得到電源,不是只有5V嗎?如何驅動PF馬達呢?測試發現PF馬達使用電池盒的轉速較高,接上Hub的轉速比較慢。


 


        接著測試可以接上燈泡積木嗎?答案是沒有作用。再試著將燈泡積木疊在馬達接頭上面,想說如果啟動馬達也會同時點亮電燈,結果還是無法啟動。但是當單獨接上馬達,利用指令讓馬達轉動,馬達轉動後,將燈泡積木接頭疊在馬達接頭上面時,燈泡會同時發光,這表示電源是正常供給的。也同時印證了我的推測,燈泡積木改變馬達原本的電阻值,使得Scratch無法辨識接上去的是哪一種電子零件,所以跟本不會啟動馬達。


 


        這種自動辨識感應器種類的技巧,也阻止了另外一種可能的應用,使用轉換線轉接NXT的類比感應器,接在WeDo Hub上使用。因為無法通過Scratch的辨識,Scratch不會對任何不明感應器送出命令。


 


        那麼可以同時接上兩顆馬達嗎?答案是可以的,不過Scratch的設計是讓兩顆馬達同時動作,無法分開控制。


 


        同時接上兩顆不同的感應器呢?答案是OK的,一顆傾斜感應器,一顆距離感應器,可以同時接收感應器的值,操控Scratch舞台上的角色也很有趣喔!


 


再來一題,接上兩顆相同的感應器(例如兩顆距離感應器),可以分別正常接收數值嗎?我沒有第二套WeDo,所以無法測試,不過依據Scratch程式碼的寫法應該會受到干擾。還請各位老師幫忙測試回覆喔!


 


Scratch大冒險(大亂搞)


 


        Scratch的設計為事件導向,舞台及不同的角色都由獨立的事件觸發,就好像現實世界,每個人各司其職,這樣的直覺式設計,相當於同時間的多工進行,各個角色之間可以使用變數傳遞訊息。那麼實體的輸出角色也可以分開嗎?


 


        雖然目前的測試發現同時接上兩顆馬達,兩顆馬達的動作是一樣的,同時轉動,同時停止。不過只要改變程式碼,就可以分別控制兩顆馬達。









 


        探奇做了一些嘗試後,為兩顆馬達(編號為AB)單獨寫出控制命令,可以獨立開關。這些新增的程式命令當然無法在原始的Scratch執行,只能在修改開放程式碼的版本使用,只有英文版。




 


        有了單獨一顆馬達的控制,我們可以在WeDo的模型增加另外的動件。例如鱷魚不再只有嘴巴可以動,尾巴也可以單獨動,可是要犧牲距離感應器的功能。


 


冒險後的結論


 


        在一個好產品的設計背後,一定有很強的設計理念支持。WeDoScratch都是這樣的好設計,也是因為有MIT的加持。反觀NXT,特別是NXT-G,雖然有資料流及多工的概念,但為了簡化使用上的困難,限制命令方塊放在順序橫軸上,反倒不容易做出比較複雜的設計。加上圖形化介面的顯示延遲,還有佔據龐大記憶體的缺點,真希望NI能跟TuftsMIT好好請益。(其實他們的關係很密切喔!主要還是設計者的想法)


 


        NXT因為需要驅動程式,所以Scratch可能可以使用序列埠通訊方式傳送命令,控制NXT,但是需要時間研究。


 


        如果短時間之內有這個需求,倒是可以透過Scratch Connection,以網路廣播傳遞變數的方式,撰寫JAVAPython居中協調。




還希望有興趣的同好一起討論喔!








1 則留言:

  1. 老師您好:
    我是新加入的教室,先跟您問好
    最近在研究WEDO,在偶然的機會看到一段影片(對不起我忘了影片的位置了)
    就是用動作感應器來控制物件的方向,而這物件又能在scratch上動作
    我想問的是WEDO的訊號如何連結上scratch?
    (我是學mechanical engineering , 所以電子方面的能力是非常弱的)
    [版主回覆11/20/2009 23:09:40]你好:

    不知道您是那邊的教室,那位老師?

    當然歡迎加入這個行列。

    針對您的兩個問題,有一些敘述需要釐清,比較容易回答,分別是:

    1. 物件是指什麼?在Scratch動作是指?

    2. 訊號連結,你指的是實體層(實際電子訊號),還是在Scratch操作WeDo?

    很巧,我也是機械工程出身....

    歡迎詳加討論喔!謝謝!

    回覆刪除

探奇歡迎大家留言討論!謝謝分享你的意見。