お題の文字が「貴」ということで最後のはらいを除き縦横の直線で表現できるので、Y軸を四輪タイヤによる走行、X軸をアームの可動によって文字を書くことにした。サンプルの車ロボットをそのまま使い、その上に新造したアーム機構を取り付けた。ペンの上下まで搭載するとアームの重量が増し制御しにくくなったため、今回は一筆書きにすることにした。
車体前部にアーム機構を取り付けたためにバランスが悪くなっている。対策として後方に余っていた大型のタイヤを取り付けたが完全には重心を真ん中にできていない。
アームはモーターBでギアを回転させ、アームをX軸方向に動かす。
最大延長時のアーム。ペンを固定するのにブロックを多く使ってしまい重みで傾いている。
ギアの噛みをよくするために2つのギアで挟んでいる。
アームがレールを外れないよう抑える役目のタイヤ。またアームがずれないようにブロックでレールを作った。
#define WAIT 100 task main() { OnRev(OUT_B);Wait(50); //上部、「中」部分 Off(OUT_B);Wait(WAIT); OnFwd(OUT_A+OUT_C);Wait(15); Off(OUT_AC);Wait(WAIT); OnFwd(OUT_B);Wait(50); Off(OUT_B);Wait(WAIT); OnRev(OUT_AC);Wait(50); Off(OUT_AC);Wait(WAIT); OnRev(OUT_B);Wait(25); Off(OUT_B);Wait(WAIT); OnRev(OUT_AC);Wait(5); Off(OUT_AC);Wait(WAIT); OnFwd(OUT_AC);Wait(25); //「中」ここまで OnRev(OUT_B);Wait(25); //「一」 OnFwd(OUT_B);Wait(50); Off(OUT_B);Wait(WAIT); OnFwd(OUT_AC);Wait(5); //「貝」に移動 Off(OUT_AC);Wait(WAIT); OnRev(OUT_B);Wait(50); Off(OUT_B);Wait(WAIT); repeat(2) { OnFwd(OUT_AC);Wait(15); //目の右側から中の線を書く部分 Off(OUT_AC);Wait(WAIT); OnFwd(OUT_B);Wait(50); OnRev(OUT_B);Wait(50); Off(OUT_B);Wait(WAIT); } OnFwd(OUT_AC);Wait(15); Off(OUT_AC);Wait(WAIT); OnFwd(OUT_B);Wait(50); Off(OUT_B);Wait(WAIT); OnRev(OUT_AC);Wait(45); OnFwd(OUT_AC);Wait(45); Off(OUT_AC);Wait(WAIT); OnRev(OUT_B);Wait(16); Off(OUT_B);Wait(WAIT); OnFwd(OUT_AC); //「ハ」の左側 OnFwd(OUT_B);Wait(20); OnRev(OUT_AC); OnRev(OUT_B);Wait(20); Off(OUT_ABC);Wait(WAIT); OnRev(OUT_B);Wait(16); Off(OUT_B);Wait(WAIT); OnFwd(OUT_AC); //「ハ」の右側 OnRev(OUT_B);Wait(20); OnRev(OUT_AC); OnFwd(OUT_B);Wait(20); Off(OUT_ABC);Wait(WAIT); }
書き順がうまく考えられなかった為に一般化できずプログラムが長くなってしまった。2重書きをできるだけ避けたつもりである。
#define WAIT 100
各動作後、反動が予想されるところには一定時間の待機時間を命令した。WAITとする。
・ロボットの制作に時間がかかりプログラムにかける時間が少なかった。 ・ペンが紙に引っかかり、思うように書けることが少なかった。 ・パーツ不足。もう少し計画的にパーツを使っていきたい。
プログラムがそれぞれ特別の動作になってしまい短縮したプログラムが書けなかったのは残念である。各部位に分けてサブルーチンを制作できればよかったが、各モーターの動作時間を1アクションごとに変えるために変数計算が多くなりそうで時間的に見送った。できるとすれば「口」を書くプログラムを上の「中」部分と下の「目」(または「貝」)部分で共通化させれたかもしれない。 ロボットももう少し丈夫なものを目指したい。