[[2008a/A10/課題3右]] *目次 [#d38a03e1] #contents *課題3:光を追いかけるロボット [#w5bbb5bc] **課題 [#ra0a3f4b] インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること) 1 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 2 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 3 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 **条件 [#ab1aa0a3] モーター、光センサー、タッチセンサーはそれぞれ2個まで使用可。 *マシンの紹介 [#w2a19f8e] **課題・条件[#tdd460b5] モーターが2個までしか使えないので走らせるので1個、ブロックを投げさせるために1個使う、計2個でいくことにした ***タイヤ [#t0f58c3a] #ref(2008a/A10/課題3右/2.jpg,100%,全体) 1個のモーターでタイヤを回すためのものである ***光センサー [#ye1ba4f3] #ref(2008a/A10/課題3右/1.jpg,100%,全体) 光をさがすためにも間隔を大きくあけた ***ブロックを投げる部分 [#tefe84d6] #ref(2008a/A10/課題3右/3.jpg,100%,全体) 上から振り下ろすようにして物を投げるようにした *プログラム [#vfec59cf] ここのチームは3人なので1人1つプログラムを担当するようにした 1 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 水上担当 2 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 辻担当 3 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 吉村担当 **1 回転して最も明るい場所にブロックを投擲するプログラム [#l246bdc6] #define THRESHOLD 70 //光の明るさを定義する task main() {SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを定義 while(true) {if(SENSOR_1<THRESHOLD) //定義した光よりも暗い場合 {OnFwd(OUT_A); //左タイヤを回転させる } else //定義した光よりも明るい場合 {Off(OUT_A); //タイヤ停止 OnFwd(OUT_C); //ブロックを投げる Wait(5); Off(OUT_C);} //終了 } } **2 光を動かしたとき光に向かって進み、光の動きを止めればブロックを投げるプログラム [#x8b1e840] #define THRESHOLD 65 //光の明るさを定義する task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーの定義する SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーの定義する SetPower(OUT_A,7); //モーターの出力を7にする while(true){ if(SENSOR_1 > THRESHOLD){ OnFwd(OUT_A); //左に光が強いとき左に回る } if(SENSOR_1 < THRESHOLD){ OnRev(OUT_A); //右に光が強いとき右に回る } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { Off(OUT_A); OnFwd(OUT_C); Wait(20); Off(OUT_C); //左右のセンサーが明るさの定義値より強い明るさのとき物を投げる } if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { OnFwd(OUT_A); } //左右のセンサーに光があたっていないとき回転して光をさがす } } **3 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 [#v465ae07] #define THRESHOLD 50 //光の明るさの規定値1を42に設定 #define THRESHOLD 58 //光の明るさの規定値2を51に設定 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサを1にセットする SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサを3にセットする SetPower(OUT_A,7); //モーターの出力を7に設定する while(true) { while((SENSOR_1 < THRESHOLD1) && (SENSOR_3 < THRESHOLD1)) //光センサ1とセンサ3が同時に規定値の光を感知できないとき { OnFwd(OUT_A); Wait(150); //左に向きを変える動作をする。 Off(OUT_A); } while((SENSOR_1 >= THRESHOLD1) && (SENSOR_3 < THRESHOLD1)) //光センサ1は十分な光を感知するが、3はそれに足りないとき { OnFwd(OUT_A); Wait(50); //左に少しだけ向きを変える動作をする Off(OUT_A); } while((SENSOR_1 < THRESHOLD1) && (SENSOR_3 >= THRESHOLD1)) //逆にセンサ3は十分な光を感知できるが、センサ1は感知できなかったとき { OnRev(OUT_A); Wait(30); //右に向きを少しだけ変える動作をする Off(OUT_A); } while((THRESHOLD1 <= SENSOR_1 <= THRESHOLD2) && (THRESHOLD1 <= SENSOR_3 <= THRESHOLD2)) //さらにセンサ1、センサ3が同時に規定値1より多くしかし規定値2に満たない光を感知したとき { OnFwd(OUT_A); //右に少し Wait(10); OnRev(OUT_A); //左に少し Wait(10); Off(OUT_A); //蛇行しながら前に進んで止まる動作をする } while((SENSOR_1 >= THRESHOLD2) && (SENSOR_3 >= THRESHOLD2)) //センサ1、センサ2が同時に規定値2以上の光を感知したとき { OnFwd(OUT_C); //止まってる上体でアームを振り下ろしブツを前に投げる。 Wait(5); Off(OUT_C);} //以上 } } } *苦労・工夫したところ [#lbd9af4b] ・とりあえず走らせてみようとして走らせてはみたものの全然前に走ってくれなかったこと *今後の課題・反省 [#w1081322] ・みんなの都合が合わなくて集まることがあまりないまま1週間迎えてしまった ・プログラムの意味を理解しながらやればかなりはやくプログラムを組めたと思う ・ディファレンシャルギアで目指せ4輪駆動!・・・やりようによってはできる気がするんですが考えるのが大変ですねー *感想 [#hf87e862] ・やはり1週間は短すぎる気がした。チーム全員で集まることができる日が少ないのをなんとかしたいと思った。 by 辻 ・一週間では短い気がした。プログラムがだんだん複雑になってきて作るのが大変だが、ロボコンは何とか成功させたい。 by 水上 ・システムが微妙にちがうロボを1からつくって、デリケートなプログラム組んでそれを1週間以内は拷問だったですよ。まあ詰まっててがんばった1週間でした。 by吉村 *この作品に関してのコメント [#j2847f4e] コメントよろしくお願いします - 最初の課題では、絶対的な明るさ(閾値)を方向判定の基準にするのではなく、各方向から最も明るい方向を捜し出すようなプログラムにしてください。 -- [[松本]] &new{2008-07-08 (火) 09:09:06}; #comment 訪問者 本日&counter(today); 昨日&counter(yesterday); 合計&counter(all);