- 追加された行はこの色です。
- 削除された行はこの色です。
[[2009a/A2/課題3左]]
*目次 [#g62be8b8]
#contents
**課題3 [#ya7b973f]
~1.全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げるロボットを製作する。
~2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げるロボットを製作する。
**ロボットの製作・説明 [#t82dca62]
~説明書を参考にしつつ駆動部を本体後方に寄せた。
#ref(SH350091.JPG)
#ref(SH350092.JPG)
~前方には投てき用のモーターを本体下部に配置した。
#ref(SH350090.JPG)
~投てき用のアームは長めに作り、ブロックを装填する部分では上下から挟みこむ形にした。
#ref(arm.JPG)
**プログラムの製作・説明 [#l812019b]
***プログラム1 (T.I) [#fbd1bf89]
#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);
} //終わり
***プログラム2(naoto) [#u6da4a49]
#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);
} //終了
**感想・反省 [#w3c891c0]
~明るさ最大の方向を見つけてその方向を向かせるのは簡単だったが、投げてもあまり飛ばないのが欠点。ギヤ比やアームの長さを調整してみてもなかなか上手くいかなかった。
(T.I)
~懐中電灯を追いかけるプログラムを作るのが難しかった。細かく調整したので、なかなか良いものができた。(naoto)
**コメント欄 [#yd147a56]
ご自由にお書きください。
- 更新しました -- [[T.I]] &new{2009-07-23 (木) 15:58:37};
- 一つしかプログラムがありませんが、もう一人は来なくなったのでしょうか?来ないならしょうがないと思います -- [[FI]] &new{2009-08-05 (水) 07:42:11};
- 更新しました。 -- [[naoto]] &new{2009-08-08 (土) 16:36:14};
- T.Iさんのプログラムに気になる点がいくつかあります。FastTaimer(綴りミス?)とか、最大値として保存したl_mをその後使用しない点とか…「until(SENSOR_1); //明るさ最大の方向まで再度旋回」これで本当に懐中電灯の方へ向いてくれたのでしょうか…? -- [[こさか]] &new{2009-08-09 (日) 22:05:54};
#comment