[[2008b/MemberOnly/進行状況A]] *目次 [#p14a0371] #contents *課題3:懐中電灯に向かってブロックを投げるロボット †[#l9f49ea1] **1課題の概要 [#laef7acc] ~インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること) ~1:全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。 ~2:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。 **2ロボット本体の制作過程 [#rcc5b998] ***ディファレンシャル・ギアについて [#b06a3ad2] ***光センサー部分について [#dd15e398] **3ロボット本体の完成 [#wd6ff4c6] 完成したロボット ~正面~ #ref(090108_1721~01.jpg) ~真上から~ #ref(090108_1719~01.jpg) ~真下から~ #ref(090108_1720~01.jpg) ***ロボットの感想 [#x6a8730d] ~【工夫した点】 ~機体をコンパクトにしたところ。 ~【苦労した点】 ~ディファレンシャル・ギアを使うことで、車輪を駆動させるモーターを一つにすることができたが、接触不良で機体が思うように動いてくれなかった。 ~【今後の課題】 **4ロボットのプログラム [#ya63dbaf] ***1のプログラム [#r8891161] 制作者1のプログラム #define a OUT_A #define b OUT_B task main(){ SetSensor(SENSOR_1, SENSOR_LIGHT); SetPower(a+b,7); int defaultSensorLevel = SENSOR_1; int maxSensorLevel; // MaxLevel のセットスタート↓↓↓↓ while(true){ OnFwd(a); if(SENSOR_1>maxSensorLevel){ maxSensorLevel = SENSOR_1; } if(SENSOR_1 == defaultSensorLevel ){ break; } } Off(a); // MaxLevel のセット終了↑↑↑↑ // 懐中電灯を認知すると止まる。 while(true){ OnFwd(a); if(SENSOR_1 == maxSensorLevel){ break; } } Off(a); //懐中電灯に近づく repeat(5){ OnFwd(a);Wait(15); OnRev(a);Wait(15); } Off(a); //ブロックを投げる OnFwd(b);Wait(12); Off(b); } ***2のプログラム [#z70c203c] ~制作者2のプログラム ***プログラムの感想 [#x6a8730d] ~制作者1のコメント ~【工夫した点】 ~懐中電灯の光に向かってブロックを投げるのではなく、光が一番強いところに向かってブロックを投げるプログラムを目指した。なぜなら、それが結果的に懐中電灯の光になると思ったからです。そこで、int関数を使い、defaultSensorLevelとmaxSensorLevelという形で表した。これにより、どの懐中電灯でも闘値を調べたりしなくても、懐中電灯に向かってブロックを投げるプログラムになりました。 ~【苦労した点】 ~int関数を使ったので、関数で今何をやっているのかを自分で理解するのが大変でした。 ~【今後の課題】 ~光センサー2つのプログラムを上の考え方で作ること。 ~制作者2のコメント ~【工夫した点】 ~【苦労した点】 ~【今後の課題】 #comment