#contents
*今回の課題 [#ta8d70dc]
ロボットを旋回させて半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作する。
*ロボットの説明 [#m3062697]
今回使ったロボットのほとんどの構造は課題2のロボットと同じなので詳しい構造は下記URLを参照
http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMember%2Ftsuyoshi%2FMission2#ga88d64c
また、変更した点はセンサーを本体に前向きに取り付けたこととそのセンサーができるだけ正面からの光だけを感知できるように周りをブロックで囲ったこと、ボールがまっすぐ転がるようにレールを取り付けたことである。
&ref(1437988994999.jpg,,25%);
&ref(1437988996282.jpg,,25%);
&ref(1437988997602.jpg,,25%);
(写真は右から今回使ったロボットの全体の写真、センサーの周辺の写真、レールの写真)
*プログラムの説明 [#a4149396]
#define short_break Off(OUT_AC);Wait(100);
#define clip_on OnRev(OUT_B);Wait(10);Off(OUT_B);
task main ()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0); //0番目のタイマーをリセット
ClearTimer(1); //1番目のタイマーをリセット
int light_max; //整数型の変数を宣言
light_max = 0; //仮の最大値
int time_max; //整数型の変数を宣言
time_max = 0; //仮の最大値を与える時間
int run_time; //整数型の変数を宣言
run_time = 280; //1周するのにかかる時間
OnFwd(OUT_A);OnRev(OUT_C); //反時計回りに回転
while(FastTimer(0)<run_time) //1回転するまで
{
if(SENSOR_2>light_max) //light_maxの値を超えたら
{
light_max = SENSOR_2; //light_maxを塗り替える
ClearTimer(1);
}
}
time_max = FastTimer(1);
short_break; //1周したら1秒待機
OnRev(OUT_A);OnFwd(OUT_C);
Wait(time_max); //懐中電灯の方向を向く
short_break;
OnFwd(OUT_AC);Wait(50);clip_on;Wait(10); //シュート
Off(OUT_AC);
}
**定義した関数 [#jda6647a]
#define short_break Off(OUT_AC);Wait(100);
#define clip_on OnRev(OUT_B);Wait(10);Off(OUT_B);
[解説]
モーターACを1秒間停止させる
シュート
**定義づけ [#yf00486e]
task main ()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0); //0番目のタイマーをリセット ��
ClearTimer(1); //1番目のタイマーをリセット ��
int light_max; //整数型の変数を宣言
light_max = 0; //仮の最大値
int time_max; //整数型の変数を宣言
time_max = 0; //仮の最大値から停止までの時間
int run_time; //整数型の変数を宣言
run_time = 280; //1周するのにかかる時間
[解説]
�\�回を始めてから280秒経つまでの時間を計る。
�∈蚤臙佑鮓�つけてから停止するまでの時間を計る。
**動作 [#b125a898]
OnFwd(OUT_A);OnRev(OUT_C); //反時計回りに回転
while(FastTimer(0)<run_time) //1回転するまで ��
{
if(SENSOR_2>light_max) //light_maxの値を超えたら
{
light_max = SENSOR_2; //light_maxを塗り替える ��
ClearTimer(1);
}
}
time_max = FastTimer(1);
short_break; //1周したら1秒待機
OnRev(OUT_A);OnFwd(OUT_C); //時計回りに旋回
Wait(time_max); //懐中電灯の方向を向く ��
short_break;
OnFwd(OUT_AC);Wait(50);clip_on;Wait(10); //シュート ��
Off(OUT_AC);
}
[解説]
��360°反時計回りに旋回して全方位の値を記億する。
��light_maxよりも大きな値を見つけたらその値を最大値として記憶する。
��time_maxの時間だけ時計回りに旋回する。
�ぅ轡紂璽箸垢襦�
*実際の動画 [#dff3a0d7]
*感想 [#qbcdefe7]
今回は前回のロボットを使いまわせる、課題がそもそも重くない、早めに取り組めた、などでスムーズに進んだ。また、先生の説明を聞いていればほとんど困らなかった。この調子でロボコンも成功させたい。