IR sensor 的作用是尋找前方有沒有障礙物。Sumo Robot加入IR sensor後可以檢測前方有沒有對手的機體或者障礙物。
而IR sensor 亦可以透過調節下方的藍色可調電阻調整其靈敏度。IR sensor即使沒有上傳programe也可以透過sensor上的LED表示有沒有檢測障礙物故應先連接Arduino測示Sensor有沒有壞了或接錯綫
可以把IR Sensor接在Motor Sheild的右下方、A0~A5的腳位。
注意Sensor的:
VCC腳接在Motor Sheild的紅色橫行 (5V正極)
GND腳接在Motor Sheild的黑色橫行 (負極)
OUT腳接在Motor Sheild的藍色橫行 (A0~A5腳位)
如上方連接正確,即使沒有上傳programe,sensor也會有反應:
沒有障礙物時的訊號=> 1 (亮燈)
有障礙物時=> 0 (關燈)
如果Sensor是長亮燈或是常關燈,先參考右方的影片調整靈敏度,如果情況還是沒有改善,則請更換sensor。
示範如何調節靈敏度
由於IR sensor和4.1A章的對地sensor基本做法一樣,所以直接以4.1A章的程式進行加工就可以一次過測試(包括Edge sensor)全部Sensor。當然你也可以只打紅框的部份,只測試IR sensor。
完成上傳後可以打開Serial Monitor查看結果
完成IR sensor的連接後,我們就可以測試Sumo Robot能否以IR sensor找到物件
往後的測試,均只需在lv1b的程式loop內、結尾的部份(紅箭咀位置)加上新的程式就可以進行測試了。
先設定4個情況測試:
只有左邊的IR sensor檢測到物件、而另外兩隻沒有的情況下(011),緩慢地轉向左方
只有中間的IR sensor檢測到物件、而另外兩隻沒有的情況下(101),快速地沖向前方
只有右邊的IR sensor檢測到物件、而另外兩隻沒有的情況下(110),緩慢地轉向右方
三隻IR sensor均沒有檢測到物件的情況下(111),均速地轉向左方
完成上傳後可以試試在Sumo Robot附近放置物件看看Sumo Robot能否檢測到並撞上去。
完成上面的lv2後,可以試試看加入001,010,100,000等情況的if指令、並把各個情況下車子要做的動作填到工作紙上。
完成IR sensor的追蹤功能後,我們可以把以上的程式和4.1的防止出界程序結合、基本就完成Sumo robot的編程了!
可以先根據賽規思考一下,Sumo robot應該優先防止出界?還是優先追蹤物件?
以下以優先防止出界為例子﹐示範如何把2段程式結合。
由
if (Es_L == 0 || Es_R == 0){ //只要有其中一隻對地sensor出界(==0),就執行下方黃色底的指令:
if(Es_L == 0 && Es_R == 0){motor_drive(-255,-255);delay(500);motor_drive(-100,0);delay(500);}
if(Es_L == 1 && Es_R == 0){motor_drive(-255,-255);delay(500);motor_drive(-100,0);delay(500);}
if(Es_L == 0 && Es_R == 1){motor_drive(-255,-255);delay(500);motor_drive(0,-100);delay(500);}
//if(Es_L == 1 && Es_R == 1){motor_drive(100,100);
}else{ //如果沒有對地sensor出界(==1),就執行下方紅色底的指令:
if(IRs_L == 0 && IRs_F == 1 && IRs_R == 1){motor_drive(-40,0);} //detect object at left, turn left slowly
if(IRs_L == 1 && IRs_F == 0 && IRs_R == 1){motor_drive(255,255);} //detect object in front of you, rush
if(IRs_L == 1 && IRs_F == 1 && IRs_R == 0){motor_drive(40,0);} //detect object at right, turn right slowly
...
...
}
別忘了完成工作紙上的填空: