目次
これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを作成せよ。
山梨県出身なので山梨を選んだ。
今回作成したロボットはx軸(左右)、y軸(前後)で動きペンを操作する方式を採用した。
理由は紙の上を動くロボットに比べ、直角の動きが確実でプログラミングも比較的簡単に書くことができると考えたからだ。
最初のモデルでは1つのギアでx軸を動かしていたが、動作が早くなり安定しなかったので大きめのギアをかませ、動作を遅くした。さらにギアを2つかませることで安定させた。
また、伸びきったときに前後にぐらついてしまい安定して字が書けないという問題が生じたが、レール部分を延長しレールをブロックで挟むことでぐらつきを抑えた。
ペンの機構はギアについた棒にペンをつけるといった比較的簡単な機構にした。
最初のモデルは下左図のようであったがこれでは書き始めに余分な線ができてしまう。
そこで下右図のように軸とペン先の距離を短くし、ブレを抑えることで余分な線を解消した。
通常とは違う書き方にし、画数を少なくしたりプログラミングを簡単にしたりした。
x軸(左右)、y軸(前後)、ペンの上げ下げをあらかじめ定義した。
またペンの上げ下げの際に待ち時間を設けることで動作の安定性を高めた。
#define pen_down OnRev(OUT_B);Wait(30);Off(OUT_B);Wait(100);//ペンを上げる #define pen_up OnFwd(OUT_B);Wait(30);Off(OUT_B);Wait(100);//ペンを下げる #define mae(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);//前進する #define ushiro(z) OnRev(OUT_C);Wait(z);Off(OUT_C);//後退する #define chijimu(m) OnFwd(OUT_A);Wait(m);Off(OUT_A);//x軸(左右)方向にペンを縮ませる #define nobiru(q) OnRev(OUT_A);Wait(q);Off(OUT_A);//x軸(左右)方向にペンを伸ばす
山梨という字を画数や部分でサブルーチンにより分け、変更しやすくした。
二画目と三画目を一気に書くことでプログラムを単純化した。
sub ichikaku()//山の一画目 { pen_down; mae(030); Wait(100); pen_up; } sub nikakusankaku()//山の二画、三画目 { ushiro(021); chijimu(030); Wait(100); pen_down; mae(015); Wait(100); nobiru(060); Wait(100); ushiro(020); Wait(100); pen_up; }
上の禾と下の木の最後の二画を一気に書くことでプログラムを単純化した。
sub yamakaranashi()//山から梨に行く { chijimu(037); mae(027); Wait(100); } sub nashiichikakunikaku()//梨の一画と二画 { pen_down; chijimu(020); pen_up; mae(007); pen_down; nobiru(020); Wait(100); pen_up; } sub nashisankaku()//梨の三画 { chijimu(010); ushiro(010); pen_down; mae(017); Wait(100); pen_up; } sub nashiyongo()//梨の四画と五画 { nobiru(015); ushiro(005); Wait(100); pen_down; OnFwd(OUT_A); Wait(001); OnRev(OUT_C); Wait(015); Off(OUT_AC); Wait(100); OnFwd(OUT_C); Wait(005); OnFwd(OUT_A); Wait(010); Off(OUT_AC); pen_up; } sub nashirokunana()//梨の六画と七画 { ushiro(028); nobiru(035) pen_down; mae(009); Wait(100); pen_up; ushiro(015); nobiru(016); pen_down; mae(018); Wait(100); pen_up; } sub nashinoki()//梨の木の部分 { mae(005); chijimu(055); Wait(100); pen_down; nobiru(058); Wait(100); pen_up; ushiro(010); chijimu(030); pen_down; mae(030); Wait(100); pen_up; chijimu(030); pen_down; OnRev(OUT_C); Wait(001); OnRev(OUT_A); Wait(030); Off(OUT_AC); Wait(100); OnFwd(OUT_C); Wait(001); OnRev(OUT_A); Wait(030); Off(OUT_AC); pen_up; }
梨のリの部分が少し上に行き過ぎてしまったが比較的うまく書けて良かった。
書き始めと書き終わりの余分な線が解消されていて良かった。
ロボットを作り実際に書かせて見ると、ロボット自体とプログラミングの両方に様々な問題が生じ、それを解決するのにとても苦労した。x軸方向の安定性が一番の不安要素だったが本番でうまく字が書けたので良かったと思っている。今回の課題でプログラミングをいかに簡単にするかの重要性とその仕方について学ぶことができたので次の課題に活かしたい。