2013-06-16

平面電梯 - 用NXT模擬電梯的NXT-G程式



(這篇文章的圖片因為部落格搬家而遺失,請到隨意窩分站觀看文章)
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(19)

 





對應動作

等到狀況已經決定,再使用一個單獨的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 國小組任務 課程教學的想法

1 則留言:

  1. 風之樹9:01 上午

    請問在台北nxt2與擴充套見要去那裡買?還是在美國買比較好?謝謝!
    [版主回覆07/08/2013 19:44:01]

    你好:


    目前實體玩具店好像很難找到8547,

    請美國的親戚購買也是不錯的方法,不過寄回來需要時間。

    尋找網路拍賣應該是比較快速的方法。

    回覆刪除

探奇歡迎大家留言討論!謝謝分享你的意見。