中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作せよ。日本の中枢機能の中心であり、2020年にはオリンピックも開催されるということで「東京」を選んだ。上の写真はロボットの全体を撮ったものである。ペンの上げ下げ、の3つから成っている。写真の下にあるタイヤは、y軸方向の移動と、ペンの上げ下げをやる時にロボット全体がペンのある方へ傾くのを防ぐために取り付けた。†モーターに歯数8の歯車をつけ、それに歯数40の歯車を噛ませ、タイヤに付けた歯数24を回すことでタイヤが回転し、前後に進むようになっている。†1枚目の部品に2枚目の部品を乗せる。横スライドを滑らかに行うために、1枚目の写真にあるようにブロックが上を滑るためのブリッジを導入した。文字を書いている途中で2枚目の写真の部品が回転して、同じ挙動を示さなくなるのを防ぐために、黒いブロックは2段積んだ。†モーターを回転させることで写真の黄色いパーツが上がり下がりするようになっている。黄色いパーツにペンを取り付けることでペンが上がり下がりする。横スライドする部分の上にペンを上げ下げする部分が付いているため、横に大きく動いた時にバランスが崩れてしまう。それを防ぐためにモーターとペンの上げ下げの部分を分離して左右に置くことでバランスを保てるようにした。一つ一つの動きをそのまま書くとプログラムが長くなりすぎると思ったため、サブルーチンを用いた。サブルーチンを用いたもうひとつの理由は、ロボットの挙動の調整を簡単にするためである。それぞれのサブルーチンに変数tを導入することで、tを変えるだけで動く時間をコントロールし、t以外の命令は同じ向きに動く命令であれば、全く同じ命令で動かせるようにした。用いた6つのサブルーチンは以下の通りである。pen_down(){OnFwd(OUT_C);Wait(30);Off(OUT_C);Wait(50);}これは紙をxy平面に置いた時の動きを命令するものである。上がペンを上げる命令、下がペンを下げる命令である。それぞれtを変えることで動く時間を変え、コントロールしている。それぞれの命令の最後にWait(50);があるのは、一つ一つの挙動の間に動かない時間を導入することで、自分が想定していない行動をロボットがとった時に止めやすくする、一つ一つの挙動を見やすくするという目的のために導入したものである。斜めに動かすサブルーチンは作っていない。その理由は、縦横移動やペンの上げ下げよりもはるかに使用頻度が低く、斜め線の中でも角度が違ったりするためである。これら6つのサブルーチンを使って、メインプログラムを構成していく。†pen_down();t=80;draw_LtoR();pen_up();t=70;draw_RtoL();t=5;go_back();pen_down();t=60;draw_LtoR();t=20;go_back();t=60;draw_RtoL();t=20;go_ahead();pen_up();t=10;go_back();pen_down();t=60;draw_LtoR();pen_up();t=30;draw_RtoL();t=20;go_ahead();pen_down();t=50;go_back();pen_up();上の命令は「東」の1画目から6画目までを書いている。2,3,5画目を繋げて一筆で書いているため、実際にロボットが書いたのは4画である。pen_down();t=40;OnFwd(OUT_B);OnFwd(OUT_A);SetPower(OUT_A,0);Wait(t);Off(OUT_AB);Wait(50);pen_up();t=40;OnRev(OUT_B);OnRev(OUT_A);Wait(t);Off(OUT_AB);Wait(50);pen_down();t=40;OnRev(OUT_B);OnFwd(OUT_A);Wait(t);Off(OUT_AB);Wait(50);pen_up();上の命令は「東」の7,8画目である。x軸方向の移動の速さと、y軸方向の移動の速さが違っていた。ロボットは移動の速さの違いを除いて、自分の思った通りの挙動を示した。そのため、斜め線を書く時は、ロボットを変えるのではなく、プログラムを調整することでロボットの挙動を調整した。具体的にはSetPower(OUT_A,0)という命令を使うことでy軸方向の移動の速さを遅くする(何も書かなければモーターは最小出力の0ではなく、最大出力の7で動く)。することで、x軸y軸を両方同時に動かした時よりも斜め線がx軸となす鋭角を小さくし、より自然な「東」を書けるようにした。†OnRev(OUT_A);Wait(40);Off(OUT_A);Wait(50);SetPower(OUT_A,7);t=40;go_back();pen_down();t=40;draw_RtoL();t=5;go_ahead();t=5;go_back();t=40;draw_RtoL();pen_up();t=10;draw_LtoR();t=5;go_back();pen_down();t=60;draw_LtoR();t=10;go_back();t=60;draw_RtoL();t=10;go_ahead();pen_up();t=30;draw_LtoR();t=12;go_back();pen_down();t=30;go_back();t=7;OnRev(OUT_A);OnFwd(OUT_B);Wait(t);Off(OUT_AB);Wait(50);pen_up();t=10;go_ahead();t=23;draw_RtoL();pen_down();t=7;OnFwd(OUT_A);OnFwd(OUT_B);Wait(t);Off(OUT_AB);Wait(50);pen_up();t=7;go_ahead();draw_LtoR();t=60;draw_LtoR();pen_down();t=7;OnFwd(OUT_A);OnRev(OUT_B);Wait(t);Off(OUT_AB);Wait(50);pen_up();「京」についても「東」と同様に、tを調整することで各画の長さ等を調整した。「東」を書き終えた時、ペンはx>0の領域にあるため、またプログラムを短くするために、1,2画目を一筆で書いた。2画目のx>0のところから書き始め、x軸負の方向に動かし、2画目の途中で1画目を書き、そのあと2画目の続きから描き始めるというプログラムにした。「京」の6画目のハネ、7,8画目については、SetPowerを用いずにx軸、y軸を同時に動かして斜め線を書いた。全体的に上手く書けたと思う。「東」は完璧と言ってもいいだろう。「京」については、1,2画目を繋げて書くのではなく、一画一画書けば、もっと綺麗に書けたと思う。それ以降の部分も「東」と同様に、良い出来である。「東」の7,8画目と「京」の7,8画目の斜め線の角度の違いがはっきりとわかるように書けていて良かった。