ロボット作成 課題2

設計

センサー

☆光センサー
光センサーは2つつけました。最初は1つの予定でしたが、2つのほうがちゃんと黒い線の上をトレースするので変更しました。

センサー下から
005.jpg

☆タッチセンサー
タッチセンサーは1つです。

006.jpg

赤い部分を支点にして、テコの原理を利用してタッチします。↓↓

タッチセンサー横から

車体

車体

赤い部分がタッチセンサーで
黄色い部分が光センサーです。
できるだけ大きめの車輪を使うことで、光センサーがしっかり感知するようになったし、テコの原理も作りやすくなりました!

走るライン

とにかくシンプルなものにしました。
カーブの時にうまく光センサーが感知するかどうかが問題でした。

車体1

問題点

センサー

☆光センサー
車体がどんどんズレていって黒い線の上を走らなくなってしまいました。 2つの光センサーの感覚を狭めることで、カーブ後もちゃんとトレースするようになりました。
☆タッチセンサー
最初は牛乳パックに反応しなかったので、センサーを高くしてテコの原理を利用したら反応するようになりました。

車体

改良に改良を重ねました(泣)
最初の車体のときはタッチセンサーが反応しなかったり、光センサーの感覚が広くなってしまったりと問題点が多かったですが、車体の高さを高くしたことにより、それらの問題は解決しましたー!!

車体2
車体3

プログラム

パック回避 Ver.

#define  THRESHOLD 39                                                    //閾値を定義
#define  go_straight(t)  {OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);} //以下回避時の定義
#define  GO_S            {OnFwd(OUT_A+OUT_C); Wait(20);}
#define  go_back         {OnRev(OUT_A+OUT_C);Wait(80);Off(OUT_A+OUT_C);}
#define  turn_left     {OnFwd(OUT_C);OnRev(OUT_A);Wait(70);Off(OUT_A+OUT_C);}    
#define  turn_right      {OnFwd(OUT_A);OnRev(OUT_C);Wait(55);Off(OUT_A+OUT_C);} 
task main()
{
SetSensor(SENSOR_2,SENSOR_TOUCH);   //センサー2をタッチセンサーとする
SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサ−1を光センサーとする
SetSensor(SENSOR_3,SENSOR_LIGHT);   //センサ−3を光センサーとする
SetPower(OUT_A,1)                   //A出力を制限
SetPower(OUT_C,1)                   //C出力を制限
int n;                              //交差点を定義        
n=0;                                //まだ交差点は通ってないことを定義
while(n<2){ //交差点を4回通る
if((SENSOR_1>THRESHOLD)&&( SENSOR_3>THRESHOLD)){ //センサ−1と3が黒線上にないとき
OnFwd(OUT_A+OUT_C);                               //まっすぐ進む
}
if(SENSOR_1<THRESHOLD)       //センサー1が黒線上にきてしまったら
OnRev(OUT_A);                //左へ行くよう調節
OnFwd(OUT_C);   
}
if(SENSOR_3<THRESHOLD){     //センサー3が黒線上にきてしまったら
OnFwd(OUT_A);               //右へ行くよう調節
OnRev(OUT_C);
}
if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //センサー1と3が黒線上→交差点にきたら
Off(OUT_A+OUT_C);                               //1回止まって待ってから再び進む
Wait(150); 
GO_S
n=n+1;                                          //通った交差点の数を足していく
}
if(SENSOR_2==1){                  //タッチセンサーが反応したら
go_back                       //下がって
turn_left                      //左へよけて
go_straight(90)                  // 
turn_right                     //右に曲がって
go_straight(150)                  //
turn_right                     //黒線上に復帰
n=n+1;
if(n==2)                        //2回目の交差点にきたら
{
OnFwd(OUT_A+OUT_C);            //少し進んで止まる
Wait(50);
Off(OUT_A+OUT_C);
}
}
}

作成者:k山


パック運搬 Ver.

#define  THRESHOLD 39                             //閾値を定義
#define  go_straight(t)  {OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);} //以下回避時の定義
#define  GO_S(t)     {OnFwd(OUT_A+OUT_C); Wait(t);}
#define  GO_b(t)     {OnRev(OUT_A+OUT_C); Wait(t);}
#define  go_back(t)     {OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);}
#define  turn_left(t){OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C);}    
#define  TL          {OnFwd(OUT_C); OnRev(OUT_A); Wait(15);}
#define  turn_right(t) {OnFwd(OUT_A);OnRev(OUT_C);Wait(100);Off(OUT_A+OUT_C);} 
#define  TR          {OnFwd(OUT_A); OnRev(OUT_C); Wait(30);}
task main()
{
SetSensor(SENSOR_2,SENSOR_TOUCH);   //センサー2をタッチセンサーとする
SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサ−1を光センサーとする
SetSensor(SENSOR_3,SENSOR_LIGHT);   //センサ−3を光センサーとする
SetPower(OUT_A,1)                   //A出力を制限
SetPower(OUT_C,1)                   //C出力を制限
int n;                              //交差点を定義        
n=0;                                //まだ交差点は通ってないことを定義
             
while(n<4){ //交差点を4回通る
if((SENSOR_1>THRESHOLD)&&( SENSOR_3>THRESHOLD)){ //センサ−1と3が黒線上にないとき
OnFwd(OUT_A+OUT_C);                   //まっすぐ進む
}
if(SENSOR_1<THRESHOLD)                 //センサー1が黒線上にきてしまったら
OnRev(OUT_A);                    //左へ行くよう調節
OnFwd(OUT_C);
}
if(SENSOR_3<THRESHOLD){       //センサー3が黒線上にきてしまったら
OnFwd(OUT_A);             //右へ行くよう調節
OnRev(OUT_C);
}
if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //センサー1と3が黒線上→交差点にきたら
Off(OUT_A+OUT_C);                //1回止まって待ってから再び進む
Wait(150); 
GO_S(20) 
n=n+1;                       //通った交差点の数を足していく
}
if(n==4){                 //4回目の交差点の時
go_back(80)                //下がって
turn_left(70)               //左へよけて
go_straight(100)            
turn_right(80)               //右に曲がって進み
go_straight(250) 
turn_right(100)              //ライン上に復帰して
go_straight(120)
turn_left(90)
go_back(140)              //牛乳パックを元の位置に戻す
n=n+1;                 //通った交差点の数を足していく
}
}

作成者:竹

感想

K山の感想

ロボットもプログラムもかなり難しくて大変だった。 今回の課題はだいぶ疲れました。

竹の感想

前回の何百倍も難しくなってヒイヒイしてます。
光センサーとタッチセンサーをうまく使っていかないと、
課題がこなせないので本当に大変だと思いました。

コメント

コメントお願いします



添付ファイル: file10.jpg 320件 [詳細] file5.jpg 315件 [詳細] file4.jpg 160件 [詳細] file010.jpg 160件 [詳細] file009.jpg 306件 [詳細] file008.jpg 311件 [詳細] file007.jpg 308件 [詳細] file006.jpg 314件 [詳細] file005.jpg 305件 [詳細] file004.jpg 23件 [詳細] file003.jpg 164件 [詳細] file002.jpg 286件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-07-03 (金) 02:45:07