[[2019a/Member] 目次
これまでに住んだことのある地名の中から2文字以上かつ総画数が12画のものを選び、それをA4用紙に書くロボットを製作せよ。
自分は出身地である石川県の「金沢」という地名を選んだ。
ロボットはシンプルなもの。タイヤが前2つ(モーターあり)と後ろ1つ(モーターなし)となっている。後輪に関しては1つなので360度回転するような仕組みにしている。
ペンの上げ下げはモーター1つで行っている。ペンの位置が前タイヤ2つの中心を結んだ線上からは少しずれているのでプログラミング時に注意。(回転するときペンの位置が回転の中心ではない)
「金沢」という字を書くにあたって文字本来の書き順でロボットを動かすと無駄な動きが多くなるので今回はできるだけ無駄がなくなるような書き順を変更した。
プログラムを書きやすくかつ、わかりやすくするために"define"使用する。
#define pendown OnFwd(OUT_A,30);Wait(100);Off(OUT_A);//ペン下げる #define penup OnFwd(OUT_A,-30);Wait(100);Off(OUT_A);//ペン上げる #define left OnFwd(OUT_B,-30);OnFwd(OUT_C,30);//左旋回 #define right OnFwd(OUT_B,30);OnFwd(OUT_C,-30);//右旋回 #define front OnFwd(OUT_BC,20);//前進 #define back OnFwd(OUT_BC,-20);//後退 #define stay Off(OUT_BC);Wait(400);//停止
説明すると"pendown""penup"はペンの上げ下げ、"front""back"は前進と後退、"left""right"はその場で左または右に回転する指示となっている。"stay"は停止の指示で書き終わりや動作の終わりに入れることで動きがごちゃごちゃしないようにできる。
task main() { pendown;//金1画目 front; Wait(600); stay; penup;
left;//移動 Wait(700);
back;//2画目 Wait(400); stay; pendown; front; Wait(700); stay; penup;
right;//移動 Wait(350); stay;
back;//3画目 Wait(300); stay; pendown; back; Wait(400); stay; penup;
left;//移動 Wait(300); front; Wait(300); right; Wait(300); stay;
front;//4画目 Wait(80); pendown; back; Wait(500); stay; penup;
left;//移動 Wait(300); front; Wait(300); right; Wait(320); stay;
front;//5画目 Wait(400); stay; pendown; back; Wait(800); stay; penup;
front;//移動 Wait(600); right; Wait(400); stay; back; Wait(50);
pendown;//6画目 back; Wait(100); stay; penup;
front;//移動 Wait(200); right; Wait(800); stay;
pendown;//7画目 back; Wait(100); stay; penup;
front;//移動 Wait(200); left; Wait(380); back; Wait(300); stay;
pendown;//8画目 front; Wait(500); stay; penup;//金おわり
back;//金から沢へ移動 Wait(1000); left; Wait(400); front; Wait(200);
pendown;//沢1画目 back; Wait(150); stay; penup;
left;//移動 Wait(400); stay; front; Wait(200); stay; right; Wait(400); stay; back; Wait(50);
pendown;//2画目 back; Wait(150); stay; penup;
front;//移動 Wait(80); left; Wait(800); stay;
pendown;//3画目 front; Wait(200); stay; penup;
back;//移動 Wait(400); stay; right; Wait(420); stay; back; Wait(100);
pendown;//4画目 back; Wait(250); stay; penup;
front;//移動 Wait(300); right; Wait(800); back; Wait(180); stay;
pendown;//5画目 front; Wait(250); stay; penup;
front;//移動 Wait(100); left; Wait(800); back; Wait(180); stay;
pendown;//6画目 front; Wait(300); stay; penup;
front;//移動 Wait(150); right; Wait(800); back; Wait(200); stay;
pendown;//7画目 back; Wait(700); stay; penup;
front;//移動 Wait(780); stay; left; Wait(400); stay; back; Wait(400); stay;
pendown;//8画目 back; Wait(500); penup; stay; }
・ロボットがコンパクトなので作成が簡単であり、持ち運びや電池の交換が楽だった。
・"define"を使うことで毎回動作を細かく書く必要がないため書き間違いがかなり減ったと思う。
・ペンの位置がタイヤの間の真ん中ではなかったのでそれによるペン先の回転時のずれを修正するためのプログラミングを書かなければならなかった。正直、ペンの位置がずれていてもプログラムを頑張れば関係ないだろうと予想していたのでロボットはあまり改良はしなかった。
→これを修正しておけばより正確な文字が書けたのではないかと思う。
・電池の消費状況でモーターの回転状態が変わることがある。(特に電池が消耗しているとき)