今回の課題は、「各自の名前の中の一文字をA4用紙の中に書きなさい。 ただし7画以上の文字を選ぶこと。もし7画以上の文字がない場合には合計7画以上になるように複数の文字を書きなさい。」(2015年度 課題1より)である。
最初私たちは上下に動くロボットを作り、それを車体の後ろに取り付けるというシンプルなロボットを作った。しかしこのロボットには欠陥があった。車体の後ろにつけたことによって回転するときに誤差が大きくとてもA4の紙には収まらなかった。このことから次に車体を改造して四つのタイヤの真ん中にペンが来るようにした。しかし今度は誤差は少なくなったものの、ペンの上げ下げするところがうまくいかなくなり結局このペンを上げ下げするロボットは見送ることとなった。
次に私たちは車体を左右に曲げることは諦めてペン自体を動かすことにした。
これはペンを左右に動かす部分である。左のぎざぎざになっている所をモーターにかませて左右に動かす。真ん中のモーターで上げ下げする。ここまではすんなりできた。問題はこの可動部をどのようにしてモーターにかませるかだった。この部分は動くので完全に固定するわけにはいかないので私たちははさむことにした。下記の写真のようにパイプを使うことにより安定性もあり、ナチュラルに動くようになった。
後はこの装置を前後に動く土台につけて完成した。下記の写真のようになった。
私は「角」を書く。まず私は自分の字にどのような動きが必要か考えた。そしてまず全ての辺のプログラムを考え定義した。
#define naname OnRev(OUT_BC);Wait(10);Off(OUT_BC); //縦と横を同時に動かし斜めを書く #define naname_return OnFwd(OUT_BC);Wait(10);Off(OUT_BC); // #define yoko OnRev(OUT_B);OnFwd(OUT_C);Wait(7);Off(OUT_BC);//横に動く #define yoko_long OnRev(OUT_B);Wait(20);Off(OUT_B); // #define yoko_long_return OnFwd(OUT_B);Wait(20);Off(OUT_B); // #define tate OnFwd(OUT_C);Wait(20);Off(OUT_C); //縦に動く #define tate_short OnRev(OUT_C);Wait(17);Off(OUT_C); // #define up OnFwd(OUT_A);Wait(5);Off(OUT_A); //ペンを上げる #define down OnRev(OUT_A);Wait(5);Off(OUT_A); //ペンを下げる
モーターAはペン、モーターBは横、モーターCは縦である。
私は上から順に書いていくことにした。上のななめを使う所を先に書いて次に横の線を全部書いて次に縦の線を描くことにした。
#define naname OnRev(OUT_BC);Wait(10);Off(OUT_BC); #define naname_return OnFwd(OUT_BC);Wait(10);Off(OUT_BC); #define yoko OnRev(OUT_B);OnFwd(OUT_C);Wait(7);Off(OUT_BC); #define yoko_long OnRev(OUT_B);Wait(20);Off(OUT_B); #define yoko_long_return OnFwd(OUT_B);Wait(20);Off(OUT_B); #define tate OnFwd(OUT_C);Wait(20);Off(OUT_C); #define tate_short OnRev(OUT_C);Wait(17);Off(OUT_C); #define up OnFwd(OUT_A);Wait(5);Off(OUT_A); #define down OnRev(OUT_A);Wait(5);Off(OUT_A); task main () { down; Wait(100); naname; Wait(100); yoko; Wait(100); naname_return; Wait(100); up; Wait(100); OnFwd(OUT_B);Wait(12);Off(OUT_B);//左上の角にもっていく Wait(100); down; Wait(100); yoko_long; Wait(100); up; Wait(100); OnFwd(OUT_C);Wait(7);Off(OUT_C);//一つ下の段に移動する Wait(100); down; Wait(100); yoko_long_return; Wait(100); up; Wait(100); OnFwd(OUT_C);Wait(7);Off(OUT_C);//一つ下の段に移動する Wait(100); down; Wait(100); yoko_long; Wait(100); up; Wait(100); OnRev(OUT_C);Wait(12);Off(OUT_C);//右上に持っていく Wait(100); down; Wait(100); tate; Wait(100); up; Wait(100); OnFwd(OUT_B);Wait(12);Off(OUT_B);//一つ左に移動する Wait(100); OnRev(OUT_C);Wait(13);Off(OUT_C);//突き抜けないように一番下の横の線に移動する Wait(100); down; Wait(100); tate_short; Wait(100); up; Wait(100); OnFwd(OUT_B);Wait(12);Off(OUT_B);//一つ左に移動する Wait(100); down; Wait(100); tate; }
一つ一つの動作の間に停止を作ることによって綺麗に書けるようになった。
私はこの課題がもっと簡単なものだと思っていた。始めてみるとまったくうまくいかなくて結果的に毎日放課後に集まらなくてはならなくなった。でもその分自分たちの作ったロボットはとてもよくできていたと思うし、満足のいく結果になった。この課題は大学に入ってから間違いなく一番時間をかけた課題であり、一番意義のあるものとなったので良かったと思う。