#contents

*課題3:懐中電灯に向かってブロックを投げるロボットの制作 [#rfd5163d]
以下の動きをするプログラムを作る。

その1、全方向から懐中電灯の方向を探しだし、懐中電灯に向かってブロックを投げる。(懐中電灯は動かさない。)

その2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めるとブロックを投げる。

その3、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めると50cmの距離まで近づいてブロックを投げる。

**メンバー紹介 [#qb4d7279]
今回は、コリンとあやこで制作することになりました。女子2人でとっても不安でした・・・。

**使用するロボットについて [#e16a611b]
<条件>
使用できるモータは2つまで!

#ref(2008a/A4/課題3右/robo-right2.jpg,75%,全体像) 

↑改良前の全体像

光センサの着き方がもろく、すぐ取れてしまいます。

#ref(2008a/A4/課題3右/robo-right.jpg,100%,全体像その2)

↑改良前の全体像その2

折角、写真を撮ったので載せてみました。

#ref(2008a/A4/課題3右/robo-right-kai.JPG,50%,全体像その3)

↑改良後の全体像

光センサが着くところを強化しました。これで、大丈夫!!

#ref(2008a/A4/課題3右/taiya-right.jpg,100%,補助輪)

↑補助輪

あえて、タイヤのゴムを付けないことでスムーズな動きが実現しました!!あと、なるべく小さくすることを心がけて作りました。付け根の部分は、自由に回転するようにしました。

#ref(2008a/A4/課題3右/stop-right.jpg,100%,ギアのストッパー)

↑ギアのストッパー

モータの回転を逆にした時に、反対のタイヤが動くようにするためにつけました。

*プログラムについて [#s6a177fb]

**その1 [#f1bddf0f]

*その1のその1 [#e3038772]
***その1のその1 [#e3038772]

 #define IKICHI 50    // 閾値を50に設定
 task main()
 {
 SetSensor(SENSOR_1 , SENSOR_LIGHT);    // センサ端子1に接続したセンサを光センサに設定
 SetSensor(SENSOR_3 , SENSOR_LIGHT);    // センサ端子3に接続したセンサを光センサに設定

 SetPower(OUT_A+OUT_C,3);    // モータの出力を3に設定
 
 while((SENSOR_1 > IKICHI) || (SENSOR_3 < IKICHI))   // センサ端子1の光センサが閾値より大きく
 {            // かつ、センサ端子3の光センサが閾値より小さい時
 OnFwd(OUT_A);     // 時計周りに回って、懐中電灯の光を探す
 }
 Off(OUT_A);       // whileが成り立たなくなった時、A出力のモータを止める
 Wait(100);       // 1秒間停止した後、
 OnRev(OUT_B);     // アームを動かしてブロックを投げる
 Wait(30);        // アームを動かす時間は0,3秒に設定
 Off(OUT_B);      // B出力のモータを止める
 }

*その1のその2 [#rb46cdc1]
***その1のその2 [#rb46cdc1]

**その2 [#sb4f76b1]

 #define IKICHI 60   // 閾値を60に設定
 task main()
 {
 SetSensor(SENSOR_1 , SENSOR_LIGHT);   // センサ端子1に接続したセンサを光センサに設定
 SetSensor(SENSOR_3 , SENSOR_LIGHT);   // センサ端子3に接続したセンサを光センサに設定
 SetPower(OUT_A+OUT_C,2);   // モータの出力を2に設定

 while(true){   
 if((SENSOR_1 >= IKICHI) && (SENSOR_3 >= IKICHI))   // センサ端子1の光センサが閾値以上、
 {          // または、センサ端子3に光センサが閾値以上の時、
 repeat(2)      // 前進する行動(1回0,4秒)を2回繰り返す
 {          
 OnFwd(OUT_A);   
 Wait(20);      
 OnRev(OUT_A);   
 Wait(20);      
 }
 Off(OUT_A);     // 繰り返した後、A出力のモータを止める
 OnFwd(OUT_B);   // アームを動かしてブロックを投げる
 Wait(100);      // アームを動かす時間は1秒
 Off(OUT_B);     // B出力のモータを止める
 } 
 if((SENSOR_1 < IKICHI)  && (SENSOR_3 > IKICHI))   // センサ端子1の光センサが閾値より小さい、
 {           // または、センサ端子3の光センサが閾値より大きいとき
 OnFwd(OUT_A);    // 時計回りに回って懐中電灯の光に向かって進む
 }
 if((SENSOR_1 > IKICHI)  && (SENSOR_3 < IKICHI))   // センサ端子1の光センサが閾値より大きい、
 {           // または、センサ端子3の光センサが閾値より小さいとき
 OnRev(OUT_A);    // 反時計回りに回って懐中電灯の光に向かって進む
 }
 }
 }
 

**その3 [#dd34d0fe]

 #define IKICHI 60   // 閾値を60に設定
 task main()
 {
 SetSensor(SENSOR_1 , SENSOR_LIGHT);   // センサ端子1に接続したセンサを光センサに設定
 SetSensor(SENSOR_3 , SENSOR_LIGHT);   // センサ端子3に接続したセンサを光センサに設定
 SetPower(OUT_A+OUT_C,2);   // モータの出力を2に設定

 while(true){   
 if((SENSOR_1 >= IKICHI) && (SENSOR_3 >= IKICHI))   // センサ端子1の光センサが閾値以上、
 {          // または、センサ端子3に光センサが閾値以上の時、
 repeat(2)      // 前進する行動(1回0,4秒)を2回繰り返す
 {          
 OnFwd(OUT_A);   
 Wait(20);      
 OnRev(OUT_A);   
 Wait(20);      
 }
 repeat(8)      // 前進する行動(1回0,4秒)を8回繰り返して
 {          // 懐中電灯に近づく
 OnFwd(OUT_A);   
 Wait(20);      
 OnRev(OUT_A);   
 Wait(20);   
 }
 Off(OUT_A);     // 繰り返した後、A出力のモータを止める
 OnFwd(OUT_B);   // アームを動かしてブロックを投げる
 Wait(100);      // アームを動かす時間は1秒
 Off(OUT_B);     // B出力のモータを止める
 } 
 if((SENSOR_1 < IKICHI)  && (SENSOR_3 > IKICHI))   // センサ端子1の光センサが閾値より小さい、
 {           // または、センサ端子3の光センサが閾値より大きいとき
 OnFwd(OUT_A);    // 時計回りに回って懐中電灯の光に向かって進む
 }
 if((SENSOR_1 > IKICHI)  && (SENSOR_3 < IKICHI))   // センサ端子1の光センサが閾値より大きい、
 {           // または、センサ端子3の光センサが閾値より小さいとき
 OnRev(OUT_A);    // 反時計回りに回って懐中電灯の光に向かって進む
 }
 }
 } 
 
*制作してみての感想 [#tfc3c8b0]

<苦労した点>

 全体的にプログラムを作るのが難しかった。特に、懐中電灯を追いかけるプログラムでは、光センサの感度が悪く、調整がうまくできなかったので大変だった。他にも、前進するときに、タイヤの着いてるモータを交互に少しずつ動かさなければいけないが、モータを動かす時間を調節することが難しかった。

<工夫した点>

 ロボットを支える補助輪がスムーズに動くように、あえてタイヤにゴムを付けなかったところ。
 ロボット全体をコンパクトにするように心がけた。
 ブロックを投げるときに、遠くに飛ぶように、アームが動く途中にストッパーをつけた。また、アームが動く前の待機位置にもストッパーを付けた。

***コメントお願いします [#ucc60da5]
#comment

課題1では相対的に最も明るい方向を探せるプログラムにしてください。I

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