[[2015a/Member]] #contents *はじめに [#z1892c80] 構想を決めるのに、そのロボットの調整に多くの時間を費やした。 &br;チーム内で完全に意見が分かれ、始めは、シンプルさを追求して、 &br;走行に、二つのモーターをそれぞれの車輪に使用し、一つの筆ペンをつける構想が思い浮かんだが、&br;プログラム上、何度も、走る方向を定めるというのは多大な労力を要する上に、プログラムが長くなってしまうという理由で、モーターを一つだけ、固定された車輪に使用し、残りの二つはペンに使用するという方式に決定した。 #ref(Robotitself.jpg); 上の写真はロボットの最終的なフォルム *苦労話 [#j8ae1fd7] 二本のアームを使用するということで、その両者のプログラム的な微調整に、かなりの試行錯誤を要求された。 &br;何度もプログラムの数値のみを書き直して、それぞれのアームが、しっかりと紙にくっついているのか、それとも離れているのか、また、横の画数を書くときには、その距離をアームだけのパワーバランスだけで、調整するので、横から眺めながら、慎重に位置を調整した。 &br;途中、どうしても、パワー調整だけでは、どうしようもなくなったので、アームの位置自体を変えたり、また、その重量的なバランスの不安定さから、本体との重さをブロックの位置を調整するなどして、再配置した。 &br;また、ペン自体も書くときに不安定になりがちだったので、筆の柔軟性を保つということに重点をおいて、部品を継ぎ足すなどをして固定を試みた。 *プログラミング [#d28cb177] モーターの制御には、調整が数値でしやすいように、RotateMotor関数を使用し、回転数を指定することで、ペンを操作した。 %br;また、マクロをあらかじめたくさん設定して、できるだけ、task main()内が短い行数になるように、努力した。また、そのマクロの名前は比較的わかりやすさを追求した結果、その画数を使用した。 &br;また、マクロをあらかじめたくさん設定して、できるだけ、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() } *まとめ [#be85e176] 総じて、プログラムを書くのに思ったよりも、マシンが思い通りにうごかなかったので、時間がかかった。&br;最終的に、うまく字が書けなかったが、試行錯誤の上で(プログラムと、本体とのバランスを調整すること)、こういう風にすれば、うまくいく確率があがって、こういう風にしたら、失敗するということが、目に見えてわかったので、ロボットを製作するうえでの、直感力を培ったと自負できる。&br;理想としていた字とはかけ離れてしまったが、ロボットを動かすという技術に触れることができて、満足であった。 #ref(kanji.jpg); 上の写真は理想としていた字(ロボットなので、かくかくしたものを理想とした)