[[2014b/Member]]

*課題について [#s0799af1]


 自分の名前の一文字を書く書道ロボットの作成をし、そのプログラムを組んだ。今回は貴の字を書くようにした。

*ロボット [#u43e6543]

 ロボットの写真はないが、外観は通常走行する物の右側にペンを上げ下げする機構を取り付けた。人間が右手で字を書くようなものに似ており、ギアを噛み合わせペンが上下し字をかけるようにした。ギアの比を調節することでペンがゆっくり上に触れるなどの工夫をした。

*プログラム [#f2221982]

定義は以下のとおりである。
主に長い線や短い線など貴の字の主要なプログラムを定義することにより簡略化をはかる。
 #define SPEED 50 //車輪を回す出力
 #define TURN_TIME1 500 //90度回転するための時間
 #define TURN_TIME2 300 //最後のはらいを書くために回転するための時間
 #define TIME1 1000 //長い直線を書くための時間
 #define TIME2 800 //短い直線を書くための時間
 #define TIME3 500 //長い直線の半分の時間
 #define TIME4 200 //移動時間
 #define TIME5 333 //長い1/3の時間
 #define TIME6 275 //短い1/3の時間
 #define GO1 OnFwd(OUT_BC,SPEED);Wait(TIME1);Off(OUT_BC); //長い直線のプログラム
 #define GO2 OnFwd(OUT_BC,SPEED);Wait(TIME2);Off(OUT_BC); //短い直線のプログラム
 #define GO3 OnRev(OUT_BC,SPEED);Wait(TIME3);Off(OUT_BC); //長い直線の半分のプログラム
 #define GO4 OnFwd(OUT_BC,SPEED);Wait(TIME4);Off(OUT_BC); //移動のプログラム
 #define GO5 OnFwd(OUT_BC,SPEED);Wait(TIME5);Off(OUT_BC); //長い1/3のプログラム
 #define GO6 OnFwd(OUT_BC,SPEED);Wait(TIME6);Off(OUT_BC); //短い1/3のプログラム
 #define GO7 OnRev(OUT_BC,SPEED);Wait(TIME6);Off(OUT_BC);
 #define RIGHT_TURN1 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);Wait(TURN_TIME1);Off(OUT_BC); // その場で90度右旋回のプログラム
 #define RIGHT_TURN2 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);Wait(TURN_TIME2);Off(OUT_BC); //その場で少なめに右旋回のプログラム
 #define LEFT_TURN1 OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);Wait(TURN_TIME1);Off(OUT_BC); //その場で90度左旋回のプログラム
 #define LEFT_TURN2 OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);Wait(TURN_TIME2);Off(OUT_BC); //その場で少なめに左旋回のプログラム
 #define ARM_POWER 30 //ペンを上げ下げための出力
 #define ARM_TIME 100 //ペンを上げ下げする時間
 #define ARM_DOWN OnFwd(OUT_A,ARM_POWER);Wait(ARM_TIME);Off(OUT_A); //ペンを下ろすためのプログラム
 #define ARM_UP OnRev(OUT_A,ARM_POWER);Wait(ARM_TIME);Off(OUT_A); //ペンを上げるためのプログラム


ここから貴の字の上半分を書いていく。
 
 task main()
 {
  ARM_DOWN; //貴の上半分
  GO2; //貴の一画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO1; //貴の二画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO2; //貴の三画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO1; //貴の四画目
  GO3;
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO1; //貴の五画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO3; //貴の六角目
  GO1; //同じく貴の六角目
  ARM_UP; //貴の上半分終了

ここからは貴の字のした半分を書く。

  LEFT_TURN1; //貴の下半分 貝の字
  LEFT_TURN1;
  ARM_DOWN;
  GO1; //貝の一画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO2; //貝の二画目
  ARM_UP;
  RIGHT_TURN1
  ARM_DOWN;
  GO1; //貝の三画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO2; //貝の四画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO5;
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO2; //貝の五画目
  ARM_UP;
  LEFT_TURN1;
  ARM_DOWN;
  GO5;
  ARM_UP;
  LEFT_TURN1;
  ARM_DOWN;
  GO2; //貝の六画目
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO5;
  ARM_UP;
  RIGHT_TURN1;
  ARM_DOWN;
  GO6;
  ARM_UP;
  LEFT_TURN2;
  LEFT_TURN2;
  ARM_DOWN;
  GO6; //貝の七画目
  GO7;
  ARM_UP;
  RIGHT_TURN2;
  RIGHT_TURN2;
  ARM_DOWN;
  GO6;
  ARM_UP;
  LEFT_TURN2;
  ARM_DOWN;
  GO6; //貝の八画目
  ARM_UP; //貝の字終了
 }

*考察と反省 [#va0fe08d]



-今回はもともとあったロボットに簡単な腕を取り付けただけなので、プログラムを考えるときが大変だった。なので、ロボットの方に手を加えても良かったのかもしれない。実際に書いた字は最初はバランスが悪かったが、スピードや時間を調整して何の字かわかるようになった。最初に直線のプログラムを定義しており簡単に調整ができたため、如何に定義することが大切か分かった。
-サーボモータの機能を使いこなせれば90度旋回や斜めに回転などをプログラムの微調整をせずともできると分かった。電池の減少の影響も受けないことも利点なので次回からのプログラムには取り入れていきたい。
-自分でプログラムを考える最初の課題でプログラムのエラーがでて戸惑ったが、一つずつ探して何とかできた。スペルミスなどの凡ミスが多いので克服したい。また、今回は字を形にするので精一杯で書き順はめちゃくちゃだった。そのようなところも頭に入れられるようになりたい。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS