- 追加された行はこの色です。
- 削除された行はこの色です。
[[2010a]]
*目次 [#r61547b2]
#contents
*課題3の内容 [#v95515a7]
黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成する。ただし1は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにする。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。
1、全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げる。
1、全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げる。ヒデ担当
2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。Ta2担当
*メンバー [#h24ebdbc]
-ヒデ
-タツ
-Ta2
*ロボット [#b662ce62]
#ref(./F1000183.jpg,around,right)
#ref(./F1000184.jpg,around,left)
LEFT:←前から
RIGHT:側面→
LEFT:←前から&br; 左右の光センサが、ちゃんと機能するように、間に敷居を作りました。
RIGHT:左側面→
#clear
&br;
#ref(./F10001855.jpg,around,right)
#ref(./F10001866.jpg,around,left)
LEFT:←後ろから
RIGHT:側面→
LEFT:←後ろから&br; コードが邪魔で、どけるのに苦労しました。
RIGHT:右側面→&br; アンバランスに見えますが、ちゃんとバランスは取れています。
#clear
**投擲機能の説明 [#j1ea737f]
#ref(./F1000187.jpg,around,left)
←ここが一番苦労した投擲部分です。振動によってくずれてしまい、四方から支える組み立て方をした。
#clear
**工夫した点 [#dfa5d585]
うまく飛ばすように発射する部分を斜めにして、固定したこと。
**苦労した点 [#q1023dd0]
ホイールが前に飛ばず上に飛び出してしまうので、本体の形をかえるように考えること。
*プログラム [#m0575cc2]
**ヒデのプログラム [#zf56536d]
#define TURN_TIME 350 //1周するのにかかる時間
task main()
{
int light_max=0; //光センサーの最大値
int t_max=0; //センサーが最大値の時刻
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー
ClearTimer(0); //タイマー動作
OnFwd(OUT_A); //右回りに回転
while ( Timer(0)<TURN_TIME){ //繰り返し
if(SENSOR_1>light_max){ //センサー1がより強い光を感知したら
light_max=SENSOR_1; //最大値を現在の値に
t_max=Timer(0); //現在の値を最大値の時刻に
}
}
Off(OUT_A);
Wait(50);
OnFwd(OUT_A); //右回りに回転
Wait(t_max);
Off(OUT_A);
OnRev(OUT_C); //ブロックを投げる
Wait(20);
Off(OUT_C);
}
**タツのプログラム [#cce8e4b2]
**Ta2のプログラム [#cce8e4b2]
#define light 40 //閾値
#define lightest 75 //懐中電灯距離30cmぐらい。
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while((SENSOR_1 < light) || (SENSOR_3 < light)) {
if ((SENSOR_1 > light) && (SENSOR_3 < light)) //懐中電灯が、マシンの左側にある時
{
Off(OUT_A+OUT_C); Wait(50);
OnRev(OUT_A); OnFwd(OUT_C);
}
if ((SENSOR_1 < light) && (SENSOR_3 > light)) //懐中電灯が、マシンの右側にある時
{
Off(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C);
}
if ((SENSOR_1 < light) && (SENSOR_3 < light)) //懐中電灯が見当たらないとき
{
Off(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C); OnRev(OUT_A);
}
Off(OUT_A+OUT_C);
Wait(100);
Wait(500); //懐中電灯が止まったことを確認するための待ち時間
}
while((SENSOR_1 <= lightest) && (SENSOR_3 <= lightest)) { //懐中電灯までの距離30cmまで近づく
while((SENSOR_1 <= lightest) && (SENSOR_3 <= lightest)) { //懐中電灯までの距離30cmまで近づく(光の強さで距離を考える)
OnFwd(OUT_A+OUT_C);
}
Off(OUT_A+OUT_C);
OnFwd(OUT_B); //ブロックを投げる
Wait(60);
Off(OUT_B);
}
***工夫した点 [#zf3d1a2d]
プログラムが複雑になってきたので、どこにどのプログラムをいれればどう動くのか何回も試すのが苦労した。
時間を調整するときに工夫をした。
***感想 [#lfcc46db]
課題3だけあって一層難しいと感じた、ぎりぎりまで考えたので時間がかかってしまったが、できてよかった。
*コメントお願いします。 [#i88f4391]
- 一人目のプログラムは、ちゃんと最大値を探していますが、二番目に明るい方向も探す必要があります。二人目のプログラムは、読めばなんとなくわかりますが、懐中電灯の停止やそれまで30cmを光センサやタイマーでどう定義するかはっきりと書いてください。 -- [[FI]] &new{2010-07-31 (土) 09:50:46};
- ロボットの説明についても、苦労した点をもう少し詳しく説明すると良いと思います -- [[TAKA]] &new{2010-08-08 (日) 12:38:12};
#comment