2018b/Member

目次

課題1

 これまで住んだことのある都道府県名、市町村名、地区名などの中から 2文字以上のものを選び、それをA4の紙を書くロボットを製作せよ。

 ということで、書く文字は”大村”にした。※長野県松本市にあります。

ロボット

全体像

 書く上で、X軸はロボット全体の移動、Y軸はアームの移動で文字を書くように考えた。

imagefull1.jpeg

 全体像         ↑ここにペンを付ける。

アーム (モータA)

 モータAはマジックハンドの要領でY座標を指定する。

アーム.JPG

 

 

 下図のようにモータを回すと・・・

pen_y1.png

            ⇓ 

pen_y2.png

 屈折部分が伸び、ペンを取り付けるためのパーツが移動する仕組みとなっている。

 

 

 屈折部分の個数を増やすと可動域が広くなるが、部品の数が少ない、レールの長さが足りない等の理由から、一箇所とした。

台車 (モータB・C)

 台車部分にはモータB・モータC使用し、一つでX座標、もう一つでペンを上下移動させる。

imageDodai1.JPG←正面

ペンの上下 (モータB)

 ペンの上下の変化については、モータを含むアーム自体を持ち上げる構造としてみた。写真の黒いギアにアームを付け、僅かに回転させて上下移動させる。

こちらが使用したギア Z軸モータ.JPG

                      こちらは角度調整用のツマミ代わり

 モータBにかかる負荷が大きい為、最小のギアを使用してギア比をできるだけ高くすることで、負荷の軽減を試みた。

 下図は車体正面から見たギアの位置を示している。

モータ_B.jpg

 矢印は、ペンを上げる時の回転方向。

X軸 (モータC)

 写真では、左から右に向かって書くため、モータCの前転で右に、後転で左に向かうようにする。

後転 x軸モータ.JPG 前転

プログラム

書き順

 文字を書く順番はこの通り。実際の書き順通りに行う。

書順.JPG

マクロ

 よく使う「ペンの上下移動」はマクロで宣言する。  

#define pen_up RotateMotor(OUT_B, 20, -60);Off(OUT_B);

 ↑ペンを上げて停止。

#define pen_down RotateMotor(OUT_B,20,60);Float(OUT_B);Wait(1000);Off(OUT_B);

 ↑ペンを下げて、モータをニュートラル状態で誤差を調整してから、停止

メイン処理

 残りのプログラムは全て、メイン処理にて行った。

 一文字目:

         移動

task main(){
    ResetTachoCount(OUT_ABC);//全てのモータの回転角をリセット

    pen_up;
    RotateMotor(OUT_A, 30, 30);//モータAをパワー30、角度30°で回転

    ・   大:一画目+移動

    pen_down;
    RotateMotor(OUT_C, 30, 180);//モータCをパワー30、角度180°で回転

    pen_up;
    RotateMotor(OUT_C, 30, -90);//モータCをパワー30、角度90°で逆回転
    RotateMotor(OUT_A, 30, -30);//モータAをパワー30、角度30°で逆回転

    ・   大:二画目+移動

    pen_down;
    RotateMotor(OUT_A, 30, 30);//モータAをパワー30、角度30°で回転
    OnFwd(OUT_A,20);//モータAをパワー20で回転
    OnFwd(OUT_C,-20);//モータCをパワー20で逆回転
    Wait(1000);//上記2行を1秒継続
    Off(OUT_AC);//モータA・Cの回転を停止

    pen_up;
    OnFwd(OUT_A,-20);//モータAをパワー20で逆回転
    OnFwd(OUT_C,20);//モータCをパワー20で回転
    Wait(850);//上記2行を0.85秒継続
    Off(OUT_AC);//モータA・Cの回転を停止

         大:三画目

    pen_down;
    OnFwd(OUT_A,20);//モータAをパワー20で回転
    OnFwd(OUT_C,20);//モータCをパワー20で回転
    Wait(1000);//上記2行を1秒継続
    Off(OUT_AC);//モータA・Cの回転を停止

 二文字目:

         移動

    ResetTachoCount(OUT_ABC);//全てのモータの回転角をリセット
    pen_up;
    RotateMotor(OUT_A, 30, -60);//モータAをパワー30、角度60°で逆回転

    ・   村:一画目+移動  

    pen_down;
    RotateMotor(OUT_C, 30, 90);//モータCをパワー30、角度90°で回転

    pen_up;
    RotateMotor(OUT_C, 30, -45);//モータCをパワー30、角度45°で逆回転
    RotateMotor(OUT_A, 30, -20);//モータAをパワー30、角度20°で逆回転

    ・   村:二画目+移動

    pen_down;
    RotateMotor(OUT_A, 30,80);//モータAをパワー30、角度80°で回転

    pen_up;
    RotateMotor(OUT_A, 30, -60);//モータAをパワー30、角度60°で逆回転

    ・   村:三画目+移動

    pen_down;
    OnFwd(OUT_A,20);//モータAをパワー20で回転
    OnFwd(OUT_C,-20);//モータCをパワー20で逆回転
    Wait(500);//上記2行を0.5秒継続
    Off(OUT_AC);モータA・Cの回転を停止

    pen_up;
    OnFwd(OUT_A,-20);//モータAをパワー20で逆回転
    OnFwd(OUT_C,20);//モータCをパワー20で回転
    Wait(470);//上記2行を0.47秒継続
    Off(OUT_AC);//モータA・Cの回転を停止

         村:四画目

    pen_down;
    OnFwd(OUT_A,20);//モータAをパワー20で回転
    OnFwd(OUT_C,20);//モータCをパワー20で回転
    Wait(300);//上記2行を0.3秒継続
    Off(OUT_AC);//モータA・Cの回転を停止

         移動

    pen_up;
    RotateMotor(OUT_C,20,15);//モータCをパワー20、角度15°で回転
    RotateMotor(OUT_A,20,-30);//モータAをパワー20、角度30°で逆回転

    ・   村:五画目+移動

    pen_down;
    RotateMotor(OUT_C, 30, 80);//モータCをパワー30、角度80°で回転

    pen_up;
    RotateMotor(OUT_C, 40, -30);//モータCをパワー40、角度30°で逆回転
    RotateMotor(OUT_A, 30, -20);//モータAをパワー30、角度20°で逆回転

    ・   村:六画目+移動

    pen_down;
    RotateMotor(OUT_A,20, 80);//モータAをパワー20、角度80°で回転

    pen_up;
    RotateMotor(OUT_C,40,-30);//モータCをパワー40、角度30°で逆回転
    RotateMotor(OUT_A,20,-40);//モータAをパワー20、角度40°で逆回転

         村:七画目+ちょっと移動

    pen_down;
    Wait(500);上記1行を0.5秒継続

    pen_up;
    RotateMotor(OUT_C,30,180);//モータCをパワー30、角度180°で回転
    Off(OUT_ABC);
}

結果

 試運転。最後まで上手くいくとこんな感じ

結果.JPG

 本番では、ペン先が下がりきらず最後まで書くことができなかった。orz

反省感想

  • アームを持ち上げる構造は、始めはモータBに直接取り付けて行っていたが、パワーバランスや電池の消耗の関係からギアを使って負荷の軽減をしたが、その分、パーツ数が多くなってしまい、モータCの負荷が多くなった。
  • ペンを操作する点が構造上高くなっており、そのため、筆圧が十分にかからない、ペン先がブレて字自体がずれてしまうといった問題に適切な対処を行えなかった。自分がいつもどの位置でペンを持っているかを考慮すれば、このような構造にはできないと思った。
  • 長さ等の比をできるだけ揃えるために
    RotateMotor(出力モータ, パワー, 回転角);
     の関数を使用したが、斜線ができないので、仕方なく斜線部分のみ時間制御にした。また、
    RotateMotorEx(出力モータ, パワー, 回転角, 同期比率, 同期の有無, ブレーキの有無);
     の関数を使うことも考えたが、比率の調整が上手くいかず断念した。
  • 今回の反省を活かし、普段何気なく行っている事も振り返って、より効率的なロボットを制作できるようにしていきたい。

添付ファイル: fileモータ_B.jpg 13件 [詳細] filepen_y2.png 17件 [詳細] filepen_y1.png 16件 [詳細] file書順.JPG 16件 [詳細] file結果.JPG 17件 [詳細] filex軸モータ.JPG 14件 [詳細] fileZ軸モータ.JPG 18件 [詳細] fileアーム.JPG 20件 [詳細] fileimageDodai1.JPG 12件 [詳細] fileimagefull1.jpeg 23件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-02-17 (日) 02:14:11 (184d)