2007b/A1

目次

 ロボットの説明

IMG_0182.jpg

 私たちのロボットは後輪駆動で、ペンの上げ下げはモーターの回転に直接つなげた棒にくっつけたペンが上がったり下がったりすることで行われます。

IMG_0184.jpg

 モーターが右側についている為、バランスをとる為に反対側にただの飾りにしかならないタイヤがついています。

IMG_0179.jpg
IMG_0178.jpg

 「市」を書くプログラム

#define MOVE_TIME 270
task main()
sub turn_left()
{  OnFwd(OUT_A+OUT_C);
   OnRev(OUT_B);
   Wait(55);
   OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(MOVE_TIME);
   OnRev(OUT_A+OUT_B+OUT_C);
   Wait(100)
}
sub turn_left()
{  OnFwd(OUT_A+OUT_C);
   OnRev(OUT_B);
   Wait(55);
   OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(MOVE_TIME/2);
   OnRev(OUT_A+OUT_B+OUT_C);
   Wait(100)
}
{
  1  OnFwd(OUT_A+OUT_B+OUT_C); //ペンをつけて前進 1〜3行目;一画目
  2  Wait(40); //
  3  OnRev(OUT_B); //ペンを離す
  4   turn_right();
  5  OnFwd(OUT_A+OUT_C); //
  6  Wait(80); //
  7   OnRev(OUT_A+OUT_C); //
  8  OnFwd(OUT_B); //ペンをつける 8〜11行目;二画目
  9  OnRev(OUT_A+OUT_C); //前進
  10  Wait(160); //
  11  OnRev(OUT_B); //ペンを離す
  12  OnFwd(OUT_A+OUT_C); //前進 12〜16行目;三画目の位置まで移動
  13  Wait(120); //
  14  turn_left(); //
  15  OnFwd(OUT_A+OUT_C); //
  16  Wait(40); //
  17  OnFwd(OUT_A+OUT_B+OUT_C); //ペンをつけて前進 17〜21行目;三画目
  18  Wait(80); //
  19  OnRev(OUT_A+OUT_B+OUT_C); //
  20  Wait(80); //
  21  turn_left(); //ペンを離して左折 21行目;四画目の位置まで移動
  22  OnFwd(OUT_A+OUT_B+OUT_C); //ペンをつける 22〜34行目;四画目の前半
  24  turn_right(); //
  25  OnFwd(OUT_A+OUT_B+OUT_C); //ペンをつける 25〜26行目;四画目の後半
  26  OnRev(OUT_A+OUT_B+OUT_C); //ペンを離す 26〜33行目;五画目
  27  Wait(80); //
  28  turn_right(); //
  29  OnFwd(OUT_A+OUT_C) 
  30  turn_right(); //
  31  OnFwd(OUT_A+OUT_C); //前進
  32  Wait(40); //
  33  OnRev(OUT_A+OUT_C); //後退
  34  OnFwd(OUT_B); //ペンをつけて後退 34〜36行目;五画目
  35  Wait(160); //
  36  Off(OUT_A+OUT_B+OUT_C); //ペンを離して停止     
}

 「本」を書くプログラム

 #define MOVE_TIME 260  // MOVE_TIMEという定数を定義(値は260)
 sub turn_left()
 {
   OnFwd(OUT_A+OUT_C);
   OnRev(OUT_B);
   Wait(55);
   OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(MOVE_TIME);
   OnRev(OUT_A+OUT_C+ OUT_B);
   Wait(100);
 }
 sub turn_right()
 {
   OnFwd(OUT_A+OUT_C);
   OnRev(OUT_B);
   Wait(55);
   OnFwd(OUT_A);
   OnRev(OUT_C);
   Wait(MOVE_TIME/2);
   OnRev(OUT_A+OUT_C+ OUT_B);
   Wait(100);
 }
 task main()
 {
   OnRev(OUT_B);      //ペンを上げる
   Wait(10);
   OnFwd(OUT_A+OUT_C); //直進
   Wait(30);
   OnFwd(OUT_B);     //一画目
   Wait(200);
   OnRev(OUT_B);     //ペンを上げる
   Wait(30);
   turn_left();       // 左90度に曲がる
   OnFwd(OUT_A+OUT_C); //直進
   Wait(120);
   turn_left();       // 左90度に曲がる
   OnFwd(OUT_A+OUT_C); //直進
   Wait(160);
   turn_left();       // 左90度に曲がる
   OnFwd(OUT_A+OUT_C); //直進
   Wait(60);
   OnFwd(OUT_B);     //二画目
   Wait(200);
   OnRev(OUT_B);      //ペンを上げる
   Wait(60);
   OnRev(OUT_A+OUT_C); //後退
   Wait(140);
   turn_right();       // 右45度に曲がる
   OnRev(OUT_A+OUT_C); //後退
   Wait(30);
   OnFwd(OUT_A+OUT_C); //直進
   Wait(30);
   OnFwd(OUT_B);     //三画目
   Wait(140);
   OnRev(OUT_B);      //ペンを上げる
   Wait(60);
   OnRev(OUT_A+OUT_C); //後退
   Wait(200);
   turn_left();        // 左90度に曲がる
   OnRev(OUT_C+OUT_A); //後退
   Wait(30);
   OnFwd(OUT_A+OUT_C); //直進
   Wait(30);
   OnFwd(OUT_B);     //四画目
   Wait(140);
   OnRev(OUT_B);     //ペンを上げる
   Wait(60);
   OnRev(OUT_A+OUT_C); //後退
   Wait(100);
   turn_right();      // 右45度に曲がる
   OnRev(OUT_C+OUT_A); //後退
   Wait(100);
   OnFwd(OUT_C+OUT_A+OUT_B);//五画目
   Wait(40);
   Off(OUT_A+OUT_C+ OUT_B);//停止
 }

 苦労した点

 ロボットを作るにあたって、ペンを上げ下げする為の部品と、ロボット自体を動かす為の部品がなくてはいけないのですが、私たちのロボットはペンを上げ下げする部品にギアを使っている為に、車輪を回すのに丁度良い部品がなくなってしまいました。

 このロボットは、ペンを上げ下げするためのモーターが右に偏っている為に、必要最低限の部品だけにした場合右に傾いてしまって、全身する時にだんだんと右にカーブしてしまいます。

 動作の確認中に、コードが使えなくなってしまい、長いコードを使わなければならなくなってしまい、その処理に苦労しました。

 ペンの位置がロボットの回転軸がずれているので、ロボットの中心で線をイメージして動かすとうまく文字にならないので、そこをうまくコントロールするのに苦労しました。

 工夫した点

 このロボットはペンを上げ下げする為にギアを使っていて、四つの車輪を同じギアで動かすことはできません。なので、前輪を動かすことは諦めて、後輪のみを動かすことにしました。

 ペンを下ろしたままでカーブをした場合、ペンの位置を軸にして回転している訳ではないので、うまく直角に曲がる線は書けないので、したのプログラムを使って直角に曲がりました。

#define MOVE_TIME 270
task main()
{
   OnFwd(OUT_A+OUT_C);
   OnRev(OUT_B);
   Wait(55);
   OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(MOVE_TIME);
   OnRev(OUT_A+OUT_C+ OUT_B);
   Wait(100);
   Off(OUT_A+OUT_C+ OUT_B);
}

 プログラムに何かミスがあった場合にわかりやすくする為に、まずはカーブでのずれなどは気にせずに作ったプログラミングを用意し、そのあとに上に書いたような直角に曲がるラインを書くためのプログラムを入れていくという方法でプログラムを作りました。


2007b/A1


添付ファイル: fileIMG_0178.jpg 382件 [詳細] fileIMG_0179.jpg 380件 [詳細] fileIMG_0180.jpg 219件 [詳細] fileIMG_0182.jpg 326件 [詳細] fileIMG_0183.jpg 181件 [詳細] fileIMG_0184.jpg 355件 [詳細]

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