文/曾吉弘(CAVE教育團隊http://www.cavedu.com)
用手機遙控機器人,聽起來很酷。本系列專題要告訴您如何使用Android裝置控制樂高NXT機器人。等等,要寫Android不是要先學會Java才行嗎?別擔心,開發環境使用Google App Inventor,這是一個完全圖形化的線上Android程式開發環境。不用寫很可怕的Java程式,只要把程式碼「拼起來」就可以了,寫程式的心情都好起來了呢!
首先把NXT機器人準備好,並將NXT左側馬達接於輸出端B,右側則是輸出端C(圖1)。請先確認NXT主機的藍牙是啟動的,接著請將NXT主機與Android手機進行藍牙配對,完成之後就可以把機器人放到一邊了,啟動藍牙之後您可以從NXT主機的螢幕左上角看到藍牙的符號(圖2)。
所有的控制程式都是在Android端完成,樂高機器人有特殊的直接控制指令,可以讓機器人在不執行任何程式的情況下只要接收到正確的藍牙指令就能動作,這樣我們只要專心在App Inventor程式就好,足足省下一半的功夫呢。
目前Google正移轉App Inventor伺服器至麻省理工學院行動研究中心。
程式說明:
App Inventor的程式元件很簡單易懂,首先我們先介紹一下不同形狀的元件,它們各自有其不同的意義與行為模式,請看下圖3:
- 綠色的ㄈ字型積木代表某種狀況是否發生,如果發生就執行它底下的動作。
- 紫色積木可執行某種動作,例如開啟視窗或更換顏色等等,右側的凹槽是用來讓我們指定不同的參數來調程式的效果。
- 左側凸起的淺綠色積木代表參數。
所以這一段程式要表達的是:當ButtonBeep這個按鈕被按下時,呼叫NxtdirectCommand.PlayTone指令讓NXT主機發出頻率為880的音效(La),時間為300毫秒,也就是0.3秒。接下來就依序介紹城市的各個功能
STEP1:
Screen1.Initialize代表程式執行時,所執行的初始化內容。您可以看到除了[連線]按鈕之外,其他的按鈕都是淺灰色,這時候這些按鈕是不能按的(Enabled屬性設為false),因為在與NXT機器人連線之前,這些按鈕都是無意義的。這時候只能點選[連線]按鈕。
STEP2:
點選[連線]按鈕之後,會進入Android裝置的藍牙連線清單,請找到剛剛配對完成的NXT主機名稱(本範例為abc),點選之後就會由Android裝置對NXT主機發起藍牙連線,跳回主畫面之後您可以看到其他的按鈕都可以按了(圖6、圖7、圖8)!
請注意我們在NXTList.AfterPicking事件中加入一個if,來判斷是否成功建立藍牙連線(BluetoothClient.Connect)。這可以處理在非預期情況下的斷線情形,避免程式發生錯誤。
STEP3:
控制機器人前進後退與左右轉的按鈕可以一次講完(圖9),按下ButtonForward按鈕之後會讓機器人的左右馬達皆以最大電力100正轉。電力值的範圍是從0(停止)到100(最高速),您可以自由調整電力參數來看看不同的機器人運動效果,非常有趣。
STEP4:
機器人只會走路還不夠,還得要停得下來。除此之外我們還加了一個「嗶嗶」按鈕,點選按鈕會讓NXT機器人發出La音0.3秒,「嗶嗶」按鈕請回顧圖3說明。
STEP5:
按下[斷線]按鈕之後,會斷開藍牙連線(BluetoothClient.Disconnect),並使按鈕恢復到未連線時的狀態(圖11)。這時候您可以再次發起連線。
STEP6:
注意到畫面上的CAVE圖案了嗎?點選之後可以跳到CAVE的官方網站。這是藉由App Inventor的ActivityStarter來呼叫Android裝置上的WebKit瀏覽器,網址是從DataUri來指定為http://www.cavedu.com。
實際執行的時候,請先確認NXT已經開機且藍牙也啟動了。接著在您的Android裝置上點選程式畫面中的「連線」按鈕,會進到如圖7的藍牙清單畫面,點選NXT主機名稱就會自動連線,連線完成之後NXT主機左上角的藍牙圖示會改為連線中狀態(圖13)。完工啦,還不快開著您的機器人探險去?
請要下載本程式來玩玩看的朋友,請由以下連結下載:
http://dl.dropbox.com/u/11288673/NXT_ButtonControl.apk
或掃描以下的QRCode也可以唷!
註1:App Inventor伺服器目前正由Google移轉至麻省理工學院行動研究中心,預計在近日推出新的服務。使用介面將無重大改變,在過渡期間想要申請測試帳號的讀者請至以下連結申請:http://appinventoredu.mit.edu/。
註2:CAVE教育團隊所提供的App Inventor指令中文化手冊請至http://www.appinventor.tw下載。
註3:如何將您的手機設定為可自行安裝非Market下載的程式請參考:http://www.appinventor.tw/phone。
註4:讓Android手機與樂高NXT主機連線的詳細步驟請參考:http://www.appinventor.tw/connecttonxt。
文章原文刊載於《ROBOCON》國際中文版2012/3月號