[[2019a/Member] 目次

課題1

これまでに住んだことのある地名の中から2文字以上かつ総画数が12画のものを選び、それをA4用紙に書くロボットを製作せよ。

自分は出身地である石川県の「金沢」という地名を選んだ。

ロボットの説明と書き順

ロボット本体

ロボットはシンプルなもの。タイヤが前2つ(モーターあり)と後ろ1つ(モーターなし)となっている。後輪に関しては1つなので360度回転するような仕組みにしている。

robot1.jpeg

ペンの上げ下げはモーター1つで行っている。ペンの位置が前タイヤ2つの中心を結んだ線上からは少しずれているのでプログラミング時に注意。(回転するときペンの位置が回転の中心ではない)

robot2.jpeg

書き順について

「金沢」という字を書くにあたって文字本来の書き順でロボットを動かすと無駄な動きが多くなるので今回はできるだけ無駄がなくなるような書き順を変更した。

kanazawa1.png

プログラムを書く

下準備をする

プログラムを書きやすくかつ、わかりやすくするために"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;

}

完成した文字

kanazawa2.png

考察

良かった点

・ロボットがコンパクトなので作成が簡単であり、持ち運びや電池の交換が楽だった。

・"define"を使うことで毎回動作を細かく書く必要がないため書き間違いがかなり減ったと思う。

反省点

・ペンの位置がタイヤの間の真ん中ではなかったのでそれによるペン先の回転時のずれを修正するためのプログラミングを書かなければならなかった。正直、ペンの位置がずれていてもプログラムを頑張れば関係ないだろうと予想していたのでロボットはあまり改良はしなかった。

→これを修正しておけばより正確な文字が書けたのではないかと思う。

・電池の消費状況でモーターの回転状態が変わることがある。(特に電池が消耗しているとき)


添付ファイル: filekanazawa1.png 5件 [詳細] filekanazawa2.png 6件 [詳細] filerobot2.jpeg 5件 [詳細] filerobot1.jpeg 6件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-06 (木) 12:50:29 (79d)