自作のコースで黒い線に沿って動くロボットを作成せよ。ただし、
ロボットに光センサーを取り付けることでライントレースをさせる。さらに、課題にある‘もう一台のロボットに接触した時に止まる’という問題を解決するために、タッチセンサーを使って停止させるための機構を考えた。
黒い線を挟んでいる
カーブでは片方のセンサーが反応
プログラムを作っている中で問題点が二つ出てきた。
試行錯誤した結果次のようなプログラムになった
#define THRESHOLD 40 // 閾値 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); int n; //交差点を通った回数 n = 0; //スタートする前なので交差点を通った回数は0回、この後のプログラムで交差点を通るたびに通った回数を1つずつ増やしていく while ( n < 6) { //交差点を通った回数が5回までなら繰り返す if ((SENSOR_1> THRESHOLD)&&(SENSOR_3 > THRESHOLD)){ //黒い線に触れなければ前進 OnFwd(OUT_A+OUT_C); } if ((SENSOR_1 < THRESHOLD)){ //黒い線を左の光センサーが感知したら、つまり右にコースアウトしそうなら左に曲がる Off(OUT_A); OnFwd(OUT_C); } if((SENSOR_3 < THRESHOLD)){ OnFwd(OUT_A); //黒い線を右の光センサーが感知したら、つまり左にコースアウトしそうなら右に曲がる OnRev(OUT_C); } if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)){ //黒い線を両方の光センサーが感知したら、つまり交差点まできたら一時停止後進む Off(OUT_A+OUT_C) ; Wait(150); OnFwd(OUT_A+OUT_C) ; Wait(150); n=n+1; //交差点を通った回数に1を足す } if((SENSOR_2==1 )){ //タッチセンサーが何かに触れたら後進した後前進 Rev(OUT_A+OUT_C); Wait(70); Off(OUT_A+OUT_C); Wait(150); OnFwd(OUT_A+OUT_C); } } Float(OUT_A+OUT_C); //交差点を通ったのが6回だと止まる }