構想を決めるのに、そのロボットの調整に多くの時間を費やした。
チーム内で完全に意見が分かれ、始めは、シンプルさを追求して、
走行に、二つのモーターをそれぞれの車輪に使用し、一つの筆ペンをつける構想が思い浮かんだが、
プログラム上、何度も、走る方向を定めるというのは多大な労力を要する上に、プログラムが長くなってしまうという理由で、モーターを一つだけ、固定された車輪に使用し、残りの二つはペンに使用するという方式に決定した。
上の写真はロボットの最終的なフォルム
二本のアームを使用するということで、その両者のプログラム的な微調整に、かなりの試行錯誤を要求された。
何度もプログラムの数値のみを書き直して、それぞれのアームが、しっかりと紙にくっついているのか、それとも離れているのか、また、横の画数を書くときには、その距離をアームだけのパワーバランスだけで、調整するので、横から眺めながら、慎重に位置を調整した。
途中、どうしても、パワー調整だけでは、どうしようもなくなったので、アームの位置自体を変えたり、また、その重量的なバランスの不安定さから、本体との重さをブロックの位置を調整するなどして、再配置した。
また、ペン自体も書くときに不安定になりがちだったので、筆の柔軟性を保つということに重点をおいて、部品を継ぎ足すなどをして固定を試みた。
モーターの制御には、調整が数値でしやすいように、RotateMotor関数を使用し、回転数を指定することで、ペンを操作した。
また、マクロをあらかじめたくさん設定して、できるだけ、task main()内が短い行数になるように、努力した。また、そのマクロの名前は比較的わかりやすさを追求した結果、その画数を使用した。
#define ikkaku() RotateMoter(OUT_A,30,100);Off(OUT_A);OnFwd(OUT_C,30);Wait(200);Off(OUT_C);
[一画目]
#define nikaku() RotateMoter(OUT_B,30,50);Off(OUT_B);RotateMotor(OUT_A,30,50);Off(OUT_A);RotateMotor(OUT_B,30,-50);Off(OUT_B);RotateMotor(OUT_A,30,-60);Off(OUT_A);[二画目]
#define sankakuyonkaku() RotateMotor(OUT_B,30,50);Off(OUT_B);RotateMotor(OUT_A,30,30);Off(OUT_A);RotateMotor(OUT_B,30,-30);Off(OUT_B);OnFwd(OUT_C,35);Wait(200);Off(OUT_C);RotateMotor(OUT_B,30,30);Off(OUT_B);RotateMotor(OUT_A,30,-10);Off(OUT_A);RotateMotor(OUT_B,30,30);Off(OUT_B);OnRev(OUT_C,35);Wait(200);Off(OUT_C);RotateMotor(OUT_B,30,30);Off(OUT_B);[三画、四画目]
#define gokaku() RotateMotor(OUT_A,30,50);Off(OUT_A);OnFwd(OUT_C,30);Wait(400);Off(OUT_C);RotateMotor(OUT_B,30,-30);Off(OUT_B);RotateMotor(OUT_A,30,50);Off(OUT_B);RotateMotor(OUT_B,30,30);Off(OUT_B);[五画目]
#define rokunanahakkaku() RotateMotor(OUT_A,30,-10);Off(OUT_A);OnFwd(OUT_C,30);Wait(300);Off(OUT_C);RotateMotor(OUT_B,30,-30);Off(OUT_B);OnFwd(OUT_C,30);Wait(500);Off(OUT_C);RotateMotor(OUT_B,30,30);Off(OUT_B);RotateMotor(OUT_A,30,-10);Off(OUT_A);RotateMotor(OUT_B,30,-30);Off(OUT_B);OnRev(OUT_C,30);Wait(500);Off(OUT_C);RotateMotor(OUT_B,30,30);Off(OUT_B);RotateMotor(OUT_A,30,-10);Off(OUT_A);RotateMotor(OUT_B,30,-30);Off(OUT_B);OnFwd(OUT_C,30);Wait(500);Off(OUT_C);[六、七、八画]
#define kyujujuichikaku() RotateMotor(OUT_A,30,50);Off(OUT_A);RotateMotor(OUT_B,30,30);Off(OUT_B);OnFwd(OUT_C,30);Wait(500);Off(OUT_C);RotateMotor(OUT_B,30,-30);Off(OUT_B);RotateMotor(OUT_A,30,-50);Off(OUT_A);RotateMotor(OUT_B,30,30);Off(OUT_B);OnFwd(OUT_C,30);Wait(500);Off(OUT_C);RotateMotor(OUT_B,30,-30);Off(OUT_B);RotateMotor(OUT_A,30,50);Off(OUT_A);RotateMotor(OUT_B,30,30);Off(OUT_B);[九、十、十一]
#define junikaku() RotateMotor(OUT_A,30,-30);Off(OUT_A);OnFwd(OUT_C,30);Wait(500);Off(OUT_C);RotateMotor(OUT_B,30,-30);Off(OUT_B);OnFwd(OUT_C,30);Wait(1000);Off(OUT_C);[十二]
#define jusankaku() RotateMotor(OUT_A,30,-80);Off(OUT_A);[十三]
#define juyonkaku() OnRev(OUT_C,30);Wait(2000);Off(OUT_C);[十四]
task main() { ikkaku() nikaku() sanyonkaku() gokaku() rokunanahakkaku() kyujujuichikaku() junikaku() jusankaku() juyonkaku() }
総じて、プログラムを書くのに思ったよりも、マシンが思い通りにうごかなかったので、時間がかかった。
最終的に、うまく字が書けなかったが、試行錯誤の上で(プログラムと、本体とのバランスを調整すること)、こういう風にすれば、うまくいく確率があがって、こういう風にしたら、失敗するということが、目に見えてわかったので、ロボットを製作するうえでの、直感力を培ったと自負できる。
理想としていた字とはかけ離れてしまったが、ロボットを動かすという技術に触れることができて、満足であった。
上の写真は理想としていた字(ロボットなので、かくかくしたものを理想とした)