#contents
* 課題3 [#q4027fc6]
** 課題内容 [#r0efe86a]
*** 半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作しなさい。 ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。 [#pf7e13b4]
**ロボット本体の説明 [#y4ac005e]
***基本的なロボットの構造は変わらないが光センサーを前方の光を感知するように設置するとともに、左右のブロックによって、より光センサーの強度が増し、また正確な値が測れるようにした。 [#jefc6fb3]
#ref(image2.JPG)
***また、光センサーを前方に設置したために前方に設置していたボールを発射する機構が光センサーの探知を妨害するようになってしまった。そこでボールを発射する機構を少し上方へ設置する事によって光センサーへの妨害を阻止した。 [#c5b9e413]
#ref(ボールによる入射妨害.JPG)
***さらに、光センサーの回りに何も設置しなかった場合、光センサーの精度に問題がある場合があるので、あえて光センサーの回りにブロックによる壁を設置した。これによって光センサーが回りの光を感知しなくなるために、光センサーの精度がより増した。 [#ie2f2d2f]
#ref(光の入射制限.JPG)
** プログラミングの手順 [#sd4db80b]
*** ロボットを回転させて、前方に取り付けた光センサーにより光の値を計測→光の値の中で最大値を計測→光の値の最大値の場所を特定し、ボールを放出する。 [#m3606c66]
**プログラミング [#l4225e9c]
#define zensin(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);
#define ageru(t) OnRev(OUT_B);Wait(t);Off(OUT_B);
task main ()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
int turntime = 300; //360度回転するための時間
int lightmax = 5; //
int timemax; //
ClearTimer(0); // タイマーのリセット
SetPower(OUT_AC,1); // 観測時のタイヤの回転の速さによる変化を抑えるための準備
OnFwd(OUT_A);OnRev(OUT_C); //回転
while(FastTimer(0) < turntime) // 観測中の最大値を求めるための条件式
{
if(SENSOR_2 > lightmax)
{
lightmax = SENSOR_2;
timemax = FastTimer(0);
}
}
Off(OUT_AC); // 回転終了
SetPower(OUT_AC,1); // 観測時に読み取った光の最大値のある場所への移動
OnFwd(OUT_C);OnRev(OUT_A);
Wait(turntime - timemax);
Off(OUT_AC);
}
ageru(25); // アームを上げる
zensin(80); // 前進
}