目次

課題2

次のいずれかのコースで黒い線に沿って動き、350mlの空き缶(黄色で表示)を移動させるロボットを製作せよ。

コース

制作したロボット

本に載っている基本のロボットを基礎として組み立てた.しかし,そのままだと光センサーの位置がロボット本体と離れていたためできるだけ近づけた.

機械
機械

缶をつかむ機構は広く長くすることで確実につかめるようにした.少し勢いが強く,安定感もあまりないのでもう少し改良すればよっかた.

つかむところ

作成したプログラム

  1. ライントレースについて 5段階に分けて黒と白の境界をトレースしていく. 「完全に白」45以上「黒っぽい白」43「黒と白の境界」40「白っぽい黒」37「完全に黒」36以下 の5段階の値で判断させた.
    #define kirikaesi_migi OnFwd(OUT_A);OnRev(OUT_C);//45以上の時右に切り返し
    #define sasetu Off(OUT_A);OnFwd(OUT_C);//43の時少し右に旋回
    #define zensin OnFwd(OUT_AC);//40の時前進
    #define usetu OnFwd(OUT_A);Off(OUT_C);//37の時少し左に旋回
    #define kirikaesi_hidari OnFwd(OUT_C);OnRev(OUT_A);//36以下の時左に切り返し
    以上のマクロによって定義したものを使いライントレースしていく.
sub Line_right()
{
   ClearTimer(0);
   while(FastTimer(0)<19){
   if(SENSOR_1>THRESHOLD+5){
       kirikaesi_hidari;
       ClearTimer(0);
   }else if (SENSOR_1>THRESHOLD+3){
       sasetu;
       ClearTimer(0);
   }else if (SENSOR_1>THRESHOLD){
       zensin;
       ClearTimer(0);
   }else if (SENSOR_1>THRESHOLD-3){
       usetu;
       ClearTimer(0);
   }else{
       kirikaesi_migi;    
 }
   
 }
   Off(OUT_AC);
}   

もう一つの円のときのプログラム

sub Line_K()
{
   ClearTimer(0);
   ClearTimer(1);
   while((FastTimer(0)<19)||(FastTimer(1)<t_musi)){
   if(SENSOR_1>THRESHOLD+5){
       kirikaesi_hidari;
       ClearTimer(0);
   }else if (SENSOR_1>THRESHOLD+3){
       sasetu;
       ClearTimer(0);
   }else if (SENSOR_1>THRESHOLD){
       zensin;
       ClearTimer(0);
   }else if (SENSOR_1>THRESHOLD-3){
       usetu;
       ClearTimer(0);
   }else{
       kirikaesi_migi;    
  }
   
 }   
    Off(OUT_AC);
}   

以上のプログラムでライントレース

-その他のプログラム

#define cross_stop Off(OUT_AC);Wait(100);//1秒止まる
#define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);//t秒前進
#define TURN_RIGHT(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);//右に曲がる 
#define TURN_LEFT(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);//左に曲がる

4つのプログラムで位置を微調整していく.

#define back(t)  OnRev(OUT_AC);Wait(t);//t秒もどる

5つのプログラムで位置を微調整していく.

完成したプログラム

まず関数を定義した

 int t_musi=0;

task main()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   t_musi=400;
   Line_left();
   cross_stop;//Cで一時停止
   go(20);
   roll_right3;//位置を調整
   Line_left();//D手前の直角のところ
   go(40);
   TURN_LEFT(100);
   roll_right3;
   Line_left();
   cross_stop;//Dで一時停止
   go(50);//缶による
   tukamu;//缶を掴む
   back(30);//戻る
   TURN_LEFT(100);
   roll_right3;//右側の線を探す
   Line_E();
   go(50);//Eを前進
   roll_right3;
   Line_left();//Fを通過しそのままGへ
   cross_stop;//Gで一時停止
   TURN_RIGHT(40);
   roll_right3;//位置を調整
   Line_left();//GからHの途中の最初の急カーブまで
   TURN_LEFT(150);//方向転換
   roll_right3;//線を探す
   Line_left();//Hに到着
   cross_stop;//一時停止
   go(30);//Hを前進
   TURN_RIGHT(50);//方向転換
   go(20);//黒線を超える
   roll_right3;//線を探す
   Line_left();//Iまでいく
   cross_stop;//Iで一時停止
   go(50)
   TURN_RIGHT(80);//右に曲がる
   roll_left3;  
   Line_K();//Lまで行く
   go(50);//Lを通過
   roll_left3;//位置を調整    
   Line_K();//Kに到着
   go(50);//Kを通過
   roll_left3;
   Line_K();
   cross_stop;//Jで一時停止
   TURN_LEFT(120);//Yの方を向く
   go(30);
   hanasu;//缶を離す
   back(50);//もとの位置戻る
   TURN_LEFT(150);//反転する
   roll_left3;//線を見つける
   Line_right();
   cross_stop;//Bで一時停止
   go(30);
   roll_left3;
   Line_right();//Aに到着
   Off(OUT_AC);//終了
   }

以上で終了

反省と感想

ライントレースのプログラム自体は簡単に作ることができたがそれを使いコースを走らせるのが大変だった.いろいろなところで微調整が必要で誤作動が起こるとうまくいかないので試行錯誤しながらだったの時間がかっかた.また,缶をつかむ機構の安定感がなくうまくいかなかった.プログラムに時間をかけすぎてしまったのでつぎは気を付けたい.


添付ファイル: fileIMG_0137.PNG 149件 [詳細] fileIMG_0234.JPG 116件 [詳細] fileIMG_0233.JPG 142件 [詳細] fileIMG_0232.JPG 134件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-14 (火) 01:57:55