[[2009a]]

*目次 [#vc1be63e]

#contents

*課題 [#t120f8c7]

インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)

1,全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。方向を定めたのち、懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもよい。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。

2,懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。



*ロボット紹介 [#l3fe189a]

-アーム
#ref(HI3F0080.jpg)

-三輪部
#ref(HI3F0081.jpg)
#ref(HI3F0082.jpg)

-本体
#ref(HI3F0083.jpg)
#ref(HI3F0084.jpg)

*プログラムの紹介 [#v571a431]
**-課題3(1)YUTA [#ca3b81e7]
 #define TURN_TIME 300 //時間を3秒間とした
 task main () 
 { 
 int light_max=0;
 int t_max=0;
 SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーをセンサー1に設定
 ClearTimer(0);
 OnFwd(OUT_B);  //3秒間回る
 while(FastTimer(0)<TURN_TIME ){
 if(SENSOR_1>light_max){
 light_max=SENSOR_1; //以前よりも明るい場所があった場合その場所を記録
 t_max=FastTimer(0);
 }
 OnRev(OUT_B);
 Wait(TURN_TIME-t_max); //最終的に最も明るかった場所まで戻る
 Off(OUT_B);}
 PlaySound(SOUND_CLICK); //止まると音声で知らせる
 Wait(300);
 OnFwd(OUT_A); //ブロックを投げる
 Wait(9);
 Off(OUT_A);
 }
**-課題3(2)YANA [#y3803c15]
 #define THRESHOLD 50 //光の値を定義
 #define THROW 60
 task main()
 {
    SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1,3をライトセンサーに設定
    SetSensor(SENSOR_3,SENSOR_LIGHT);
    SetPower(OUT_C,4); //モーターCのパワーを4に設定
    while (true) {
 //センサー1,3が規定値(THRESHOLD)より大きいとき前進//
        if((SENSOR_1> THRESHOLD)&&(SENSOR_3> THRESHOLD)){ 
        OnRev(OUT_C);Wait(20);  
        OnFwd(OUT_C);Wait(20);
        }
 //センサー1が規定値より大きく、センサー3が規定値より小さいとき左回転//
        if ((SENSOR_1> THRESHOLD)&&(SENSOR_3< THRESHOLD)){
        OnRev(OUT_C);   
        
        }
 //センサー1が規定値より小さく、センサー3が大きいとき右回転//
        if((SENSOR_1< THRESHOLD)&&(SENSOR_3> THRESHOLD)){
        OnFwd(OUT_C); 
        }
 //センサー1,3が規定値(THROW)より大きくなったらブロックを投げて止まる//
        if((SENSOR_1> THROW)&&(SENSOR_3> THROW)){
        Off(OUT_C);
                Wait(10);                 
               OnFwd(OUT_A);
               Wait(15);
               OnRev(OUT_A);
               Wait(3);
               Off(OUT_A);
               break;
               Off(OUT_A+OUT_C);
        }
        }
 }
*工夫した点 [#s51c96dc]
・アーム
&br; このアームの特徴はなんと言っても大きな物が乗るところです。これは小さい牛乳パックをなげることを想定して作りました。横に飛び出てる棒はストッパーの役割を果たします。
&br;・三輪部
&br; ここが今回のロボットで苦労しました。左右へのジグザグ走行をスムーズにする為に前輪は1つだけにしました。そしてギアは基本はsecretにあったものを真似し、工夫しました。しかし、それだけではすぐにギアがずれてしまいそこを直すためにいくつものストッパーをかけました。
&br;・本体
&br; 本体で苦労したのはなんといっても巨大なアームをどのように取り付けるかということです。そこでアーム用の台を取り付けました。これによってアームが車輪とぶつかることなく、スムーズに動くことが出来るようになりました。
 
*感想 [#q98e0126]

**YANA [#z3a23510]
今回の課題は、前回よりもプログラムの製作が簡単だったので、比較的楽に作ることができた。
ロボットの製作は特に車輪の部分を工夫して作った。
**YUTA [#ad2a44b2]
実際にやってみせる機会がなかったので残念でしたが、お互い協力して時間がないなりに頑張って、満足のいくプログラムを作ることができたと思います。ただ試走させてみると失敗することもあったので、今後は制度の高いものを作りたいです。
*コメント欄 [#y0cb6c56]
ご自由にどうぞ^^
- もう少し説明が詳しいといいですが、書くことは書けています。二つ目のプログラムでは光を見失っときの命令も入れたほうがいいと思います。また、三つ目のifの条件の不等号がおかしい気がします -- [[FI]] &new{2009-08-05 (水) 13:44:43};
- ページを編集しました。 -- [[YUTA]] &new{2009-08-08 (土) 21:10:10};
- 全体的に必要なことはかかれています。YANAさんのプログラムは、センサー1,3が両方とも規定値より小さかったとき、なにもしないまま無限ループになってしまうのではないでしょうか? -- [[こさか]] &new{2009-08-10 (月) 00:01:16};
- 追記:break; の時点でwhileを抜けてしまうので、その後に行いたい処理はwhileの外側に書かないといけません。 -- [[こさか]] &new{2009-08-10 (月) 00:02:36};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS