[[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);

上の写真は理想としていた字(ロボットなので、かくかくしたものを理想とした)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS