(這篇文章的圖片因為部落格搬家而遺失,請到隨意窩分站觀看文章)
http://blog.xuite.net/touch_classroom/twblog/116580876
平面電梯 - 用NXT模擬電梯的NXT-G程式
2013 探奇教室,這個課程是為了學習分區移動的概念。
電梯系統
探奇很早就想利用NXT樂高機器人製作電梯模型,但是因為一台NXT主機只能控制三顆馬達及最多四顆感應器,不能完整作出電梯的所有動作,只好分段進行。
電梯系統可以分為車廂,車廂通道以及各樓層的閘門,每個部分都有自己的機構及電控模組。我們首先從車廂開始思考,車廂中也有各種不同的控制,例如車廂門的開閉,除了馬達移動車廂門,也需要有感應器偵測車廂門是否關閉完全。又如車廂中的照明及風扇,長時間的待機狀態下可以自動暫停運轉主。
平面電梯
網路上有許多樂高做成的電梯模型,不論是使用繩子拉動,還是齒輪齒條的組合,似乎都需要很多積木才能完成,既然沒有時間及足夠的積木完成創作,那麼就在地板貼出三條黑線,玩玩「平面電梯」,讓機器人在三條黑線中任意來回移動,應該也是很有趣的挑戰。
樓層選擇按鍵
整個車廂中對乘客最重要的就是「樓層選擇按鍵」。當乘客進入車廂後,會按下想抵達的樓層,電梯系統需要根據目前所在的樓層判斷電梯車廂需要上升還是下降?電梯車廂進行多少樓層的移動。
這聽起來好像很單純,事實上有點複雜。古人說:登高必自卑,我們先從基本開始,等到研究出一些結果,就可以擴充樓層數目。先將樓高設定為三層樓,依照目前電梯所在的樓層,當乘客進入電梯車廂後,按下想要到達的樓層,電梯的對應動作有多少種可能的組合呢?列表是一種最直接的解決方法:
電梯狀況組合表
目前電梯所在樓層
Now
|
乘客想要去的樓層
Key
|
電梯需要的動作
Res
| |
1
|
1樓
|
1樓
|
不用動
|
2
|
1樓
|
2樓
|
向上1樓
|
3
|
1樓
|
3樓
|
向上2樓
|
4
|
2樓
|
1樓
|
向下1樓
|
5
|
2樓
|
2樓
|
不用動
|
6
|
2樓
|
3樓
|
向上1樓
|
7
|
3樓
|
1樓
|
向下2樓
|
8
|
3樓
|
2樓
|
向下1樓
|
9
|
3樓
|
3樓
|
不用動
|
從上面的表格分析,三個樓層,總共有九種組合,小朋友可以直接將9種組合完全寫出來,程式就依照這就種組合進行判斷,例如:
如果電梯目前在1樓,乘客按下2樓,車廂就向上1層。
或者是這種狀況,如果電梯目前在3樓,乘客按下1樓,車廂就向下2層。
程式構想
平面電梯的程式分為幾個部分:1 接受按鍵,2 狀況決定,3 對應動作,4 更新現況。
接受按鍵
以NXT主機上的三個按鍵代表樓層按鈕,向左鍵是1樓,橘色鍵是2樓,向右鍵是3樓。除了NX主機的按鍵,也可以使用三個觸碰感應器代表樓層。或是使用其他感應器也更有趣喔!
在NXT-G中,只有Wait for Sensor能夠判別感應器的狀況,如果需要同時判別多個感應器,可以使用多個Switch Block 或是利用多工程式的寫法。
這裡先以多個Switch Block處理「接受按鍵」,順便也定義一些必要的變數,變數Key:代表乘客的按鍵;變數Now:表示現在樓層;變數Flag:表示是否已經按鍵;變數Res:狀況決定結果。
下圖是「接受按鍵」的程式,在迴圈中,不斷以Switch Block判別各個按鍵狀況,並且將按鍵結果儲存在變數Key,當按鍵按下時,同時也將變數Flag設定為真值,使程式跳出迴圈,進行後續動作。
狀況決定
「狀況決定」就是對照電梯狀況組合表,決定電梯需要的對應動作。這部分當然也是使用多個Switch Block 完成多種If Then情形。不過這裡先將結果儲存到變數Res,而不是將對應動作寫在這裡。原因是當NXT-G程式的動作太過複雜或是命令方塊太多時,很容易造成NXT-G軟體當機。將程式分成兩部分完成,除了減少軟體當機的風險外,程式也比較容易理解。
程式中第一個Switch Block以變數Now作判別,接著以變數Key作判別,總共有9種可能的情況。結果儲存到變數Res(1到9)。
對應動作
等到狀況已經決定,再使用一個單獨的Switch Block執行電梯的對應動作,例如向上一層,向下兩層,或是不動(發出警告聲)。
更新現況
電梯已經根據對應的動作進行移動,變數Now當然也要更新現況,所以程式的最後一部份需要將變數Key的數值存放在變數Now,也就是Now = Key。
電梯模式數學方式處理
上面的程式很直覺,也很直接地將所有情況列出來。
為了因應各種狀況的發生,當然要將所有組合寫出來,雖然可以寫出來,但是9種狀況還是多了一些,有沒有可能簡化呢?觀察下面的表格,實際上電梯需要的動作只有五種,將乘客想去的樓層減去目前的樓層,剛好得到一些數字。
目前電梯所在樓層
Now
|
乘客想要去的樓層
Key
|
電梯需要的動作
Res = Key – Now
| |
1
|
1樓
|
1樓
|
1-1=0 不用動
|
2
|
1樓
|
2樓
|
2-1=+1 上升1樓
|
3
|
1樓
|
3樓
|
3-1=+2 上升2樓
|
4
|
2樓
|
1樓
|
1-2=-1 下降1樓
|
5
|
2樓
|
2樓
|
2-2=0 不用動
|
6
|
2樓
|
3樓
|
3-2=+1 上升1樓
|
7
|
3樓
|
1樓
|
1-3=-2 下降2樓
|
8
|
3樓
|
2樓
|
2-3=-1 下降1樓
|
9
|
3樓
|
3樓
|
3-3=0 不用動
|
這五種情況分別是:下降2樓(-2),下降1樓(-1),不動(0),上升1樓(+1),上升2樓(+2)。
正負符號對應上升或下降,數字對應樓層數目。數學還真是好用啊!
(這裡要說明一下,因為負數是上了國中才學習的,國小學生不一定全部都有負數的概念,所以有必要以加減的想法對國小學童說明負數的符號意義,就是「不夠,不足」。在這個題目,正負符號恰好是上升或下降的意思。)
改寫「狀況決定」部分的程式,變得超級簡單,就是將Key減掉 Now,得到Res的狀況數字。還可以直接連線到「對應動作」的Switch Block。
同時對應動作的Switch Block也由9個選項減少至5個選項,大大減輕選項的管理負擔。
完成了三條黑線的平面電梯任務,還可以挑戰擴充更多的電梯樓層,試試看,是不是很輕鬆就能完成呢?
對應到WRO比賽
看到平面電梯的三條黑線,似乎跟2013 WRO國小組比賽色瓶分類區域的三條黑線很類似,其實只要將紅藍綠顏色對應到123的數字,就能將彩色感應器所感應到的色瓶(色塊)顏色,與機器人目前所在區域的顏色,一起判別,如此機器人就能走到對應的顏色區域,接著將色塊射出,就能完成任務。請大家參考看看!
探奇舊文章延伸閱讀:
2013 WRO 國小組比賽題目訓練教案
2013 WRO 國小組任務 課程教學的想法
請問在台北nxt2與擴充套見要去那裡買?還是在美國買比較好?謝謝!
回覆刪除[版主回覆07/08/2013 19:44:01]
你好:
目前實體玩具店好像很難找到8547,
請美國的親戚購買也是不錯的方法,不過寄回來需要時間。
尋找網路拍賣應該是比較快速的方法。