課題3 懐中電灯に向かってブロックを投げるロボット

課題3の内容

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

2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。

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

メンバー紹介

   わかぐりーん/ろしあんぶるー

ロボット紹介

123.jpg

この部分が重要で、1つのモーターで左右のタイヤを複雑に回転させます。(左のタイヤだけで回転させるか右のタイヤだけで回転させるか)しかし、モーターの都合上、タイヤの位置がずれてしまいました。

Image069-11.jpg

このようにアームを回転させてブロックを投げます。

プログラム

1つ目のプログラム:全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。

#define THRESHOLD 60     

task main()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);sensor1 光センサであると宣言  
   SetSensor(SENSOR_3,SENSOR_LIGHT);sensor3 光センサであると宣言
        
while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD)){ OnFwd(OUT_A); Off(OUT_C);}
  

Off(OUT_A);
 OnRev(OUT_C); Wait(20);  
 Off(OUT_C);}

 

2つ目のプログラム:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。

#define TURN_TIME 20     //動く時間を設定
#define THRESHOLD 40   //閾値の設定

sub turn_right()     //右回りに動く時間を定義
{
    OnFwd(OUT_A); 
    Wait(TURN_TIME);
    Off(OUT_A);
}

sub turn_left()     //左回りに動く時間を定義
{
    OnRev(OUT_A);
    Wait(TURN_TIME);
    Off(OUT_A);
}

task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);      //センサ1を光センサに
SetSensor(SENSOR_3,SENSOR_LIGHT);      //センサ3を光センサに

while (true)
{
 if ((SENSOR_3 > THRESHOLD) && (SENSOR_1 > THRESHOLD))  //センサの1と3が閾値を超えたら左に
    {  turn_left();             
    } 
 if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD))  //センサ1は閾値を超えず、センサ3が閾値を越えた場合、右に
   { turn_right();
    } 
 if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD))  //センサ1が閾値を超え、センサ3が閾値を超えない場合、左に
     { turn_left();   
     }
 if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD))  センサの1と3がともに閾値を超えない場合、右に回って光を探す
     { turn_right();
      } 
      }
   Off(OUT_A);   
      } 

3つ目のプログラム:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

#define THRESHOLD 40
 task main()
{
StSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーと定義
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーと定義
while(true)
{
if ( (SENSOR_1 > 50) || (SENSOR_3 > 50))   //センサ−1とセンサ−3の感じ取る光の強さが50より大きいとき、ロボットを止めてブロックを投げる。   
{
Float(OUT_A);
OnFwd(OUT_C);Wait(35);
Off(OUT_C);  
}else{
if ((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD))  //センサ−1とセンサ−3がいずれも感じる光の強さが40よりも小さいとき右に曲がる。
{
OnFwd(OUT_A);Wait(5);
}
if((SENSOR_1 <THRESHOLD) || (SENSOR_3 >THRESHOLD))  //センサー1が感じる光の強さが40より小さく、センサ−3が40より大きいとき左に曲がる。
{
OnRev(OUT_A);Wait(30);
}
if((SENSOR_1 > THRESHOLD ) || (SENSOR_3 <THRESHOLD))  //センサ−1が感じる光の強さが40より大きく、センサ−3が40より小さいとき右に曲がる。
{
OnFwd(OUT_A);Wait(5);
}
}
}
}

苦労した点

・top secretにあった形でロボを作っていたら、一方方向にしか回れない事が分かったため、 それを両方に回れるようにすることに苦労した。

・ブロックを投げるときにモーターが勢いよく回りすぎるために、アームが激しくロボにぶつかり、その衝撃でアームを回転させるモーターが外れる問題が起こったが、留め具をつけることによって解決した。

課題点

・ギアとブロックの穴の数がうまく合わない都合上、ギアを多少横にずらしてしまった。そのためタイヤの位置を左右ずらすしか方法が無く、安定性を失ってしまった。また、左右の回転に大きく影響がでてしまった。 右回転はスムーズに回ることができて良かったのだが、左回転がスムーズに回らなくなってしまった。

まとめ

・このようなプログラムを作成するのは初めてだったので、ifやtrueなど入力条件の方法を理解し、プログラミングするのに手こずってしまい、なかなか完成しなかったが、最終的に3つのプログラムができて良かった。

・今までやってきたことを生かして、ロボコンを頑張ります!!

コメントをどうぞ



添付ファイル: file123.jpg 287件 [詳細] fileImage069-11.jpg 293件 [詳細] file課題3写真.jpg 149件 [詳細] fileImage070.jpg 143件 [詳細] fileImage069.jpg 146件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-02 (木) 11:32:54