目次
プログラムを簡単するためにロボットの動きをアームの上げ下げ、前後(y軸)の動き、アームの左右(x軸)の動きの3つの動作に分けた。
アームはペンをブロックにゴムでつけ、それをモータで上下させるシンプルなものにした。
後輪を回転させることで前後の動きをさせた。
x軸の動きが今回の課題で最も苦労した点だった。ブロックを組み合わせることで写真のレールのようなものを作り、その上をアームが滑るようにした。
#define go(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);Wait(100); #define back(t) OnRev(OUT_B);Wait(t);Off(OUT_B);Wait(100); #define UP OnFwd(OUT_A);Wait(20);Off(OUT_A);Wait(100); #define DOWN OnRev(OUT_A);Wait(20);Off(OUT_A);Wait(100); #define go_left(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);Wait(100); #define go_right(t) OnRev(OUT_C);Wait(t);Off(OUT_C);Wait(100); task main() { UP; go_left(8); DOWN; go_left(16); UP; go_right(8); DOWN; go(24); go_right(8); back(16); go_left(16); go(16); go_right(8); UP; back(8); go_right(8); DOWN; go_left(16); UP; go_right(24); DOWN; go(16); go_left(32); back(16); UP; }
#define go(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);Wait(100); #define back(t) OnRev(OUT_B);Wait(t);Off(OUT_B);Wait(100); #define UP OnFwd(OUT_A);Wait(20);Off(OUT_A);Wait(100); #define DOWN OnRev(OUT_A);Wait(20);Off(OUT_A);Wait(100); #define go_left(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);Wait(100); #define go_right(t) OnRev(OUT_C);Wait(t);Off(OUT_C);Wait(100);
今回の課題では6つの動作を定義した。定義した内容は以下の通りである。
各動作の間に止まる時間を入れなければ文字の角がきれいに書けなかったのですべての動作に1秒間止まる動作を付けた。これらの動作を定義したことでメイン動作のプログラムを簡略化できた。
動作を少なくするために書き順などは無視した。横線を書く際、左から右へ書いたほうが上手く書けたため、なるべく左から右へ書くように工夫した。また、ペンの上げ下げを減らすためにつなげられる部分は一筆書きのように書いた。
上が本番で書い文字である。文字をきれいに書くことができたので、苦労して作業した甲斐があった。今回の課題では、アームを左右に動かすこと(x軸)が難しかった。ロボットを作ることに時間をかけたため、プログラミングを単純なものにできた。また、動作を3つに分けたことできれいな文字を書くことができた。文字を5cm四方程度の大きさにしたことも上手く書けた要因だと考えられる。改善点としては、動作をゆっくりにするためにギアの使い方を工夫することがあげられる。ロボットを動かしても最初は読める文字を書けなかったが、失敗を繰り返して上達できて楽しかった。