[[2009a]] *光に向かってブロックを投げるロボット [#g16c74c9] **課題 [#kd5c47bc] 1、止まっている懐中電灯を全方向から探し出してそこにブロックを投げる。(DAN)&br; 2、動く電灯を追いかけてブロックを投げる。(だる) *ロボット [#bc0e9bfb] &ref(reverse.jpeg); モーター1つで左右の回転が出来ます。 &ref(arm.jpeg); ブロックを投げる腕は長めに作りました。 二つの光センサーの間には遮光版を付け、電灯の光が左右どちらから来ているのか 判断しやすくしました。 &ref(all.jpeg); **1、のプログラム [#wf1f41e2] 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秒間振ることによってブロックを投げる **2、のプログラム [#mcb91f8f] #define T 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){ 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); } *感想 [#sd263d9c] (DAN):駆動系はヒントを参考にしながら作ったが、頑丈な構造にすることがなかなか難しかった。ロボットを動かす場所(机の上、床の上など)によって周りの明るさが変化してしまい、プログラムの組み立てではそこが苦労した。また、このプログラムだと、最初に1回転するのに時間が掛かってしまうので、もう少しスマートな動きをさせることが出来ればよかったと思う。(まず左右どちらがより明るいか判断する、など) *コメント [#xa57f986] 感想をよろしくお願いします。 #comment