課題2

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

2018a-mission2.png

第2コース

  1. Aをスタート
  2. Bを右折
  3. Jで一時停止の後、Yの空き缶をキャッチしてJに戻る
  4. JからKに向かい、Kを直進
  5. Lを直進
  6. Iを左折
  7. Hで一時停止の後、左折
  8. Gで一時停止の後、右折
  9. Fで一時停止の後、右折
  10. Eを直進
  11. Dで一時停止の後、空き缶をXに置いてDに戻り、Cに向かう
  12. Cで一時停止の後、直進
  13. Bを直進
  14. Aで停止

ロボット

#ref(): The style ref(filename,pagename) is ambiguous and become obsolete. Please try ref(pagename/filename)

アーム

プログラム

定義

#define BLACK 45

#define WHITE 50

#define sp SetPower(OUT_AC,1);

#define sp2 SetPower(OUT_ABC,3);

#define MAE sp;OnFwd(OUT_AC);

#define HIDARIHE sp;Off(OUT_A);OnFwd(OUT_C);

#define MIGIHE sp;OnFwd(OUT_A);Off(OUT_C);

#define HIDARIMUKI sp;OnFwd(OUT_C);OnRev(OUT_A);

#define MIGIMUKI sp;OnFwd(OUT_A);OnRev(OUT_C);

#define KYUUMIGIHE sp;OnFwd(OUT_A);OnRev(OUT_C);

#define KYUUHIDARIHE sp;OnFwd(OUT_C);OnRev(OUT_A);

サブルーチン

sub ZENSHINR() {

  ClearTimer(0);  
     while(FastTimer(0)<=25) {
        if (SENSOR_2 < BLACK) {
            MIGIHE;
              }
        else if (SENSOR_2 < WHITE) {
            MAE;
            ClearTimer(0);
              } 
        else {
            HIDARIHE; 
            ClearTimer(0);
              }
      }
   Off(OUT_AC);

}

sub ZENSHINL() { ClearTimer(0); while(FastTimer(0)<=25) {

if (SENSOR_2 < BLACK) {
    HIDARIHE;
      }
else if (SENSOR_2 <WHITE) {
    MAE;
    ClearTimer(0);
      } 
else {
    MIGIHE;
    ClearTimer(0);
      }

} Off(OUT_AC); }

sub CURVEL() { ClearTimer(0); while(FastTimer(0)<=18) {

if (SENSOR_2 < BLACK) {
    KYUUHIDARIHE;
      }
else if (SENSOR_2 <WHITE) {
    MAE;
    ClearTimer(0);
      } 
else {
    MIGIHE;
    ClearTimer(0);
      }

} Off(OUT_AC); }

メイン

 SetSensor(SENSOR_2, SENSOR_LIGHT);
 
   ZENSHINR();
   
   MAE;
   Wait(40);
   Off(OUT_AC);
  
   while(SENSOR_2 >= WHITE ){
         MIGIMUKI;
          }
   Off(OUT_C);

   ZENSHINL();
   Wait(80);
   
   while(SENSOR_2 < WHITE ){
         OnFwd(OUT_A);
          }
   OnFwd(OUT_AC);
   Wait(25);
   Off(OUT_AC);
   sp2;
   OnRev(OUT_B);
   Wait(80);
   Off(OUT_B);
   
   
   MAE;
   Wait(50);
   Off(OUT_AC); 
   
   Wait(100);
    
   while(SENSOR_2 >= WHITE ){
         OnRev(OUT_A);
          }
   
   while(SENSOR_2 < WHITE ){
         OnRev(OUT_A);
          }
  
   while(SENSOR_2 >= WHITE ){
         OnRev(OUT_A);
          }
   CURVEL();
   
   while(SENSOR_2 >= WHITE ){
         OnFwd(OUT_A);
          }
   
   while(SENSOR_2 < WHITE ){
         OnFwd(OUT_A);
          }
  
   while(SENSOR_2 >= WHITE ){
         MIGIMUKI;
          }
   
   CURVEL();

   while(SENSOR_2 >= WHITE ){
         OnFwd(OUT_A);
          }
   
   while(SENSOR_2 < WHITE ){
         OnFwd(OUT_A);
          }
  
   while(SENSOR_2 >= WHITE ){
        MIGIMUKI
          }
   CURVEL(); 

反省

 今回の課題は前回の課題よりロボットを作るのは比較的簡単だった。しかし、プログラミングでつまずいた。前回の課題では前後左右の動きしかしなかったので今回の課題は前回とのギャップでとても難しかった。特に難しかったのが急カーブだ。初め急カーブを曲がるにはタイヤを片方前で片方後ろに回すことを知らず、単純に片方のタイヤだけ動かしていた。結局このこと知っても間に合わなかった。ロボットにはこういう細かいことも動作を作用することがわかった。こういうところがロボットを作るたのしさだと思った。次回の課題は完成させられるようにしたい。


添付ファイル: fileIMG_1388.JPG [詳細] fileIMG_1387.JPG [詳細] fileIMG_1386.JPG [詳細] file2018a-mission2.png 4件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-20 (金) 00:14:37 (26d)