[[2016a/Member]]

*目次 [#hb354c67]
#contents

*はじめに [#w2f5d6e3]
  今回の課題は、A4の紙にメンバーの似顔絵を描くロボットの制作です。

 この課題のポイントは、

 ,匹里茲Δ縫撻鵑鬟蹈椒奪箸忙たせるか

 曲がるときどのような動きをさせるか

 の二点と考えました。

*ロボット本体の紹介 [#j5326a9b]
1.全体像

  ペンの重みでアーム(ペンをつけている本体前方の部分)を上げた状態を保持することができなかったので、

  両脇におもり(羽などがついている部分)をつけて上げた状態を維持できるようにしました。
#ref(2016a/Member/kotatu/Mission1/S_4434660918150.jpg,20%,全体像)


2.ペンの上げ下げ

  一枚目はモーターとの接続部分の写真です。モーターが回転すると内側のL字型のパーツが引っ張られ、上下するようになっています。

  二枚目はアームが上がっている状態です。
#ref(2016a/Member/kotatu/Mission1/S_4434660854345.jpg,20%,ペン上げ下げ1)
#ref(2016a/Member/kotatu/Mission1/S_4434661245933.jpg,20%,ペン上げ下げ2)

3.ペンの固定

  ペンの固定は写真のように左右をパーツを使って挟み込む形で固定させました。

  また、輪ゴムを使い上下のぶれも少なくしています。
#ref(2016a/Member/kotatu/Mission1/S_4434660963699.jpg,20%,固定部分)

*プログラムの紹介 [#gff43b26]
 ○定義文

  定義文は以下の通りです。

  回転予備動作1,2は、角度を変えるときの調整用の動作です。

  線の角度を変えるときにその場で回転してしまうと書いた線同士がつながらないため、

  回転予備動作1(前進)→回転→回転予備動作2(後退)

  という流れで動かさせてペン先を同じ場所に合うようにしました。

 #define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);\\前進
 #define turn_step1 OnFwd(OUT_AC);Wait(85);Off(OUT_AC);  \\回転予備動作1(前進)
 #define turn_step2 OnRev(OUT_AC);Wait(85);Off(OUT_AC);  \\回転予備動作2(後退)
 #define pen_down OnFwd(OUT_B);Wait(50);Off(OUT_B);      \\ペンを下げる
 #define pen_up OnRev(OUT_B);Wait(50);Off(OUT_B);        \\ペンを上げる
 #define TURN_TIME15 12                                  \\30°曲がるときの回転時間
 #define TURN_TIME45 37                                  \\45°曲がるときの回転時間
 #define TURN_TIME60 49                                  \\60°曲がるときの回転時間
 #define TURN_TIME90 74                                  \\90°曲がるときの回転時間

 ○サブルーチン


   はじめは、回転時間を変数にしてそれぞれのポイントごとに角度をはかり調節していく方法で進めていましたが、

  回転する度にずれが生じてしまったため、曲がる角度をそれぞれ15度、45度、60度、90度の4つに絞りサブルーチン化することで、ずれを減らそうと考えました。

  ほぼ同じなのでここでは省略しますが、左回転(turn_left○○)もサブルーチンとして作成しています。

  sub turn_right15()   \\15度右回転
  {
     pen_up;           \\ペンを上げる
     turn_step1;       \\前進する
     OnFwd(OUT_A);     \\回転する
     OnRev(OUT_C);
     Wait(TURN_TIME15);
     turn_step2;       \\後退する
     pen_down;         \\ペンを下ろす
 }

 sub turn_right45()    \\45度右回転
 {
     pen_up;
     turn_step1;
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(TURN_TIME45);
     turn_step2;
     pen_down;
 }

 sub turn_right60()    \\60度右回転
 {
     pen_up;
     turn_step1;
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(TURN_TIME60);
     turn_step2;
     pen_down;
 }

 sub turn_right90()    \\90度右回転
 {
     pen_up;
     turn_step1;
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(TURN_TIME90);
     turn_step2;
     pen_down;
 } 


 ○似顔絵

  反省点と感想のところで詳しく述べますがに線のつなぎがうまくいかなかったため、似顔絵は完成しませんでした。

  そのため完成予定図(下書き)を載せておきます。
#ref(2016a/Member/kotatu/Mission1/,20%,下書き)
#ref(2016a/Member/kotatu/Mission1/S_4437933034564.jpg,20%,下書き)


 ヾ蕕領愕圓犯鰻

  髪型の部分で90度以上曲がるときは、90度曲がった後に再度60度曲がるなど、二つ以上組み合わせて曲がらせています。
 task main()
 {
    go_forward(60);
    turn_left15();
    go_forward(51);
    turn_left60();
    go_forward(35);
    turn_left15();
    go_forward(14);
    turn_left15();
    go_forward(35);
    turn_left60();
    go_forward(51);
    turn_left15();
    go_forward(60);
    turn_left90();
    go_forward(115);
    turn_right60();
    go_forward(42);
    turn_right90();
    turn_right60();
    go_forward(59);
    turn_left90();
    turn_left45();
    go_forward(32);
    turn_right90();
    turn_right45();
    go_forward(48);
    turn_left90();
    turn_left45();
    go_forward(28);
    turn_right90();
    turn_right60();
    go_forward(76);

 移動と眉毛

  pen_upは線を書かずに移動する部分で使っています。
    turn_right90();
    pen_up;
    go_forward(26);
    turn_right45();
    go_forward(34);
    turn_right15();
    pen_up;
    go_forward(14);
    turn_right15();
    go_forward(34);
    turn_left15();
    pen_up;
    go_forward(12);
    turn_left90();
    pen_up;
    go_forward(28);
    turn_left90();

 4禧
  repeatを使い、同じ動作を四回(途中向きの変更有り)させることで眼鏡を書きました。
  repeatの前後の前進は調節です。
    go_forward(7);
    repeat(2){
        go_forward(8);
        turn_left90();
        go_forward(7);
        turn_right90();
        go_forward(34);
        turn_right90();
        go_forward(7);
        turn_left90();
        go_forward(8);
    }
    go_forward(7);
    repeat(2){
        turn_right90();
    }
    go_forward(7);
        repeat(2){
        go_forward(8);
        turn_left90();
        go_forward(7);
        turn_right90();
        go_forward(34);
        turn_right90();
        go_forward(7);
        turn_left90();
        go_forward(8);
    }
    go_forward(7);

 ど,噺
    turn_left90();
    pen_up;
    go_forward(22);
    turn_left90();
    pen_up;
    go_forward(54);
    turn_right90();
    go_forward(10);
    turn_right90();
    pen_up;
    go_forward(17);
    turn_left90();
    pen_up;
    go_forward(15);
    turn_left90();
    go_forward(34);
    turn_right90();
    pen_up;
    go_forward(7);
    turn_right90();
    pen_up;
    go_forward(8);
    pen_down;
    go_forward(17);
    Off(OUT_AC);
 }



*反省点と感想 [#k6883236]

 <反省点>

 最終的に似顔絵を完成させることが出来ませんでした。原因はペンの固定の部分で、ペンに対しての上下左右の固定はできていましたが進行方向に対しての固定ができておらず、

 ペン先が摩擦で留まろうとして紙に引っかかり、それが戻ろうとする力が発生し、線が曲がってしまうことでした。

 <感想>

 似顔絵を完成させることができませんでしたが、班員と協力しながら一つ一つ問題点を解決していき、改良していけたのでその点は良かったと思います。

特にプログラムは途中で定義から見直して一から書き直したこともあり、時間はかかりましたが自分たちが最初に書いたものよりもかなりすっきりとしたものにできたので良かったです。

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