目次 [#j7445339]
#contents
*課題 [#v81b72a6]
課題は書道ロボットの作成。

A4用紙に自分の名前の7画以上の漢字を書くこと。

今回は「吾」を書くことが課題。
*ロボットの説明 [#w6aacd4d]
&ref(./IMG_1201.JPG);
&ref(./IMG_1204.JPG);

四輪車のロボット本体にペンを持つアームを付けた形となっている。

ロボットの本体は今まで授業で使っていたものをそのまま使用している。

右の写真のようにレゴパーツをうまく使ってペンを持たせているので、ペンの付け替えが容易となるように工夫している。

ペンをしっかり固定できているのでアームを下げた時もペンがずれないようにしている。
*書き順 [#te134d77]
&ref(./IMG_1214.JPG);
なるべく正規の書き順通りに書くようにしたが、プログラムを簡単にするため「口」の部分は書き順が異なっている。

*プログラム [#y084cd05]
**定義 [#l574076f]
 #define TURN_TIME 92  //回転時間92秒
 #define turn_left OnRev(OUT_A);OnFwd(OUT_C);Wait(TURN_TIME);Off(OUT_AC);  //左回転
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_AC);  //右回転
 #define go_straight(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);  //t秒直進
 #define back_straight(s) OnRev(OUT_AC);Wait(s);Off(OUT_AC);  //s秒後退
 #define arm_down OnFwd(OUT_B);Wait(10);Off(OUT_B);  //アーム(ペン)を下げる
 #define arm_up OnRev(OUT_B);Wait(10);Off(OUT_B);  //アーム(ペン)を上げる
 #define half_turn(u) OnFwd(OUT_A);OnRev(OUT_C);Wait(u);Off(OUT_AC);  //u秒右回転
TURN_TIMEは4回でちょうど1回転するように調節している。

half_turnは三画目を書くために使用している(詳しくは後述)

直進や後退は必要に応じて時間を変えられるように定義してある。
**プログラム [#za10657b]
 task main()
 {
     arm_down;          //一画目
     go_straight(80);
     arm_up;
     go_straight(60);
     turn_right;
     back_straight(60);
     arm_down;           //二画目
     go_straight(60);      
     arm_up;
     go_straight(30);
     turn_left;
     back_straight(150);
     arm_down;          //三画目
     go_straight(80);
     half_turn(30);
     arm_up;
     half_turn(62);
     go_straight(90);
     turn_right;
     back_straight(190);
     arm_down;          //四画目
     go_straight(100);
     arm_up;
     go_straight(20);
     turn_left;
     back_straight(100);
     repeat(4){           //「口」
         arm_down;
         go_straight(60);
         arm_up;
         go_straight(60);
         turn_left;
         back_straight(130);
     }
 }
中心とペンがずれていたので調節が難しかったが、直進と後退をうまく使って書けるようにしてある。

三画目は「折れ」がある一画となっているが、これを二画に分けるときれいにつなげるのが難しかったり、プログラムが複雑なものになってしまうのでhalf_turn(u)で定義した右回転を利用して一画で書けるように工夫してある。

「口」の部分はrepeatを使うことでプログラムをなるべく簡単なものにしている。

*まとめ [#l17ba8cb]
文字を書くという課題に対してはいびつながらも達成できたと言ってよいだろうと思う。

しかし、ペンを下げる速度が速くてペン先が潰れてしまったので、Floatなどを使って改善すべきだったと思う。

また、その時々によって文字のバランスにばらつきがあるので、文字を小さくするなどして誤差を減らせるようにすべきだったと思う。
また、中心とペンがずれていたことで調節に手間取ったので、ペンの位置も改善すべきだったと思う。

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