1、止まっている懐中電灯を全方向から探し出してそこにブロックを投げる。(DAN)
2、動く電灯を追いかけてブロックを投げる。(だる)
モーター1つで左右の回転が出来ます。
右回転と左回転を繰り返すことによて前進可能。
30cm の所までブロックを投げるために腕は長めに作りました。
二つの光センサーの間には遮光版を付け、電灯の光が左右どちらから来ているのか
判断しやすくしました。
int brightmax ;int runover ; task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetPower(OUT_A,7); brightmax=SENSOR_1;ClearTimer(0+1);OnFwd(OUT_A); until(Timer(1)==70) //1回転するまで {if(SENSOR_1>brightmax){brightmax=SENSOR_1;ClearTimer(0);}} //1番明るかった時の時間を記録して、 runover=Timer(0);ClearTimer(1); until(Timer(1)>=(runover+10)){OnRev(OUT_A);} Off(OUT_A);Wait(30); //その時間だけ逆回転して、向き直る until((SENSOR_1>48)&&(SENSOR_3>48)) {if(SENSOR_1>SENSOR_3){OnFwd(OUT_A);Wait(20);} else{OnRev(OUT_A);Wait(20);}} //近づく until(SENSOR_1==SENSOR_3){ if(SENSOR_1>SENSOR_3){OnFwd(OUT_A);} if(SENSOR_3>SENSOR_1){OnRev(OUT_A);}} //狙いを定める Off(OUT_A);OnRev(OUT_B);Wait(10);Off(OUT_B);} //腕を0.1秒間振ることによってブロックを投げる
#define T 35 //明るさの基準を35に設定 #define rst OnRev(OUT_A);Wait(100);Off(OUT_A); //右に少し回転 #define lst OnFwd(OUT_A);Wait(100);Off(OUT_A); //左に少し回転
task main (){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(SENSOR_3<=57){ //明るさが57以下の時に以下の操作を繰り返す
if (SENSOR_1<T){ //左右のセンサーがライトを知覚していないときは、右回転してライトを探す if (SENSOR_3<T){ lst}
else { //右のセンサーのみがライトを知覚しているときは右回転 rst}} else { //左右のセンサーがライトを知覚しているときは左回転 if (SENSOR_3<T){ lst}
else { //左のセンサーのみが光を知覚しているときは右回転 lst }}} //繰り返し終了 OnRev(OUT_B); アームを回転させて懐中電灯にブロックを投げる Wait(10); Off(OUT_B); }
(DAN):駆動系はヒントを参考にしながら作ったが、頑丈な構造にすることがなかなか難しかった。ロボットを動かす場所(机の上、床の上など)によって周りの明るさが変化してしまい、プログラムの組み立てではそこが苦労した。また、このプログラムだと、最初に1回転するのに時間が掛かってしまうので、もう少しスマートな動きをさせることが出来ればよかったと思う。(まず左右どちらがより明るいか判断する、など)
(だる):懐中電灯が小さかったので当てるプログラムを作るのに苦労しましたが、ライントレースのプログラムを応用したので比較的簡単にできました。
感想をよろしくお願いします。