0

0
0

文字

分享

0
0
0

輕鬆使用Android裝置控制樂高機器人:(偽)輻射偵測器

馥林文化_96
・2012/05/29 ・2310字 ・閱讀時間約 4 分鐘 ・SR值 533 ・七年級
相關標籤: 樂高機器人 (7)

文/曾吉弘(CAVE教育團隊

大家好,歡迎來到CAVE的App Inventor機器人專欄,本期的主題的主角是樂高NXT套件中的光感測器,當光感測器偵測到愈亮的光源或是顏色愈白的物體時,NXT主機就會發出愈高頻率的聲音,Android手機上的畫面也會有所改變。我們可以把今天的作品假裝成一個輻射偵測器,來開開朋友的玩笑。

本次範例的重點在於使用簡易的線性方程式來將光感測器值轉換為NXT主機發音的頻率,並根據頻率的高低來轉換Android手機上的畫面。如果數值過高(數值大於600),螢幕會顯示紅色來警告;如果更高的話(代表輻射量超標了,快逃!)會在畫面上顯示一個骷髏頭。

計算的過程很簡單,我們希望光感測器值從0增加到1000時(註1),NXT主機發音的頻率會由200Hz到2000Hz。經過簡單的解聯立方程式(還沒忘記吧?)之後可以得到下列的關係式:

-----廣告,請繼續往下閱讀-----

y = 1.8x + 200

您可以自由調整這個式子,例如把18成改成25的話,頻率上升的速度會更快。這是基礎比例控制(proportional control),意即系統的輸入與輸出成比例關係,而非單純的二分法。此種控制方法運用在機器人上的話,可以達到相當滑順的執行效果,也能讓使用者進行細膩的微調。我們會在日後的專題中詳細介紹。

首先請把NXT機器人準備好,並將光感測器接在NXT的3號輸入端。請確認NXT主機的藍牙是啟動的,接著將NXT主機與Android手機進行藍牙配對(註2),完成之後就可以把機器人放到一邊了,啟動藍牙之後您可以從NXT主機的螢幕左上角看到藍牙的符號(圖1)。

圖1  NXT主機藍牙已開啟(左上角)

-----廣告,請繼續往下閱讀-----

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

STEP1

首次進入程式的畫面如圖2,您可以看到只有 [NXT裝置清單/連線]按鈕可以按,[斷線]按鈕則無法按下,因為我們希望在NXT機器人連線之前只能點選[連線]按鈕,來讓使用者操作單純化。請注意輻射量實際上就是光感應器的值,當然不是真的輻射。

圖2 程式首次執行的畫面

-----廣告,請繼續往下閱讀-----

STEP2

接著是將ListPickerConnect清單指定為藍牙配對裝置清單(圖3),點選[連線]按鈕之後,會進入Android裝置的藍牙連線清單(圖4),請找到剛剛配對完成的NXT主機名稱(本範例為abc),點選之後就會由Android裝置對NXT主機發起藍牙連線,返回主畫面之後您可以看到光感測器值已經更新在Android裝置畫面上了,NXT主機也會根據光感測器所指向物體的亮度或顏色發出不同頻率的聲音,光源愈亮或顏色愈接近白色的話,發音頻率愈高。

圖3  將ListPickerConnect清單內容指定為藍牙配對裝置清單。

圖4  Android裝置的藍牙連線清單

-----廣告,請繼續往下閱讀-----

STEP3

本程式延續上一期的感測器面板專題,除了使用Clock元件來定時更新感測器值之外,我們再多做一點,讓螢幕跟著光感測器值的變化顯示對應的資訊。主要的想法如下:

光感測器值小於600à輻射量正常,設定Canvas元件底色為無色。

光感測器值介於600與900之間à輻射量偏高,設定Canvas元件底色為紅色。

-----廣告,請繼續往下閱讀-----

光感測器值大於900à輻射量超高!設定Canvas元件底色為紅色。

要達到這種效果的關鍵在於Canvas畫布元件,它可以讓我們對它進行點擊以及拖拉的動作,本範例是根據光感測器值來置換Canvas元件的底色與底圖。我們在Clock.Timer計時器事件中加入了兩層if else判斷式來看光感測器值就竟落在哪一個區間中,接著才來調整Canvas元件的底圖或底色。

圖5a  連線成功之後顯示出光感測器值,正常範圍下螢幕無變化

圖5b  光感測器值超過600,螢幕變為紅色

-----廣告,請繼續往下閱讀-----

圖5c  光感測器值超過900!換成骷髏Android小綠人,快逃命吧!

圖6  程式主執行區:Clock.Timer計時器事件( 上半:顯示感測器值以及播放音效;下半:根據感測器值來更改Canvas底色與底圖)

STEP4

按下[斷線]按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使按鈕恢復到未連線時的狀態。這時候您可以再次發起連線。

-----廣告,請繼續往下閱讀-----

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

STEP5

本範例一樣加入了超連結功能,點選畫面下方的App Inventor TW圖案就能跳到App Inventor中文學習網。這是藉由App Inventor的ActivityStarter來呼叫Android裝置上的WebKit瀏覽器,網址是從DataUri來指定為http://www.appinventor.tw。但是有時候我們可能會不小心按到圖案就跳出程式,這會讓人有點困擾,所以我們新增了一個Notifier通知元件,它可以產生各種對話視窗。

如此一來,當點選App Inventor TW圖案之後將先顯示一個對話視窗(圖9),詢問您是否要離開程式並跳轉到App Inventor中文學習網?如果點選NO就返回程式繼續偵測輻射,如果點選YES就真的跳轉到瀏覽器了。

圖8  點選App Inventor TW圖案會啟動Notifier元件

圖9  使用Notifier元件產生對話視窗

圖10  點選CAVE圖案會跳到App Inventor中文學習網

實際執行的時候,請先確認NXT已經開機且藍牙也啟動了。接著在您的Android裝置上點選程式畫面中的「連線」按鈕,會進到如圖4的藍牙清單畫面,點選NXT主機名稱就會自動連線,連線完成就能看到感測器值不停更新,NXT主機也嗶嗶嗶開始唱歌。快點拿去嚇嚇您的朋友吧!

請要下載本程式來玩玩看的朋友,請由以下連結下載:
http://dl.dropbox.com/u/11288673/NXT_Radiation.apk
或掃描以下的QRCode也可以唷!

註1: 光感測器值實際上範圍為0~1023,為求計算方便就視為0~1000,會有些許誤差但不明顯。您可自行求得正確之關係式。

註2:將Android 手機設定為可安裝非Market 下載的程式以及讓手機與樂高NXT 主機連線等說明請參考:http://www.appinventor.tw

註3:與NXT 連線後如果出現[Error 402] 之錯誤訊息請不必理會,程式依然能正確執行。

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

-----廣告,請繼續往下閱讀-----
文章難易度
馥林文化_96
54 篇文章 ・ 5 位粉絲
馥林文化是由泰電電業股份有限公司於2002年成立的出版部門,有鑒於21世紀將是數位、科技、人文融合互動的世代,馥林亦出版科技機械類雜誌及相關書籍。馥林文化出版書籍http://www.fullon.com.tw/

0

1
0

文字

分享

0
1
0
停工即停薪:如何證明你的時間值多少?車禍背後的認知 x 情緒 x 金錢 x 法律大混戰
鳥苷三磷酸 (PanSci Promo)_96
・2026/01/09 ・3351字 ・閱讀時間約 6 分鐘

本文與 PAMO車禍線上律師 合作,泛科學企劃執行

走在台灣的街頭,你是否發現馬路變得越來越「急躁」?滿街穿梭的外送員、分秒必爭的多元計程車,為了拚單量與獎金,每個人都在跟時間賽跑 。與此同時,拜經濟發展所賜,路上的豪車也變多了 。

這場關於速度與金錢的博弈,讓車禍不再只是一場意外,更是一場複雜的經濟算計。PAMO 車禍線上律師施尚宏律師在接受《思想實驗室 video podcast》訪談時指出,我們正處於一個交通生態的轉折點,當「把車當生財工具」的職業駕駛,撞上了「將車視為珍貴資產」的豪車車主,傳統的理賠邏輯往往會失靈 。

在「停工即停薪」(有跑才有錢,沒跑就沒收入)的零工經濟時代,如果運氣不好遇上車禍,我們該如何證明自己的時間價值?又該如何在保險無法覆蓋的灰色地帶中全身而退?

-----廣告,請繼續往下閱讀-----
如果運氣不好遇上車禍,我們該如何證明自己的時間價值?/ 圖片來源: Nano Banana

薪資證明的難題:零工經濟者的「隱形損失」

過去處理車禍理賠,邏輯相對單純:拿出公司的薪資單或扣繳憑單,計算這幾個月的平均薪資,就能算出因傷停工的「薪資損失」。

但在零工經濟時代,這套邏輯卡關了!施尚宏律師指出,許多外送員、自由接案者或是工地打工者,他們的收入往往是領現金,或者分散在多個不同的 App 平台中 。更麻煩的是,零工經濟的特性是「高度變動」,上個月可能拚了 7 萬,這個月休息可能只有 0 元,導致「平均收入」難以定義 。

這時候,律師的角色就不只是法條的背誦者,更像是一名「翻譯」。

施律師解釋「PAMO車禍線上律師的工作是把外送員口中零散的『跑單損失』,轉譯成法官或保險公司聽得懂的法律語言。」 這包括將不同平台(如 Uber、台灣大車隊)的流水帳整合,或是找出過往的接單紀錄來證明當事人的「勞動能力」。即使當下沒有收入(例如學生開學期間),只要能證明過往的接單能力與紀錄,在談判桌上就有籌碼要求合理的「勞動力減損賠償 」。

-----廣告,請繼續往下閱讀-----
PAMO車禍線上律師的工作是把外送員口中零散的『跑單損失』,轉譯成法官或保險公司聽得懂的法律語言 / 圖片來源: Nano Banana

300 萬張罰單背後的僥倖:你的直覺,正在害死你

根據警政署統計,台灣交通違規的第一名常年是「違規停車」,一年可以開出約 300 萬張罰單 。這龐大的數字背後,藏著兩個台灣駕駛人最容易誤判的「直覺陷阱」。

陷阱 A:我在紅線違停,人還在車上,沒撞到也要負責? 許多人認為:「我人就在車上,車子也沒動,甚至是熄火狀態。結果一台機車為了閃避我,自己操作不當摔倒了,這關我什麼事?」

施律師警告,這是一個致命的陷阱。「人在車上」或「車子沒動」在法律上並不是免死金牌 。法律看重的是「因果關係」。只要你的違停行為阻礙了視線或壓縮了車道,導致後方車輛必須閃避而發生事故,你就可能必須背負民事賠償責任,甚至揹上「過失傷害」的刑責 。 

數據會說話: 台灣每年約有 700 件車禍是直接因違規停車導致的 。這 300 萬張罰單背後的僥倖心態,其巨大的代價可能是人命。

-----廣告,請繼續往下閱讀-----

陷阱 B:變換車道沒擦撞,對方自己嚇到摔車也算我的? 另一個常年霸榜的肇事原因是「變換車道不當」 。如果你切換車道時,後方騎士因為嚇到而摔車,但你感覺車身「沒震動、沒碰撞」,能不能直接開走?

答案是:絕對不行。

施律師強調,車禍不以「碰撞」為前提 。只要你的駕駛行為與對方的事故有因果關係,你若直接離開現場,在法律上就構成了「肇事逃逸」。這是一條公訴罪,後果遠比你想像的嚴重。正確的做法永遠是:停下來報警,釐清責任,並保留行車記錄器自保 。

正確的做法永遠是:停下來報警,釐清責任,並保留行車記錄器自保 。/ 圖片來源: Nano Banana

保險不夠賠?豪車時代的「超額算計」

另一個現代駕駛的惡夢,是撞到豪車。這不僅是因為修車費貴,更因為衍生出的「代步費用」驚人。

-----廣告,請繼續往下閱讀-----

施律師舉例,過去撞到車,只要把車修好就沒事。但現在如果撞到一台 BMW 320,車主可能會主張修車的 8 天期間,他需要租一台同等級的 BMW 320 來代步 。以一天租金 4000 元計算,光是代步費就多了 3 萬多塊 。這時候,一般人會發現「全險」竟然不夠用。為什麼?

因為保險公司承擔的是「合理的賠償責任」,他們有內部的數據庫,只願意賠償一般行情的修車費或代步費 。但對方車主可能不這麼想,為了拿到這筆額外的錢,對方可能會採取「以刑逼民」的策略:提告過失傷害,利用刑事訴訟的壓力(背上前科的恐懼),迫使你自掏腰包補足保險公司不願賠償的差額 。

這就是為什麼在全險之外,駕駛人仍需要懂得談判策略,或考慮尋求律師協助,在保險公司與對方的漫天喊價之間,找到一個停損點 。

談判桌的最佳姿態:「溫柔而堅定」最有效?

除了有單據的財損,車禍中最難談判的往往是「精神慰撫金」。施律師直言,這在法律上沒有公式,甚至有點像「開獎」,高度依賴法官的自由心證 。

-----廣告,請繼續往下閱讀-----

雖然保險公司內部有一套簡單的算法(例如醫療費用的 2 到 5 倍),但到了法院,法官會考量雙方的社會地位、傷勢嚴重程度 。在缺乏標準公式的情況下,正確的「態度」能幫您起到加分效果。

施律師建議,在談判桌上最好的姿態是「溫柔而堅定」。有些人會試圖「扮窮」或「裝兇」,這通常會有反效果。特別是面對看過無數案件的保險理賠員,裝兇只會讓對方心裡想著:「進了法院我保證你一毛都拿不到,準備看你笑話」。

相反地,如果你能客氣地溝通,但手中握有完整的接單紀錄、醫療單據,清楚知道自己的底線與權益,這種「堅定」反而能讓談判對手買單,甚至在證明不足的情況下(如外送員的開學期間收入),更願意採信你的主張 。

車禍不只是一場意外,它是認知、情緒、金錢與法律邏輯的總和 。

在這個交通環境日益複雜的時代,無論你是為了生計奔波的職業駕駛,還是天天上路的通勤族,光靠保險或許已經不夠。大部分的車禍其實都是小案子,可能只是賠償 2000 元的輕微擦撞,或是責任不明的糾紛。為了這點錢,要花幾萬塊請律師打官司絕對「不划算」。但當事人往往會因為資訊落差,恐懼於「會不會被告肇逃?」、「會不會留案底?」、「賠償多少才合理?」而整夜睡不著覺 。

-----廣告,請繼續往下閱讀-----

PAMO看準了這個「焦慮商機」, 推出了一種顛覆傳統的解決方案——「年費 1200 元的訂閱制法律服務 」。

這就像是「法律界的 Netflix」或「汽車強制險」的概念。PAMO 的核心邏輯不是「代打」,而是「賦能」。不同於傳統律師收費高昂,PAMO 提倡的是「大腦武裝」,當車禍發生時,線上律師團提供策略,教你怎麼做筆錄、怎麼蒐證、怎麼判斷對方開價合不合理等。

施律師表示,他們的目標是讓客戶在面對不確定的風險時,背後有個軍師,能安心地睡個好覺 。平時保留好收入證明、發生事故時懂得不亂說話、與各方談判時掌握對應策略 。

平時保留好收入證明、發生事故時懂得不亂說話、與各方談判時掌握對應策略 。 / 圖片來源: Nano Banana

從違停的陷阱到訂閱制的解方,我們正處於交通與法律的轉型期。未來,挑戰將更加嚴峻。

-----廣告,請繼續往下閱讀-----

當 AI 與自駕車(Level 4/5)真正上路,一旦發生事故,責任主體將從「駕駛人」轉向「車廠」或「演算法系統」 。屆時,誰該負責?怎麼舉證?

但在那天來臨之前,面對馬路上的豪車、零工騎士與法律陷阱,你選擇相信運氣,還是相信策略? 先「武裝好自己的大腦」,或許才是現代駕駛人最明智的保險。

PAMO車禍線上律師官網:https://pse.is/8juv6k 

-----廣告,請繼續往下閱讀-----
文章難易度

討論功能關閉中。

0

0
0

文字

分享

0
0
0
輕鬆使用Android裝置控制樂高機器人:「說」出機器人感測器的狀態
馥林文化_96
・2013/04/22 ・2764字 ・閱讀時間約 5 分鐘 ・SR值 523 ・七年級

-----廣告,請繼續往下閱讀-----

文/曾吉弘(CAVE教育團隊

我們已經在前兩期的專欄中(2013年1月號、2013年3月號)介紹如何用Android手機上的姿態感測器來控制樂高機器人。搭配手機的感測器,您可以像玩Wii遊戲機一樣,以體感的方式來與機器人互動。本次專欄將使用App Inventor中的TextToSpeech元件(本文後簡稱TTS元件),讓手機「說」出機器人感測器的狀態(圖1)。程式執行的過程中,我們還可以即時更改感測器的類型,是很實用的功能呢!

App Inventor的TextToSpeech元件可以讓Android手機以語音方式輸出指定的文字或數值內容,本範例就是讓手機每秒播報一次感測器數值。除此之外還可指定語系與國家,預設值是eng(英語)與USA(美國),代表美式英語。您可以參考App Inventor中文學習網來改為其他歐陸語系,例如德語、法語或義大利語,會有更有趣的效果。

圖1 讓TextToSpeech元件說「hello」。

-----廣告,請繼續往下閱讀-----

請注意!目前App Inventor不支援中文等亞洲語系的語音輸出。

開始玩機器人

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

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

STEP1  登入畫面:

-----廣告,請繼續往下閱讀-----

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

圖2a 程式首次執行的畫面。 圖2b 點選連線按鈕後進入藍牙裝置清單。 圖2c 連線成功後才可選擇感測器類型。

STEP2  程式初始化:

在點選連線清單之前(ListPickerConnect的BeforePicking事件),需先將清單內容指定為Android裝置上的藍牙配對清單(圖3a)。點選之後則先測試連線是否成功,成功則將「選擇感測器」與「開始念/停止」設為可點選(圖3b)。

-----廣告,請繼續往下閱讀-----

圖3a 指定藍牙配對裝置清單。

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

STEP3 選擇感測器類型:

為了節省畫面空間,我們使用了Listpicker搭配清單來達到下拉式選單的效果。首先需要宣告一個清單,內容為(color.jpg, sound.jpg, light.jpg, ultra.jpg),就是使用的感測器圖檔名稱(圖4a)。編號index則依序由1到4。本範例就是使用這個編號來更改顯示的圖片與感測器類型。

-----廣告,請繼續往下閱讀-----

由圖4b中可看到當我們點選了要使用的感測器之後,就要把「開始念/停止」按鈕設為可點選,代表我們準備好要念出感測器數值了。另外還把這個編號所代表的項目內容顯示在畫面上,最後則將Image元件的圖片換成這個編號所代表的圖檔(select list item指令)。例如圖4a中的sensorList清單中的第3號的項目內容就是「light.jpg」。

圖4a 宣告一個陣列來存放圖檔。

圖4b 點選感測器類型之前與之後事件。

注意!List清單實際上就是一般程式語言中的陣列(array),App Inventor使用了較為親民的用語。另外n個項目的陣列其項目編號是由0到n-1,App Inventor則是1到n。

-----廣告,請繼續往下閱讀-----

STEP4  根據選擇的感測器類型來控制TTS元件播報內容:

選擇感測器類型,實際上就是在ListPicker_SensorList中點選了某個項目,接著就要根據這個項目的編號index(請注意,不是項目內容!)來決定TTS元件的播報內容。在此我們使用一個副程式say來管理程式,讓程式更簡明易懂。在say副程式中,它會藉由接收到的sensor參數(也就是傳入的編號index)來決定TTS元件的播報內容與TextBox/Label的顯示內容。請看圖5說明:

圖5 say副程式中透過使用者所點選的項目編號來決定執行內容。

STEP5  使用Clock元件來控制TTS元件:

-----廣告,請繼續往下閱讀-----

我們將Clock元件的TimerInterval設定為2000毫秒,代表每兩秒呼叫一次say副程式,並傳入剛才所點選的感測器類型編號(SelectionIndex)。這樣就能控制TTS元件的播報內容與TextBox/Label的顯示內容(圖6)。

圖6 透過點選項目的編號來呼叫say副程式。

STEP6  開始/停止播報感測器數值:

如果在尚未建立與機器人的藍牙連線之前就要TTS念些什麼的話,就會得到-1 這個討厭的數值。所以我們使用「開始念/停止」按鈕來啟動或關閉Clock元件,並將現在的播報狀態(STOPSPEAKING)顯示在手機的狀態列。您可以隨時用這個按鈕來決定停止或繼續播報資料(圖7)。

-----廣告,請繼續往下閱讀-----

圖7點選按鈕來啟動/關閉計時器。

STEP7  斷線:

按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使按鈕恢復到未連線時的狀態(圖8)。

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

操作

實際執行的時候,請先確認NXT已經開機且藍牙也啟動了,並將顏色、聲音、光與超音波感測器依序接在NXT主機的1到4號輸入端。接著在您的Android裝置上點選程式畫面中的「連線」按鈕,會進到如圖4b的藍牙清單畫面,點選您所要的NXT主機名稱並連線成功後,接著選擇感測器類型,點選之後會顯示對應的感測器圖片與名稱,如圖9所示。

圖9 連線成功後,可選擇不同的感測器,會顯示不同圖案與字樣。

最後點選旁邊的「開始念/停止」按鈕就可以聽到手機把感測器數值念出來了。以下是選擇超音波感測器時的畫面,畫面也會同時顯示數值為58(圖10)。

圖10 手機開始唸出感測器數值,並顯示在畫面上。

TTS元件是用來語音輸出的元件,它可以說出我們所指定的內容,包括文字與數字。您可以讓機器人用說的方式來呈現它的狀況,例如撞到牆壁時,可以說出「Ouch!」等趣味效果。期待您從本期專欄的內容來激盪出更多有趣的火花。請繼續關注CAVE的機器人專欄唷!

 

歡迎大家由此連結下載本程式來玩玩看,或掃描以下的QRCode也可以直接將檔案下載到手機。或到App Inventor中文教學網上直接下載本範例的App Inventor原始檔與apk安裝檔。本程式已上架Google play,請到Google Play搜尋「CAVE教育團隊」就找得到我們的樂高機器人系列app了。

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

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

-----廣告,請繼續往下閱讀-----
馥林文化_96
54 篇文章 ・ 5 位粉絲
馥林文化是由泰電電業股份有限公司於2002年成立的出版部門,有鑒於21世紀將是數位、科技、人文融合互動的世代,馥林亦出版科技機械類雜誌及相關書籍。馥林文化出版書籍http://www.fullon.com.tw/

0

0
0

文字

分享

0
0
0
輕鬆使用Android裝置控制樂高機器人:翻轉控制
馥林文化_96
・2012/12/18 ・2808字 ・閱讀時間約 5 分鐘 ・SR值 521 ・七年級

文/曾吉弘(CAVE教育團隊

本期的App Inventor機器人專欄要藉由手機的傾斜程度來控制機器人的動作。本範例使用了姿態感測器(Orientation Sensor)的X、Y軸向資訊來共同決定樂高機器人的左右馬達電力,並同時控制畫面上的CAVE小圖案移動。本範例與2012年7月號的〈單點觸控〉的概念很相似,只是訊號來源由觸控點座標改為姿態感測器變化量而已。在數學運算上用到了sin與cos等基礎三角函數,對於學生來說是個相當不錯的練習機會。

姿態感測器主要感應手機方位的變化,回傳了三個軸向的傾斜角度,分別是X軸:俯仰(Pitch)、Y軸:翻滾(Roll)與Z軸:旋轉(Azimuth,或稱Yaw)。

開始玩機器人

-----廣告,請繼續往下閱讀-----

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

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

STEP1  登入畫面:

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

-----廣告,請繼續往下閱讀-----

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

STEP2  程式初始化:

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

 圖3a  指定藍牙配對裝置清單並隱藏觸控板。

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

STEP3 變數介紹:

本範例共使用了五個整數型別變數,介紹如下:

-----廣告,請繼續往下閱讀-----
  1. count:用來切換感測器與馬達資訊是否顯示。
  2. power:取得姿態感測器的Magnitude來決定控制上的靈敏度。
  3. angle:手機傾斜方向,如為0則代表手機朝Y軸正向傾斜(pitch值增加)。
  4. LMotor:左馬達電力。
  5. RMotor:右馬達電力。

 圖4  變數介紹。

STEP4 根據姿態感測器資訊計算馬達電力:

所有的計算都是在OrientationSensor1.OrientationChanged事件中完成,只要姿態感測器任一軸向的資訊有改變就會自動呼叫本事件並執行其中內容。以下依序說明:

1.移動CAVE小圖案:使用ImageSprite.MoveTo指令,將XY欄位指定為ImageSprite.X – roll以及ImageSprite.Y – pitch,這樣當您搖晃手機時,可愛的CAVE小圖案也會在畫面上漂來漂去,相當有趣。請注意當CAVE小圖案沿著Y軸正向移動時,這時候增加的是pitch而不是roll,不要搞錯囉!

2.更新變數:

-----廣告,請繼續往下閱讀-----
  • angle = OrientationSensor.Angle – 45:取得手機傾斜角並進行偏量補償,方便馬達電力計算。
  • power = OrientationSensor.Magnitude * 200:OrientationSensor.Magnitude是一個介於0到1之間的小數,代表手機的傾斜程度,您可以調整200這個常數來放大或縮小傾斜程度對於機器人電力的影響。雖然馬達電力範圍為-100到100,但超過也沒關係,馬達電力不會因此而受影響。
  • LMotor = cosangle * power:左馬達電力
  • RMotor = sinangle * power:左馬達電力

*註:您可以堅持老派風格,也就是使用pitchroll變數值,搭配三角函數計算之後一樣能有相同的機器人控制效果。但本範例使用姿態感測器的angleMagnitude這兩項變數,也是另一種作法。

3.顯示變數於標籤上:將pitch與roll的資訊更新在Label_Orientation標籤上,並將左右馬達電力LMotor與RMotor更新在Label_Motor標籤上。為避免單一字串過長,我們使用make text指令將多個字串組合在一起,這在各程式語言中都是常見的技巧。

4.轉動馬達:最後把LMotor與RMotor變數值分別指定給NxtDrive_B與NxtDrive_C的MoveforwardIndefinitely指令就可以讓兩個馬達根據手機傾斜狀況來運動了。


 圖5  根據姿態感測器的X、Y軸向變化資訊來控制機器人。

STEP5 點選CAVE小圖案來顯示資訊:

-----廣告,請繼續往下閱讀-----

本次程式多了一個附加功能,就是點擊CAVE小圖案來顯示或關閉各樣資訊的即時更新,這是因為有的Android手機會因為這些資訊更新太過頻繁而變的卡卡的,您可以視實際狀況來決定是否要顯示這些資訊。我們在ImageSprite1.Touched點擊事件中,根據count是0或1來決定顯示或關閉訊的即時更新(圖6b)。

 圖6a  根據方位感測器值來改變小圖案指向。

 圖6b  資訊標籤關閉。

STEP6  斷線:

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

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

操作:

-----廣告,請繼續往下閱讀-----

實際執行的時候,請先確認NXT已經開機且藍牙也啟動了。接著在您的Android裝置上點選程式畫面中的「連線」按鈕,會進到藍牙清單畫面,點選NXT主機名稱連線成功後就可以搖晃手機來控制機器人了(圖8a到8c),操作方式相當直覺,您一定會喜歡的,但小心別把手機掉到地上啦。操作過程中您可以隨時點選CAVE小圖案來關閉資訊顯示。


 圖8a  手機向前傾斜,機器人前進,馬達電力為(52,49)。
 圖8b  手機向右傾斜,機器人原地右轉,馬達電力為(55,-57)。
 圖8c  兩個向左後方傾斜,機器人向左後方轉彎,馬達電力為(-37,-7)。

絕大部分的Android裝置都會有姿態感測器,許多小遊戲例如滾球或是賽車等,也都應用了姿態感測器來偵測玩家的動作。但由於姿態感測器相當靈敏,您也許需要針對本範例中一些參數進行調整來達到更好的效果。

歡迎大家由這個下載本程式來玩玩看!或掃描以下的QRCode也可以唷!更多有趣的機器人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/1月號

-----廣告,請繼續往下閱讀-----
-----廣告,請繼續往下閱讀-----
馥林文化_96
54 篇文章 ・ 5 位粉絲
馥林文化是由泰電電業股份有限公司於2002年成立的出版部門,有鑒於21世紀將是數位、科技、人文融合互動的世代,馥林亦出版科技機械類雜誌及相關書籍。馥林文化出版書籍http://www.fullon.com.tw/