[[2018a/Member]]

#contents

* 課題 [#p7a5139d]
** 書道ロボットの製作 [#fb6c75c9]
自分にゆかりのある場所の漢字2文字(10角以上)を書く。
** 選んだ文字 [#x34f62be]
中洲

* 製作したロボット [#nf7a848c]
漢字を書くために作ったロボットは、座標系(X軸、Y軸、Z軸)を使用して制御した。
X軸方向はギア及び縦ギアを使用し、Y軸方向は車体を前後させることで動かし、Z軸方向はモーターの回転をプーリで伝え、平行四辺形の反対の辺を動かすことで制御した。また、X座標系、Y座標系はそれぞれを時間に換算して制御した。以下写真。

* 書き方[#p878c777]
「中」の字は真ん中の四角を一筆書きで書き、最後に真ん中の線を引いた。「洲」の字は先にさんずいの点上2つをfor文で右下がりになるように書き、下の点を右上がりになるように書いた。つぎに「州」の部分を書き順通りにかいた。

* プログラムの内容[#m4e6fb86]
defineを利用して書くときに楽になるようにした。(defineで簡略化した内容は、A,B,Cの正転・逆転の入出力、waitの表記及び時間になる。詳細は下記にて。)以下、使用したプログラムと解説。

 #define A OnFwd(OUT_A);  //前進
 #define Ab OnRev(OUT_A);  //後進
 #define As Off(OUT_A);  //停止
 #define B OnFwd(OUT_B);  //横移動
 #define Bb OnRev(OUT_B);  //横移動
 #define Bs Off(OUT_B);  //停止
 #define PU OnFwd(OUT_C);Wait(50);Off(OUT_C);  //ペン上げ
 #define PD OnRev(OUT_C);Wait(50);Off(OUT_C);  //ペン下げ
 #define W Wait  //Waitの略
 #define Ta 50  //時間1
 #define Tb 100  //時間2
 #define Tc 25  //時間3
 #define Td 13  //時間4

以上が使用したdefineの内容になる。C端子でペンの上げ下げをさせるため一括で制御して、PenUp、PenDown、の略語で表している。また、A、B端子の2端子はそれぞれY軸、X軸の制御にあたり、正転を無印、逆転をbackのb、停止をstopのsをつけて大文字と小文字の組み合わせで表した。簡略化のためにwaitはwを使って簡略化し、waitの時間はTa〜Tdを使用して制御がしやすいようにした。

 task main()
 {
    PD  //1文字目開始:一画目の四角形
    A
    W(Ta);
    As
    B
    W(Tb);
    Bs
    Ab
    W(Ta);
    As
    Bb
    W(Tb);
    Bs
    PU  //四角形終わり
    Ab  //中心の縦の棒
    W(Tc);
    As
    B
    W(Ta);
    Bs
    PD
    A
    W(Tb);
    As  //1文字目終了

以上までが一文字目のプログラムになる。

    PU  //2文字目の位置合わせ開始
    A
    W(Tc);
    As
    Bb
    W(Ta);
    Bs  //位置合わせ完了

上のプログラムは、一文字目に重ねないために位置調整をするプログラムである。

    int a=0;  //2文字目開始
    for(a=0;a<2;a++){     //aはループ用変数、さんずいの点上2つ
    PD
    A
    B
    W(Tc);
    As
    Bs
    PU
    A
    W(Td);
    As
    Bb
    W(Tc);
    Bs
    }
    A
    W(Tc);
    As
    PD
    Ab
    B
    W(Tc);
    As
    Bs  //さんずい終わり
    PU
    Ab  //位置合わせ開始
    W(Tc*2+Td*2);
    As
    B
    W(Tc-Td);
    Bs  //位置あわせ終了
    A
    W(Tc);
    As
    PD
    A
    W(Ta);
    As
    PU
    Ab
    W(Ta+Tc);
    As
    B
    W(Td);
    Bs
    PD
    A
    W(Tb-Td);
    Bb
    W(Td);
    As
    Bs
    PU
    Ab
    W(Tb-Td/4);
    As
    B
    W(Td*2);
    Bs
    for(a=2;a<4;a++){
    A
    W(Tc);
    As
    PD
    A
    W(Ta);
    As
    PU
    Ab
    W(Ta+Tc);
    As
    B
    W(Td);
    Bs
    PD
    A
    W(Tb);
    As
    PU
    Ab
    W(Tb-Td/4);
    As
    B
    W(Td);
    Bs
    }
 }

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS