篠原 正樹 松井 春樹 石田 優耶
光センサーを2つ使って黒い線を挟んでラインをトレースする。各センサーは一定の明るさを感知して右左折して進路を修正する仕組み。
また障害物(他のロボット)に当たったときは、一旦進行を停止し、バックしてから右折し、その後前進してから左折で進路に戻る。
モーターは左右のタイヤに使用し計2つ。ロボット本体が直進、右折、左折、バック等をしやすいように左のタイヤと右のタイヤでモーターを分けた。 光センサーは少し間隔を空けて2つ設置。その2つのセンサーで黒い線を挟み、左右の光センサーが度数40以下を感知したときを条件に何か動作が起こるようにする。 タッチセンサーは前方に1つ設置。障害物に当たったときに条件が作動するようにする。
task main() { SetPower(OUT_A,1); //*誤差を減らすためモーターの力を弱く*/ SetPower(OUT_C,1); SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーに設定 SetSensor(SENSOR_2,SENSOR_TOUCH);//タッチセンサーに設定 SetSensor(SENSOR_3,SENSOR_LIGHT);//光センサーに設定 while(true){ if((SENSOR_1>40)&&(SENSOR_3>40)) { OnFwd(OUT_A+OUT_C); //*どちらのセンサーとも何も書かれていなければ前進*/ } if(SENSOR_3<40) { OnFwd(OUT_A); OnRev(OUT_C);//*センサー3が黒い線に触れたら右に回転*/ } if(SENSOR_1<40) { OnFwd(OUT_C); OnRev(OUT_A);//*センサー1が黒い線に触れたら左に回転*/ } if((SENSOR_1<40)&&(SENSOR_3<40)) { Off(OUT_A+OUT_C);Wait(30); //*どちらのセンサーも黒い線に触れたら少し前進の後、右に回転*/ OnFwd(OUT_A+OUT_C);Wait(4); OnFwd(OUT_A);OnRev(OUT_C);Wait(40); } if(SENSOR_2==1) { SetPower(OUT_A,7); //*タッチセンサーに触れたら右に旋回*/ SetPower(OUT_C,7); Off(OUT_A+OUT_C);Wait(10); OnRev(OUT_A+OUT_C);Wait(200); OnFwd(OUT_A);OnRev(OUT_C);Wait(364/4); SetPower(OUT_C,7); OnFwd(OUT_A+OUT_C);Wait(150); OnFwd(OUT_C);OnRev(OUT_A);Wait(364/4); OnFwd(OUT_A+OUT_C);Wait(150); OnFwd(OUT_C);OnRev(OUT_A);Wait(364/5); OnFwd(OUT_A+OUT_C); } } }
#define A 40 //*黒の線と何も書かれていない場所の区別の値を定義する*/ task main() { SetPower(OUT_A,4);//*確実性を出すため力を弱く*/ SetPower(OUT_C,4);//*上と同じ*/ SetSensor(SENSOR_1,SENSOR_LIGHT);//*センサー1を光センサーに*/ SetSensor(SENSOR_2,SENSOR_TOUCH);//*センサー2をタッチセンサーに*/ SetSensor(SENSOR_3,SENSOR_LIGHT);//*センサー3を光センサーに*/ while(true){ if((SENSOR_1>A)&&(SENSOR_3>A)) { OnFwd(OUT_A+OUT_C);//*どちらとも書かれていない場所だと前進*/ } if(SENSOR_3<A) { OnFwd(OUT_A); OnRev(OUT_C);//*センサー3が黒い線の上に行くと時計回りに回転*/ } if(SENSOR_1<A) { OnFwd(OUT_C); OnRev(OUT_A);//*センサー1が黒い線の上に行くと逆時計回りに回転*/ } if((SENSOR_1<A)&&(SENSOR_3<A)) { Off(OUT_A+OUT_C);Wait(30);//*どちらも黒い線の上に行くと少し前進した後時計回りに回転*/ OnFwd(OUT_A+OUT_C);Wait(4); OnFwd(OUT_A);OnRev(OUT_C);Wait(40); } if(SENSOR_2==1) { SetPower(OUT_A,7); SetPower(OUT_C,7); Off(OUT_A+OUT_C);Wait(10);//*タッチセンサーが反応したら少し後ろに下がり180度回転*/ OnRev(OUT_A+OUT_C);Wait(100); OnFwd(OUT_A);OnRev(OUT_C);Wait(364/2); OnFwd(OUT_A+OUT_C); } } }