前面的文章曾經提到,探奇會接觸WeDo是因為Scratch這個有趣的程式。
當較為深入瞭解Scratch後,發現控制WeDo的方法也非常有趣。
(請參考探奇舊文章:Scratch與WeDo的深入瞭解 )
也有一些人提問是否可以使用Scratch控制NXT,答案當然是可以的,問題在於如何連接NXT與Scratch。
雖然Scratch開放了原始碼,但是想完全瞭解其中的控制還是一件需要漫長學習的事。
Scratch開發人員也提到目前並沒有支援 LEGO NXT的計畫(探奇想應該是要樂高點頭吧!)
但是可以使用Scratch Connections (這只是一個通稱)。
在Scratch 1.3版就已經提供Scratch對外聯絡的方式,特別是網路時代如此便利,Scratch的專案製作也提供在網路上連結的方法。如此一來Scratch就可以在不同電腦間互相聯絡,進行更多的互動。
詳細情況可以先參考Scratch connections網頁的通訊協定說明。
簡單的說就是利用電腦TCP Socket的功能傳遞訊息,總共有三種方式:
Remote Sensors (遠端感應器)
Broadcast (廣播)
Variables (全域變數)
探奇所採用的方法就是Remote Sensors,原理如下:
NXT -- (Bluetooth) -- python中繼程式 -- (Socket port 42001) -- Scratch
透過python中繼程式,一邊透過Socket與scratch聯繫,一邊以藍牙接收NXT訊號。
Scratch Connections提供的是python及Java範例。
探奇原本選擇使用VB程式開發,後來發現已經有人寫出python的NXT模組,當然就直接採用python(咬牙重新學習中)
實驗結果如下:
在嘉義市一家咖啡簡餐店進行拍攝。
使用Scratch小貓咪做為主角。
測試完畢再來一張合照,哇!貓咪忘了恢復大小。
實際測試使用四個感應器,反應不算快(原因當然是藍牙的問題),不過還可以接受。
觸碰感應器:貓咪旋轉,發出喀喀聲
超音波感應器:貓咪遠近變化(大小不同)
光源感應器:貓咪顏色特效變化
聲音感應器:貓咪造型變化
請參考示範影片,(等待加上影片說明註解)
我最近測nxt-python+BYOB(Scratch)+Bluetooth時
回覆刪除發覺當發送馬達指令時似乎不能同時接收Sensor數值
改寫成平行緒也無法同時收送
[版主回覆08/22/2010 11:56:12]您好:
您與孩子的互動真是不錯!
我並不是很瞭解Python,所以只有做到傳送感應器讀值, 原本打算控制馬達,還在思考如何讓Scratch發送命令,後來就偷懶沒有繼續研究。
不知道您的BYOB是自己開發的嗎?還是Scratch Forum那位clintonb的研究?
我不太清楚他們做的Block內容。
我的作法純粹只是使用Remote sensors接收NXT感應器讀值,還沒有時間研究使用Broadcast發出命令控制NXT馬達。
就Python端的NXT direct command程式而言,應該是可以同時接收感應器數值及控制馬達。
你改寫平行緒是指Scratch程式嗎?如果答案是肯定的話,那麼就得先瞭解BYOB的內容為何。
(NXT馬達指令,例如都是使用time或Angel控制,在這段時間,藍牙訊號有所延遲。)
歡迎分享您的成果,也歡迎討論,謝謝!
謝謝您的回覆
回覆刪除BYOB可以打造自己的Block指令,可以用來隱藏一些複雜的邏輯,否則我家小朋友會沒有耐心
平行緒是指Python端的Thread,不過我後來改由BYOB/Scratch端統一發號施令(廣播)後就沒問題了
[版主回覆09/05/2010 13:54:24]你好:
我以為你使用的是clintonb所開發控制NXT的Block,原來是你自行開發的Block,真是厲害!
還請不吝分享你的作品,謝謝!