App Inventor TW Uncategorized 把機器人感測器值與座標用電子郵件寄送

把機器人感測器值與座標用電子郵件寄送

文/曾吉弘(CAVEDU教育團隊

從上次的專欄開始,Android裝置控制樂高機器人專欄將改用App Inventor 2來編寫。App Inventor 2在指令上與前一版的App Inventor 是差不多的,相信您可以很快上手。請到App Inventor 中文學習網來登入App Inventor 2 開發網站並認識更多新功能。

本期專題將會把樂高NXT光感測器值,每十筆為單位更新到Google Chart雲端圖表來取得折線圖。只要熟悉基本語法就可以產生各式各樣的圖表,非常方便!有接觸過App Inventor的師長朋友們,歡迎從App Inventor中文學習網下載原始碼回去,加入更多有趣的功能。

請注意本範例需用到網路連線,請確認您的手機是使用Wi-Fi或3G行動網路來連上網路,否則將無法顯示Google雲端圖表。

超音波感測器

NXT超音波感測器是一種I2C數位感測器,它有內建的晶片可以分析並送出資料。利用超音波感測器,我們可以讓機器人「看到」物體並在撞上去之前躲開,這是觸碰感測器所辦不到的。 超音波感測器使用了聲納技術,它會發出一連串的超音波並記錄超音波被物體反射後所需要的時間,再轉換成距離回傳給NXT。請注意,超音波感測器的預設單位是公分。實際使用上,超音波感測器可測到最短的距離約為5公分,最遠距離約為220公分(圖1)。

002
圖1 App Inventor中用來取得超音波感測器值的指令。

開始玩機器人

本範例的機器人只要將一個超音波感測器接在NXT主機的4號輸入端即可。請確認NXT主機的藍牙是啟動的,接著將NXT主機與Android手機進行藍牙配對(註2),完成之後就可以把機器人放到一邊了。啟動藍牙之後您可以從NXT主機的螢幕左上角看到藍牙的符號。

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

STEP1登入畫面:

首次進入程式的畫面如圖2a,這時只有「連線」按鈕可以按,其它所有按鈕都無法操作。點選「NXT主機/連線」按鈕後進入藍牙裝置清單(圖2b),請找到剛剛配對完成的NXT主機名稱(本範例為abc),點選之後就會由Android裝置對NXT主機發起藍牙連線。順利連線成功的話,「NXT主機/連線」按鈕會變成不可按的狀態,其他按鈕則都可按(圖2c)。

4aa
圖2a  程式首次執行的畫面。 圖2b  點選連線按鈕後進入藍牙裝置清單。 圖2c  連線成功後的畫面。

STEP2程式初始化:

在點選連線清單之前(ListPickerConnect的BeforePicking事件),需先將清單內容指定為Android裝置上的藍牙配對清單(圖3a)。點選之後則先測試連線是否成功,成功則將「NXT主機/連線」設為不可點選,「寄信」、「取得座標」與「斷線」等按鈕設為可點選,並啟動Clock元件來取得超音波感測器值(圖3b)。

005a
圖3a指定藍牙配對裝置清單。
005b
圖3b連線成功後啟動相關元件。

STEP3 按鈕記錄GPS坐標:

每當我們點擊一次「取得座標」這個按鈕時,就會要求LocationSensor元件來取得手機當下的座標(圖4),並顯示在Label_GPS標籤上。由於Google Map的座標格式為「緯度,經度」。所以我們在此也是這樣顯示。

006
圖4 顯示手機座標。

STEP4 使用Clock元件定時更新超音波感測器值:

接著使用Clock元件來每秒更新一次超音波感測器值,如圖5。如果在尚未與NXT主機連線之前就要取得超音波感測器值的話,會顯示錯誤畫面。因此我們在圖5b中,會確認藍牙連線成功之後才做這件事。

007
圖5 定時更新超音波感測器值。

STEP5 寄送電子郵件:

我們將寄送電子郵件的指令包成一個副程式,將寄送電子郵件的指令設定成ActivityStarter元件的DataUri屬性內容。「mailto:」是收件人電子郵件,這裡油使用者自行填入。「subject=」是郵件主題,「body」是信件內容,在此我們填入座標與感測器值等內容(圖6)。 接著按下「寄信」按鈕之後,會先呼叫email副程式,再透過ActivityStarter元件來啟動手機上的電子郵件程式(圖7)。

008a
圖6 寄送電子郵件的副程式。
008b
圖7 按下按鈕寄送電子郵件。

STEP6 斷線:

按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖8)。

009
圖8 按下「斷線」按鈕時中斷藍牙連線。

操作:

實際執行的時候,請先確認NXT已經開機且藍牙也啟動了。接著在您的Android裝置上點選畫面中的「NXT裝置/連線」按鈕,會進到如圖2b的藍牙清單畫面,點選您所要的NXT主機名稱並連線成功後,就能自動取得超音波感測器值。按下「取得座標」按鈕之後,就可在畫面上看到手機目前的GPS座標(圖9a)。請注意您當下所在的位置有可能無法取得座標,例如地下室等密閉空間。

在TextBox中輸入收件人的電子郵件之後,例如aa@bbb,請點選「寄信」按鈕。這時系統會詢問您要使用哪個電子郵件軟體來寄送,例如Android預設的email軟體或Gmail或任何其他的電子軟體等,在此我們選用Gmail(圖9b)。接著就會跳到圖9c的電子郵件畫面,按下寄送按鈕就發信出去了!快去問好朋友有沒有收到信吧。

請注意Android系統中,無法自動發送email、簡訊或撥打電話,因為這樣一來您的手機很容易被惡意使用。所以最後的送出都要由我們親自來執行喔。

9
圖9a 與機器人連線後取得座標與感測器值。 圖9b 系統詢問要使用哪個電子郵件軟體。 圖9c 電子郵件畫面。

本期專欄介紹了如何將機器人的感測器值與手機的GPS座標,透過電子郵件的方式發送出去。這樣有一天您派機器人遠征的時候,就能用這樣的方式來報平安。請繼續關注CAVEDU的機器人專欄唷!

本程式已上架Google play,請到Google Play搜尋「CAVEDU教育團隊」就找得到我們的樂高機器人系列app了。歡迎大家到App Inventor 中文學習網的檔案庫下載本程式的aia原始檔與apk安裝檔。

註:

  1. 想學如何開發App Inventor程式嗎?請到App Inventor 中文學習網與我們一同學習。
  2. 將Android手機設定為可安裝非Google Play下載的程式以及讓手機與樂高NXT主機連線等說明請參考此處
  3. 與NXT連線後如果出現[Error 402]之錯誤訊息請不必理會,程式依然能正確執行。

 

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

發佈留言

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