目次

課題2  光センサーを用いて線の上を動くロボットを作る

完成図  弐号

弐号

プログラム

#define THRESHOLD 40 //光の強さが40

task main()

{

SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサー1

SetSensor(SENSOR_3,SENSOR_LIGHT); //タッチセンサー2

SetSensor(SENSOR_2,SENSOR_TOUCH); //光センサー3

while (true)
 
 {
     
  if (SENSOR_2 == 0) //タッチセンサー2が反応していないとき
     
   {
       
    if (((SENSOR_1 < THRESHOLD ) && (SENSOR_3 < THRESHOLD)) //光センサー1が線上かつ光センサー3も線上のとき。
     {
      Off(OUT_A+OUT_C);  //優先道路手前での一時停止
      Wait(200);     
      OnFwd(OUT_A+OUT_C); //その後直進する
      Wait(60);
      }
    
if ((SENSOR_1 >  THRESHOLD) && (SENSOR_3 > THRESHOLD))) //光センサー1が線上でないかつ光センサー3が線上でないとき。
           
     {
             
      OnFwd(OUT_A+OUT_C); //前進する。
             
     }
              
    if((SENSOR_1 < THRESHOLD ) && (SENSOR_3 > THRESHOLD)) //光センサー1が線上でなくかつ光センサ−3が線上のとき。
            
     {
              
      OnFwd(OUT_C); 
              
      Off(OUT_A);
            
     }//左方向に回転して、線をまたぐように修正する。                                                                       
      
    if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) //光センサー1が線上でなくかつ光センサー3が線上のとき。
            
     {
              
      OnFwd(OUT_A);
              
      Off(OUT_C);
            
     }//右方向に回転して、線をまたぐようにに修正する。
                                                                  
   }                                            
                                                                  
  else //タッチセンサー2が反応したとき。
      
   {
        
    Off(OUT_A+OUT_C);  Wait(500);
       
    OnFwd(OUT_A+OUT_C);
      
   }//50秒間停止する。                                                                                    
  
 }
}

工夫した点

構造

光センサーを2個使うという点でロボットの構造に苦労しました。

今回はゴムを利用せずに、小さいブロックを2個使用してバンパーを固定し、肝心の光センサーは2個並べて下につけました。

しかし!!このシンプルな構造にたどり着くまでかなりの時間を要したのです... 特にバンパーの設置!!

前段階でバンパーをつけた部分(写真参照)に光センサーをつけてしまったため、バンパーの設置が不可能になるという非常事態に対し、必死で考えました。

1棒を用いてバンパーを刺すような状態にしようと試みましたが黄色の部分に刺さらず断念

2バンパーのブロックの穴と下に置いた長めのブロックの穴の位置が合わなかったので、四角のブロックを斜めに設置しよう(ダイヤの向き)と試み、どうにかブロックを多用して設置したが意味なし。

3ダメもとで長めのブロックの上に小さいブロックをつける→成功!無事に固定され、小さいブロックを利用したので軽量になりました。

弐号

プログラミング

2個の光センサーを並べてつけることで、両方のセンサーが黒い線の上にあるときにだけ進むようにして、片方が線上から離れると修正するプログラムを作りました。

また、何かに衝突してタッチセンサーが作動すると、数秒間静止してまた再び動くように作りました。

コースの交差する場所では直進するように設定し、先の線を探させるプログラムを作りました。

「if」と「&&」と「||」をうまく利用することで、いろんな場合に対応できるプログラムができました。

反省点

今回はプログラミングが非常に上手くいったため、2回目にしてきちんと黒い線に沿って動いていました。 (1回目は私の書いた図が下手だったために変な方向に暴走)

これが図です。

コース

RとLとで協力して考えました。

直線部分とカーブの部分を利用しようと思い、考えたのがこの不思議な図です。(分かる人にはわかるかもしれません…★)

より良いものにするためにコメントをお願いします(>M<)

  • while文の中にif文で状況によって、動作を分岐するようになっていますが、このプログラムでは動作が少し遅いように思われるのですが、他の班と比べてどうですか? -- まいける(TA) 2007-06-21 (木) 10:06:17
  • プログラム部分が枠からはみ出しています。 -- ヒロヤ? 2007-06-21 (木) 13:04:05
  • ヒロヤさんに質問です。枠からはみ出しているとのことですが、どういうことでしょうか?? -- つ-? 2007-06-21 (木) 18:17:34
  • ヒロヤさんに質問です。枠からはみ出しているとのことですが、どういうことでしょうか?? -- つ-? 2007-06-21 (木) 18:17:34
  • 僕の画面で見る限り、「光センサー1が線上でないかつ光センサー3が線上でないとき。」の部分が枠をはみ出していて見栄えの点でどうかと思ったので書いてみましたが、僕だけでしょうか?! -- ヒロヤ? 2007-06-28 (木) 22:31:13


添付ファイル: file200706201207000.jpg 207件 [詳細] file200706201139000.jpg 203件 [詳細] file200706201139001.jpg 195件 [詳細] fileP6070036.jpg 118件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-28 (木) 22:31:13