*0,目次 [#i87ce71c] #contents *1,課題3懐中電灯に向かってブロックを投げるロボットを作成せよ! [#r9076bd9] ~インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること) ~1. 全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。方向を定めたのち、懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもよい。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。 ~2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。 ~3. 懐中電灯を動かしたとき懐中電灯に向かって進み、見失った時には再び全方向から懐中電灯を探しだす。7秒以上追尾できたら懐中電灯に向かってブロックを投げる。 ~懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい *2,ロボットの概要 [#vf9ec5f2] **駆動部分 [#l125d79d] **アーム [#d8f75cc2] **全体図 [#j38b9977] *3,プログラムについて [#f041344f] **Dsの作ったプログラム [#ycc02125] #define L 60 // #define T 150 // #define GT 500 // #define G OnFwd(OUT_C);Wait(20);OnRev(OUT_C);Wait(20);Off(OUT_C); // #define TH OnFwd(OUT_B);Wait(10);Off(OUT_B); // task main() {SetSensor(SENSOR_2,SENSOR_LIGHT); // ClearTimer(0); // while(Timer(0)>T) // {until(SENSOR_2>L){OnFwd(OUT_C);ClearTimer(0);} until(SENSOR_2>L) {OnRev(OUT_C);ClearTimer(0);} } ClearTimer(0); while(Timer(0)<GT){G;} TH; } **堀内の作ったプログラム [#dcd58f28] #define ROUND 100 // 1周する時間 #define GO Off(OUT_C);OnRev(OUT_C);Wait(30);OnFwd(OUT_C);Wait(30);OnRev(OUT_C);Wait(30); //ライトに向かって進む #define throw Off(OUT_C);OnFwd(OUT_B);Wait(100);Off(OUT_B);//投げる task main() { SetSensor(SENSOR_2,SENSOR_LIGHT);//センサー2を光センサーに設定 ClearTimer(0); int n = 0; while(Timer(0) < ROUND) { OnFwd(OUT_C); if(SENSOR_2 > n) { n=SENSOR_2; } } while(n > SENSOR_2 ) { OnFwd(OUT_C); } while(SENSOR_2 >= n) { // ライトを見つけたら GO; // ライトに向かって進み } throw; // 投げる } *4,良かった点、工夫した点 [#i4ae1663] 課題1、課題2のプログラムよりも良いプログラムがつくれたと思う。defineを1、2の課題よりも使ったためプログラムが簡略化されたことも良かった。(堀内) *5,苦労した点 [#w7ac780e] いつものことながらやはりプログラムが自分にとってはややこしかった(堀内) *6,反省点 [#r52fb33b] ロボットを作ったりするのをほとんどやってもらってしまった。ロボコンの準備の時は協力してできるようにしたい。(堀内) *7,コメントをどうぞ [#ua4d7bc9] #comment