App Inventor TW Uncategorized 輕鬆使用Android 裝置控制樂高機器人:跑步機器人

輕鬆使用Android 裝置控制樂高機器人:跑步機器人

文/曾吉弘(CAVE教育團隊

Android 手機上的感測器種類相當繁多,但一般來說都會有以下三種:加速度感測器、姿態感測器與定位感測器。2013 年1 月號我們介紹了如何藉由手機的傾斜程度來控制機器人的動作,就是使用姿態感測器的X、Y軸資訊來共同決定樂高機器人的左右馬達電力。

本次專欄要改使用加速度感測器(Acceleration sensor) 來完成一個機器人跑步機,是的,您甩手機,機器人跑步。大家一起來甩甩甩,看誰的機器人跑最快喲!加速度感測器會告訴您手機三個軸向上的加速度值, 單位是m/s2。當您將手機如圖1 平放在桌面上時,地球施予手機的重力會在Z 軸上呈現約-9.8 m/s2。

圖1 手機的XYZ 軸向示意圖。

將三軸加速度值顯示在畫面上在開始玩機器人之前, 我們先把加速度值顯示出來吧( 圖2a)。App Inventor對於加速度感測器提供了加速度改變事件(AccelerationChanged), 只要加速度值有改變,就會自動執行件內容。圖2b 就是將XYZ 三個軸向的加速度值分別更新在三個TextBox 中。

由於加速度的單位是m/s2 , 所以會有兩個因素影響到加速度值的大小。第一是「甩動的幅度」,和移動距離有關,第二是「甩動的速度」,後者由於時間平方倍的關係,所以快速的小幅甩動也能得到很高的加速度值。您一定發現到了,即便將手機靜置在桌上, 加速度值仍不斷微幅跳動。

這是正常的狀況唷!感測器由於擷取實體環境的變化,因此一定會有雜訊(noise)存在,如何得到很平滑的感測器值需要一點數學運算。您可以使用各種平均法,例如移動平均或是加權平均法來避免突然的極大值或極小值讓您的機器人亂了方寸。

圖2a依序將XYZ 軸的加速度值顯示在畫面上。

圖2b 加速度感測器的加速度改變事件。

開始玩機器人

請把NXT 機器人準備好,並將左側馬達接在NXT 的輸出端B , 右側則是輸出端C( 註1)。請確認NXT 主機的藍牙是啟動的,接著將NXT 主機與Android 手機進行藍牙配對(註2),完成之後就可以把機器人放到一了,啟動藍牙之後您可以從NXT 主機的螢幕左上角看到藍牙的符號。

接下來依序介紹程式的各個功能:

STEP1: 登入畫面

首次進入程式的畫面如圖3a , 只有「連線」按鈕可以按,其它所有按鈕都無法操作。另一方面,因為加速度測器目前是關閉的,這時不論您如何甩動手機,CAVE 小圖案都是不會動的,我們會在連線成功之後才將其啟動。點選「連線」按鈕後進入藍牙裝置清單(圖3b),請找到剛剛配對完成的NXT 主機名稱( 本範例為abc), 點選之後就會由Android 裝置對NXT 主機發起藍牙連線。順利連線成功的話,就會出現一個灰色Label 不斷更新顯示X 軸向的加速度值,搖晃手機還能看到CAVE 小圖案在畫布上下移動(圖3c)。


圖3a 程式首次執行的畫面。
圖3b 點選連線按鈕後進入藍牙裝置清單。
圖3c 連線成功後出現相關資訊,CAVE 小圖案會上下跳動。

 

STEP2 :程式初始化

接著是點選連線清單之前(ListPicker_CONNECT 事件), 先指定清單內容為藍牙配對裝置清單(圖4a)。在連線之前,CAVE 小圖案是無法移動,因為我們先將加速度感測器關起來了,要等到連線成功之後才會啟動(圖4b),這時原本不會動的CAVE 小圖案以及無法按下的「斷線」按鈕這時也都可以操作了。

圖4a 指定藍牙配對裝置清單並關閉斷線按鈕隱藏觸控板。

圖4b 連線成功後啟動相關元件。

STEP3 :加速度感測器大於邊界值啟動馬達

我們在Acceleration1.AccelerationChanged事件中,只要X 軸向的加速度值大於10 ,就會啟動樂高機器人它前進一段距離,但不會一直走。以下依序說明(圖5):

1. 上下移動C A V E 小圖案: 使用ImageSprite.MoveTo指令,將XY欄位指定為140以及(xAccel * 50)+130,這樣當您搖晃手機時,可愛的CAVE小圖案就會根據您甩動的方向與速度上下移動,相當有趣。

2. 顯示變數於標籤上:將X軸向的加速度乘以50之後,以逗號分開,再與CAVE小圖案的Y座標一併顯示在標籤上,如此就能方便調整參數。為避免單一字串過長, 我們使用make text指令將多個字串組合在一起,這在各程式語言中都是常見的技巧。

3. 轉動馬達:最當X軸向加速度值大於10的時候,就會使用NxtDrive.MoveForward指令讓馬達轉動指定的距離。第一個參數75代表馬達電力為75(最大值100),第二個參數1代表在指定輪胎尺寸的情況下,可以讓機器人移動1單位長,而非持續運轉。

圖5 根據加速度感測器的X 軸向變化資訊來控制機器人。

STEP4: 斷線

按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使按鈕恢復到未連線時的狀態(圖6),CAVE 小圖案又再次回到畫面中央且不再移動了。這時候您可以再次發起連線。

圖6 按下[ 斷線] 按鈕時中斷藍牙連線。

操作:
實際執行的時候, 請先確認NXT已經開機且藍牙也啟動了。接著在您的Android 裝置上點選程式畫面中的「連線」按鈕,會進到藍牙清單畫面,點選NXT 主機名稱連線成功後,就可以把手機拿起來甩啦!握持方向就是們平常講電話時的拿法,這也是最順手的拿法。如果您要換方向的話,就需要取其他軸向的加速度值。用力甩一下機器人就會往前跑一點(圖7a、圖7b),操作方式相當直覺,您一定會喜歡的,但小心別把手機掉到地上啦。

圖7a 手機向上甩動時的畫面。
圖7b 手機向下甩動時的畫面。

2013 的1 月號介紹了姿態感測器,這一期我們延伸介紹了加速度感測器,這是體感遊戲設計的基礎。由於加速度感測器相當靈敏,您也許需要針對本範例中一些參數進行調整來達到更好的效果。

 

歡迎大家由此下載本程式來玩玩看。或掃描以下的QRCode也可以直接將檔案下載到手機,或到App Invento中文教學網上直接下載App Inventor原始檔與apk安裝檔。更多有趣的機器人app請到Google Play搜「CAVE教育團隊」就找得到了。

註1:機器人運動方向有可能因為車頭指向而和程式設定相反,只要將左右馬達電線互換即可。
註2:想學如何開發App Inventor程式嗎?請到App Inventor中文學習網(http://www.appinventor.tw)與我們一同學習。
註3:將Android手機設定為可安裝非Google Play下載的程式以及讓手機與樂高NXT主機連線等說明請參考這裡
註4:與NXT連線後如果出現[Error 402]之錯誤訊息請不必理會,程式依然能正確執行。

文章原文刊載於《ROBOCON》國際中文版2013/3月號

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *