&size(40){ロボット課題3}; #contents *設計 [#gbe63518] **車体 [#p3f5477d] #ref(CIMG0938.JPG) ↑↑全体~ 写真中央にあるのが発射台です。~ 左上の青いブロックが光センサーで懐中電灯の光を感知します。~ #ref(CIMG0939.JPG) ↑↑RCX -目標を探すための回す部分 -誤差を完全回避ための設計 -発射部分が重くて動きにくいのは欠点 #ref(CIMG0940.JPG) ↑↑ギアの取り付け部分(後ろ側より) #ref(CIMG0941.JPG) ↑↑ギアの取り付け部分(前側より)~ #ref(3-1.jpg) -A(1)->B->C->D->E->F->2順 -一つのモータは二つ違う方向の伝送に責任を負う設計 -発射するため早い初速度が必要ため、1まずブロックを押し、2もだんだん棒を抜き出す -「あ」は発射台を固定するための棒で、「い」は前進するためのモータとギア #ref(003.jpg) ↑↑光センサーです。~ ~ 中立な稲妻のこだわりでオリジナルにこだわりました。~ 結構大きいものになりました。~ 見た目で感じてもらえると思います!!~ *プログラム [#qc3c2d87] **1.懐中電灯に向かって投げる [#ee210217] #define TURN_TIME 400 //1周の時間を設定 #define throw OnFwd(OUT_A);Wait(1);Off(OUT_A); //投げるときの定義 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ−1をライトセンサーと設定 SetPower(OUT_C,2); //モーターCの出力を制限 int light_max=0; //光の最大値 int t_max=0; //最大値のときの時間 ClearTimer(0); //タイマーを0にして OnFwd(OUT_C); //探し始めます while(FastTimer(0)<TURN_TIME){ //回っている間 if(SENSOR_1>light_max) //最大値の光を見つけたら { light_max=SENSOR_1; //最大値の光と設定 t_max=FastTimer(0); //タイマーを入れる } } Off(OUT_C); Wait(50); OnFwd(OUT_C); Wait(t_max); //最大値の光までまわる Off(OUT_C); throw //投げる } 作成者:竹 比較的うまく探すことができました。 **2.懐中電灯を追っていき投げる[#r1be70c8] #define TURN_TIME 400 // 1周の時間を設定 #define throw OnFwd(OUT_A);Wait(1);Off(OUT_A); // 投げるときの定義 #define straight Off(OUT_C);Wait(10);OnFwd(OUT_C);Wait(20);OnRev(OUT_C);Wait(20); // 近づくときの定義 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ−1をライトセンサーと設定 SetPower(OUT_C,2); //モーターCの出力を制限 int light_max=0; //光の最大値 int t_max=0; //最大値のときの時間 ClearTimer(0); //タイマーを0にして OnFwd(OUT_C); //探し始めます while(FastTimer(0)<TURN_TIME){ //1周しているとき if(SENSOR_1>light_max){ //最大値の光にあったら light_max=SENSOR_1; //最大値の光と設定 t_max=FastTimer(0); //最大値の光のところまでの時間をはかる } } Off(OUT_C); Wait(50); OnFwd(OUT_C); Wait(t_max); //最大値の光まで回って Off(OUT_C); straight //近づいて throw //投げる } 作成者:中立な稲妻 ------ 課題を当初勘違いしていました。 イメージしてプログラムを作ったので、こちらで評価していただければと思います。 **訂正 [#c1288d94] #define THERSHOLD 50 //光の閾値を設定 #define throw_light 65 //投げるときの光の強さを設定 #define throw OnFwd(OUT_A);Wait(1);Off(OUT_A); // 投げるときの定義 #define straight Off(OUT_C);Wait(10);OnFwd(OUT_C);Wait(20);OnRev(OUT_C);Wait(20); // 近づくときの定義 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーと設定 SetPower(OUT_C,1); //モーターCの出力を1とする while (true){ if(SENSOR_1<THERSHOLD){ //光が見つからない時 OnFwd(OUT_C); //ぐるぐるまわって探す } if((SENSOR_1>THERSHOLD)&&(SENSOR_1<throw_light)){ //光を見つけた時 Off(OUT_C); straight //近づく } if(SENSOR_1>throw_light){ //懐中電灯が止まり、近づいたら throw //投げる } } } 閾値と最大値の光は過去のを参考にして設定しました。 2のプログラムはタイマーよりも閾値を試行錯誤しながら探しだしてプログラムに使用する方がいいのではないかと 思いました。 *感想 [#vf513274] **竹 [#udfb96b2] 前回の課題よりは難しくなかったですが、タイマーを使ったプログラムは初めてだったのでちょっと大変でした。 また移動させるためのモーター一つというのも難しい課題でした。 **中立な稲妻 [#rc28ad64] かなり難しい課題ですよね。 直接投げる方は簡単ですけど、人並みの設計が嫌いですので、独特な面白い(たぶん?)ロボットを作りました。 輪ゴムを使ったら一番早い初速度を得られるかもしれないですけど、切れたら面倒ですのでその方案を放棄しました。 *コメント [#s84efe2d] お願いします。 - ロボットの方も工夫しているのは良いと思います。2つ目の課題では懐中電灯は懐中電灯が逃げていくので、それを追っていく課題です。過去のページも参考にしてみてください -- [[FI]] &new{2009-08-05 (水) 08:06:05}; - 2つ目の課題を修正しました。イメージになってしまいましたが、課題点なども書いたので再評価お願いします。 -- [[竹]] &new{2009-08-08 (土) 23:40:34}; - ロボットのこだわりがとてもいいです。プログラムについてもよくできています。中立な稲妻さんの訂正バージョンでは、投げた後にwhile文から抜ける処理がないのだけが気になります。 -- [[こさか]] &new{2009-08-09 (日) 22:23:22}; - 中立な稲妻さんの訂正バージョンでは懐中電灯を見つけるのではなく、光センサーの値が50以上になったら回転をやめ65以上まで近づいたら投げるというものだと思います。 -- &new{2009-08-10 (月) 08:06:01}; - 中立な稲妻さんの訂正バージョンでは懐中電灯を見つけるのではなく、光センサーの値が50以上になったら回転をやめ65以上まで近づいたら投げるというものだと思います。 -- &new{2009-08-10 (月) 08:06:42}; #comment