task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); //常に壁に触れている方のセンサー SetSensor(SENSOR_3,SENSOR_TOUCH); //方向転換するときに使用するセンサー OnFwd(OUT_A+OUT_C); until((SENSOR_1 == 0) && (SENSOR_3 == 0)); Off(OUT_A); while (true) { if ((SENSOR_1 == 0) && (SENSOR_3 == 0)) //どちらのセンサーも壁に触れていない場合 { Off(OUT_A); //センサーが壁に触れるまで壁に近づく OnFwd(OUT_C); until((SENSOR_1 == 1) && (SENSOR_3 == 0)); } if ((SENSOR_1 == 1) && (SENSOR_3 == 0)) //常に壁に触れている方のセンサーだけが壁に触れている場合 { OnFwd(OUT_A+OUT_C); //直進する } if ((SENSOR_1 == 1) && (SENSOR_3 == 1)) //両方のセンサーが壁に触れた場合(方向転換) { OnRev(OUT_A+OUT_C); //後ろに下がって、 Wait(70); Off(OUT_C); OnFwd(OUT_A); //方向転換 Wait(220); } } }
説明書に載っているダブルバンパーを作ってそれに高さと幅を加えただけの簡単なロボット。
このプログラムは壁に片方のセンサーが触れているときは直進し続けるように作ったため、方向転換のときに微調整が難しくて壁に突っ込んでばかりだった。少しずつ時間を調整していって、何とか完成した。
片方のセンサーが壁に当たっているときにそのまま直進するプログラムと当たったら壁からはなれて離れすぎると戻るプログラムを作った。直進する方のプログラムは方向転換する時の時間の調整が大変だったが、もう一つのプログラムよりも速く机のまわりを一周するものができた。