1.全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げるロボットを製作する。
2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げるロボットを製作する。
説明書を参考にしつつ駆動部を本体後方に寄せた。
前方には投てき用のモーターを本体下部に配置した。
投てき用のアームは長めに作り、ブロックを装填する部分では上下から挟みこむ形にした。
#defineT_T 500 //最初の旋回時間 task main { int l_m=0; //光センサーの最大値に0を代入 SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサー SetPower(OUT_C,5); //投てき用モーター出力5 ClearTimer(0); //タイマーリセット while(FastTaimer(0)<T_T) // 最も明るい方向を検索 { if(SENSOR_1>l_m){ //センサー1>光センサーの最大値のとき OnFwd(OUT_A); l_m=SENSOR_1; //最大値を更新 } else{ OnFwd(OUT_A); //その他の場合何もしない } } OnRev(OUT_A); //1周したら until(SENSOR_1); //明るさ最大の方向まで再度旋回 Off(OUT_A); //停止 OnFwd(OUT_C); //投げる Wait(25); Off(OUT_C); } //終わり
#define THRESHOLD 35 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3も光センサーに SetPower(OUT_C,5); //ブロックを投げるモーターを出力5に while( (SENSOR_1 < THRESHOLD)||(SENSOR_3 < THRESHOLD) ) { // 2つのセンサーがともに一定以上の明るさを感知するまで繰り返す if(SENSOR_1 > SENSOR_2) { OnFwd(OUT_A); } else { OnRev(OUT_A); } // 明るい方向へ進む } Off(OUT_A); //その場で停止 OnRev(OUT_C); //投げる Wait(25); Off(OUT_C); } //終了
明るさ最大の方向を見つけてその方向を向かせるのは簡単だったが、投げてもあまり飛ばないのが欠点。ギヤ比やアームの長さを調整してみてもなかなか上手くいかなかった。 (T.I)
懐中電灯を追いかけるプログラムを作るのが難しかった。細かく調整したので、なかなか良いものができた。(naoto)
ご自由にお書きください。