附錄一 機器車程式設計指令附錄
表一、機器車的動作指令
指令(n 為整數) 範例 說明
car.travel(n); car.travel(30); 前進 30 公分 car.travel(-n); car.travel(-50); 後退 50 公分 car.rotate(n); car.rotate(360); 逆時針轉 360 度 car.rotate(-n); car.rotate(-180); 順時針轉 180 度
car.stop(); car.stop(); 停車 表二、設定機器車馬達動力輸出指令
指令(n 為 1~7 整數) 範例 說明(數字越大動力越大)
Motor.A.setpower(n); Motor.A.setpower(5); 設定左輪動力為 5 Motor.B.setpower(n); Motor.B.setpower(1); 設定右輪動力為 1
表三、機器車的感應器指令(用來偵測外界路況)
指令 用途 說明(回傳值)
car.touch_sensor() 用來偵測是否有碰撞到物 體
true(碰到)或 false(沒 碰到)
car.light_sensor() 用來偵測路面上的顏色亮 度
0 到 100 之間的整數,亮 度越亮,數值越高
範例
1. if(car.touch_sensor()){
… {
若機器車上的觸碰感應器碰撞到物 體(回傳true),則執行…
2. if (car.light_sensor() > 42){
… {
如果機器車上的光感應器感應到的 路面亮度大於42,則執行…
3. while(!car.touch_sensor()){
… {
若機器車「沒」碰到物體,則執行…
4. while ((car.light_sensor() > 42)&&( car.light_sensor() <
52)){
… }
當機器車上的光 感應器感應的值 大於42 且小於 52,則執行…
附錄二 實體組講義示例
單元四 樂高程式設計之車子會看路
【範例四】 (檔名:Ex4)
請設計一程式,使得配備有光感應器的機器車能不斷地以逆時針方向 沿著一黑色邊橢圓軌道行走(如下面圖二十三所示) 。(光感應器起始點位 在黑線區)
圖二十三
解析:
1. 本題中,機器車要沿著黑色邊行走,就要配備「光感應器(light sensor)」 。 2. 光感應器會發出紅光打在行走的路面上,再接收路面反射值,此路面反
射值即為「亮度感應值」 ,會回傳給機器車。
3. 每個光感應器對同一顏色路面的感應結果都不同。請將檔名
「CorrectLight」的程式傳到機器車,觀察你手上這部機器車的光感應器 對不同顏色的亮度感應值。
4. 本題中牽涉到黑色與白色,以某機器車為例,黑色感應值為 42,白色感
應值為 52,情形如下頁圖二十四。
在此範圍內感應值 由42增加到52 52
最大值
42 最小值
圖二十四
5. 由於機器車走的是橢圓形軌道,而且機器車是逆時針走,因此只要車子
一超出軌道,我們就可以讓車子往左修正一點(如下圖二十五)。
6. 由於機器車一開始就是放在黑色軌道上,我們由此構思出如下圖二十六 的演算法。
圖二十五
圖二十六
7. 光感應器的函數 car.light_sensor()會傳回光感應值,因此我們要選定一個
值,來讓機器車判斷是否走出黑線。
8. 光感應值是在 42 與 52 間變換,因此我們可以選定「(42+52)/2 = 47」,
以 47 來判斷是否走出黑線。大於 47 就代表走出黑線,要往左修正;小
於 47 就代表還走在黑線上,可以繼續前進。因此可以進一步把上述的
演算法轉換成下列流程圖二十七:
car.travel(1); car.rotate(5);
car.light_sensor() > 47
true
falsetrue while
true if
else
圖二十七
9. 上述的流程圖可寫成下列程式:
/******************校正車子******************/
SmartCar car = new SmartCar(8.2f, 2.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
while (true) {
if(car.light_sensor() > 47)
{
car.rotate(5);
}
else{
car.travel(1);
} }
/******************程式結束******************/
【習題一】 (檔名:Ex4Hw1)
請設計一程式,使得機器車能不斷地以「逆時針」方向沿著一黑色不 規則軌道「外緣」行走(如圖二十八所示) 。行走過程中,若觸碰感應器被 觸碰,機器車就要停止前進。(請參考指令附錄「表三」之 3)
〈提示一〉 :機器車可走在黑色線與白色線中間的漸層地帶。
圖二十八
〈提示二〉 :
圖二十九
〈提示三〉 :
圖三十
〈提示四〉 :
圖三十一 /******************校正車子******************/
SmartCar car = new SmartCar(8.2f, 2.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
/******************程式結束******************/
【習題二】 (檔名:Ex4Hw2)
承習題一:請修改習題一程式,使得機器車能不斷地以「順時針」方 向沿著原軌道「外緣」行走。行走過程中,若觸碰感應器被觸碰,機器車 就要停止前進。
圖三十二 /******************校正車子******************/
SmartCar car = new SmartCar(8.2f, 2.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
/******************程式結束******************/
【習題三】 (檔名:Ex4Hw3)
請設計習題一程式,使得機器車能以「順時針」方向依序通過 1、2、3、
4、5 和 6 號黑色方塊(如下圖三十三) 。通過 6 號方塊後,請讓機器車停止 前進。
圖三十三 /******************校正車子******************/
SmartCar car = new SmartCar(8.2f, 2.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
/******************程式結束******************/
附錄三 模擬組講義示例
單元四 機器車程式設計之車子會看路
【範例四】 (檔名:Ex4)
請設計一程式,使得配備有光感應器的機器車能不斷地以逆時針方向 沿著一黑色邊橢圓軌道行走(如下面圖二十二所示) 。(光感應器起始點位 在黑線區)
圖二十二
解析:
1. 本題中,機器車要沿著黑色邊行走,就要配備「光感應器(light sensor)」 。 2. 光感應器會感應路面的亮度,將路面亮度值傳給機器車。
3. 在模擬軟體中,光感應器對純黑的感應值為 0,對純白的感應值為 100,
如下圖二十三所示。
圖二十三
4. 由於機器車走的是橢圓形軌道,而且機器車是逆時針走,因此只要車子
一超出軌道,我們就可以讓車子往左修正一點(如下圖二十四)。
5. 由於光感應器起始點位於黑線區,我們由此構思出如下圖二十五的演算 法。
圖二十四
圖二十五
6. 光感應器的函數 car.light_sensor()會傳回光感應值,因此我們要選定一個 值,來讓機器車判斷是否走出黑線。
7. 又光感應值是在 0 與 100 之間變換,因此我們可以選定「(0+100)/2 = 50」,以 50 來判斷是否走出黑線。大於 50 就代表走出黑線,要往左修 正;小於 50 就代表還走在黑線上,可以繼續前進。因此可以進一步把 上述的演算法轉換成下列流程圖二十六:
car.travel(1); car.rotate(5);
car.light_sensor() > 50
true
falsetrue while
true if
else
圖二十六
8. 上述的流程圖可寫成下列程式:
/******************校正車子******************/
SmartCar car = new SmartCar(18f, 9.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
while (true) {
if(car.light_sensor() > 50)
{
car.rotate(5);
}
else{
car.travel(1);
} }
/******************程式結束******************/
【習題一】 (檔名:Ex4Hw1)
請設計一程式,使得機器車能不斷地以「逆時針」方向沿著一黑色漸 層不規則軌道「外緣」行走(如圖二十七所示) 。但行走過程中,若碰撞到 紅色障礙物,機器車就要停止前進。 (請參考指令附錄「表三」之 3)
圖二十七
〈提示一〉 :機器車可走在黑色線與白色線中間的漸層地帶
圖二十八
〈提示二〉
圖二十九
〈提示三〉
圖三十
/******************校正車子******************/
SmartCar car = new SmartCar(18f, 9.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
/******************程式結束******************/
【習題二】 (檔名:Ex4Hw2)
承習題一:請修改習題一程式,使得機器車能不斷地以「順時針」方 向沿著原軌道「外緣」行走(如下圖三十一) 。但行走過程中,若碰撞到紅 色障礙物,機器車就要停止前進。
圖三十一
/******************校正車子******************/
SmartCar car = new SmartCar(18f, 9.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
/******************程式結束******************/
【習題三】 (檔名:Ex4Hw3)
請設計習題一程式,使得機器車能以「順時針」方向依序通過 1、2、3、
4、5 和 6 號藍色方塊(如下圖三十二) 。通過 6 號方塊後,請讓機器車停止 前進。 (藍色軌道的光感應值為 50)
圖三十二 /******************校正車子******************/
SmartCar car = new SmartCar(18f, 9.3f);
Thread.sleep(500);
Motor.A.setPower(3);
Motor.B.setPower(3);
/******************程式開始******************/
/******************程式結束******************/
附錄四 課堂活動觀察表
組別:______________ 單元:______________ 觀察日期:________________
※ 請儘量優缺點請都描述並舉例說明
一、教師授課情形(講解技巧、工具展示、重點掌握等)
二、學生學習情形
a. 觀念理解情形(包含工具使用的利弊)
b. 習題解題(如:哪些特別困難或完成情形)
c. 工具操作(機器車╱模擬軟體)
d. 學習氣氛(態度、興趣等)
三、學生常問的問題
四、改進建議
五、其他感想
附錄五 單元回饋表
1. 本組在本單元完成的習題有(有完成請打ˇ):
□習題一 □習題二 □習題三 2. 本組在本單元遭遇的問題有:
________________________________________________
________________________________________________
________________________________________________
3. 本組對本單元課程的建議或感想:
________________________________________________
________________________________________________
________________________________________________
附錄六 程式設計成就測驗
班級:______________ 座號:______________ 姓名______________________
(本測驗中機器車的直線進行或轉彎角度皆不會有誤差)
第一題
機器車執行下面的片段程式,車頭將會走出什麼軌跡?請將軌跡畫在右邊空格 內。
程式 軌跡
car.travel(10);
car.rotate(90);
car.travel(10);
car.rotate(-90);
car.travel(10);
car.stop( );
第二題
甲、若機器車執行下面左邊程式,車頭將會走出什麼軌跡?請將軌跡畫在右邊 空格內的虛線上。(正方形虛線邊長為5cm,兩牆之間分為 A(光感應值為 60)與 B(光感應值為 40)兩區。)
while ( !car.touch_sensor() ) {
if ( car.light_sensor() > 50 ) {
car.travel(10);
car.rotate(-90);
car.travel(10);
car.rotate(-90);
car.travel(10);
} else {
car.travel(1);
} }
car.stop();
乙、請將上述甲題程式加以修改,使得車頭可以走出如下面右圖所示粗黑線軌 跡,並將程式寫在下面左方空格。
第三題
甲、若機器車執行下面左邊程式,車頭將會走出什麼軌跡?請將軌跡劃在右邊 空格內的虛線。
程式 軌跡
int count = 0;
while ( count < 4 ) {
car.travel(20);
car.rotate(90);
count = count + 1;
}
car.stop();
乙、請將上述甲題程式加以修改,使得車頭可以走出一邊長 25 公分的「正三角 形」軌跡,並將程式寫在下方空格。(注意:一定要使用到while)
程式 軌跡
(注意:第四題為程式設計題,採「部分給分」,請各位同學儘可能填寫)
第四題
請設計一程式,使得機器車得以從起點出發,走出下圖所示之迷宮。(註:
表示機器車的起始位置與出發方向,粗黑線表示迷宮圍牆)
程式撰寫區
附錄七 實體組問卷
班級:________ 性別:______ (請各位同學用 ν 選取同意程度)
題目 非常
同意 同意 普通 不同意 非常 不同意
1. 我覺得 Eclipse 的操作環境很容易使用 □ □ □ □ □
2. 我能夠瞭解本活動中所有機器車相關的指令
(如car.travel()、car.rotate()、car.touch_sensor()等) □ □ □ □ □
3. 我能夠瞭解本活動中所有的 Java 指令
(如while、if-else、count = count + 1 等) □ □ □ □ □
4. 我能夠理解課堂中老師所舉範例的解題方法(程式架構) □ □ □ □ □
5. 我能夠理解課堂中老師所舉範例的程式碼 □ □ □ □ □
6. 給我簡單的程式碼,我可以想像出機器車可能的執行動作 □ □ □ □ □
7. 看了機器車實際執行程式後,我更能知道程式的錯誤在哪裡 □ □ □ □ □
8. 我可以自己找出程式的錯誤 □ □ □ □ □
9. 學到現在,如果題目不太難,我能夠自己想出解題的方法 □ □ □ □ □
10. 學到現在,如果題目不太難,我能夠自己寫出程式 □ □ □ □ □
11. 整體來說,我覺得範例與習題都不會很難 □ □ □ □ □
12. 我常覺得寫習題的時間不夠 □ □ □ □ □
13. 做習題時,就算已經達到老師的要求,我還是常常想要修改程
式,看看會對機器車的動作有什麼影響 □ □ □ □ □
14. 即使習題有點難,我還是嘗試著要完成程式 □ □ □ □ □
15. 看到機器車執行我寫的程式,覺得很有成就感 □ □ □ □ □
16. 我覺得這幾個星期的機器車程式設計很好玩 □ □ □ □ □
17. 我希望學習更多機器車程式設計 □ □ □ □ □
18. 我希望能進一步學習其他(不是機器車)的程式設計 □ □ □ □ □
19. 在這幾週的學習活動中,你最喜歡哪一部份?
20. 其他的感想(好、壞都可以寫)
附錄八 模擬組問卷
班級:________ 性別:______ (請各位同學用 ν 選取同意程度)
題目 非常
同意 同意 普通 不同意 非常 不同意
1. 我覺得 Eclipse 的操作環境很容易使用 □ □ □ □ □
2. 我覺得模擬軟體(LMS)的操作環境很容易使用 □ □ □ □ □
3. 我能夠瞭解本活動中所有機器車相關的指令
(如car.travel()、car.rotate()、car.touch_sensor()等) □ □ □ □ □
4. 我能夠瞭解本活動中所有的 Java 指令
(如while、if-else、count = count + 1 等) □ □ □ □ □
5. 我能夠理解課堂中老師所舉範例的解題方法(程式架構) □ □ □ □ □
6. 我能夠理解課堂中老師所舉範例的程式碼 □ □ □ □ □
7. 給我簡單的程式碼,我可以想像出機器車可能的執行動作 □ □ □ □ □
8. 看了機器車實際執行程式後,我更能知道程式的錯誤在哪裡 □ □ □ □ □
9. 我可以自己找出程式的錯誤 □ □ □ □ □
10. 學到現在,如果題目不太難,我能夠自己想出解題的方法 □ □ □ □ □
11. 學到現在,如果題目不太難,我能夠自己寫出程式 □ □ □ □ □
12. 整體來說,我覺得範例與習題都不會很難 □ □ □ □ □
13. 我常覺得寫習題的時間不夠 □ □ □ □ □
14. 做習題時,就算已經達到老師的要求,我還是常常想要修改程
式,看看會對機器車的動作有什麼影響 □ □ □ □ □
15. 即使習題有點難,我還是嘗試著要完成程式 □ □ □ □ □
16. 看到機器車執行我寫的程式,覺得很有成就感 □ □ □ □ □
17. 我覺得這幾個星期的機器車程式設計很好玩 □ □ □ □ □
18. 我希望學習更多機器車程式設計 □ □ □ □ □
19. 我希望能進一步學習其他(不是機器車)的程式設計 □ □ □ □ □
20. 在這幾週的學習活動中,你最喜歡哪一部份?
21. 其他的感想(好、壞都可以寫)