目次

課題1

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

選んだ文字

大阪にある『平野』という地名を選びました。

ロボットの説明

ロボットの全体

今回作成したロボットは

〆鄒したロボットのレール部分を走る機構

∧源を書くペンを上げ下げする機構

レール・NXT本体を動かす機構

の3つに分かれている。

このロボットの動きとしては、3つの機構を作ることで、 このロボットの動き方は、3つの機構を作ることで、 x軸方向(左右)の動力とy軸方向(前後)の動力でペンを操作するものとなる。

上記の理由としては、紙面上を動き回るロボットに比べてプログラミングがわかりやすく組むことができる。

〆鄒したロボットのレール部分を走る機構

,竜々修x軸方向(左右)の動力を担当している。 Bのモーターの出力を入れることで動き、一つのモーターで動かすため、前後にしか動かない。

レール部分を走る機構

▲譟璽襦NXT本体を動かす機構

△竜々修y軸方向(上下)の動力を担当している。 Aのモーターの出力を入れることで動き、一つのモーターで動かすため、前後にしか動かない。

レール・本体を動かす機構

J源を書くペンを上げ下げする機構

の機構はペンを上げ下げを担当している。 Cのモーターの出力を入れることで動く。

ペンを動かす機構

この機構の動き方は下図の通りとなる。青の矢印はモーターの回転を表しており、ここが回転することでペンが上げ下げされる。

5々修瞭阿方

プログラミングのための準備

このロボットは上下左右にペンを動かすことができる。『上下左右にどれだけの長さが進むか』というプログラムを作ることによって、文字を書くプログラミングを楽にする。

L、R、U、DはそれぞれLeght(左)、Right(右)、Up(上)、Down(下)を表し、図のようになる。 上下左右確認表

LからRの方向へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。動き方としては、,竜々修動くようにする。

#define L_to_R_10 OnFwd(OUT_B,-22);Wait(240);Off(OUT_B);   //10仗覆
#define L_to_R_20 OnFwd(OUT_B,-22);Wait(500);Off(OUT_B);   //20仗覆
#define L_to_R_30 OnFwd(OUT_B,-22);Wait(660);Off(OUT_B);   //30仗覆
#define L_to_R_40 OnFwd(OUT_B,-22);Wait(950);Off(OUT_B);   //40仗覆
#define L_to_R_60 OnFwd(OUT_B,-22);Wait(1300);Off(OUT_B);   //60仗覆

L_to_R

RからLの方向へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。動き方としては、,竜々修動くようにする。

#define R_to_L_20 OnFwd(OUT_B,22);Wait(485);Off(OUT_B);   //20仗覆
#define R_to_L_40 OnFwd(OUT_B,22);Wait(927);Off(OUT_B);   //40仗覆
#define R_to_L_70 OnFwd(OUT_B,22);Wait(1800);Off(OUT_B);   //70仗覆
#define R_to_L_90 OnFwd(OUT_B,22);Wait(2250);Off(OUT_B);   //90仗覆

R_to_L

UからDの方向へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。動き方としては、△竜々修動くようにする。

#define U_to_D_10 OnFwd(OUT_A,21);Wait(200);Off(OUT_A);   //10仗覆
#define U_to_D_20 OnFwd(OUT_A,21);Wait(330);Off(OUT_A);   //20仗覆
#define U_to_D_25 OnFwd(OUT_A,21);Wait(430);Off(OUT_A);   //25仗覆
#define U_to_D_30 OnFwd(OUT_A,21);Wait(500);Off(OUT_A);   //30仗覆
#define U_to_D_40 OnFwd(OUT_A,22);Wait(590);Off(OUT_A);   //40仗覆
#define U_to_D_60 OnFwd(OUT_A,20);Wait(900);Off(OUT_A);   //60仗覆
#define U_to_D_80 OnFwd(OUT_A,20);Wait(1370);Off(OUT_A);   //80仗覆

U_to_D

DからUの方向へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。動き方としては、△竜々修動くようにする。

#define D_to_U_10 OnFwd(OUT_A,-20);Wait(190);Off(OUT_A);   //10仗覆
#define D_to_U_20 OnFwd(OUT_A,-20);Wait(380);Off(OUT_A);   //20仗覆
#define D_to_U_30 OnFwd(OUT_A,-20);Wait(445);Off(OUT_A);   //30仗覆
#define D_to_U_40 OnFwd(OUT_A,-20);Wait(640);Off(OUT_A);   //40仗覆
#define D_to_U_50 OnFwd(OUT_A,-20);Wait(810);Off(OUT_A);   //50仗覆

D_to_U

LからDの方向(斜め)へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。方向的に見れば、UからRに向かうことと変わらない。動き方としては、 ↓△竜々修同時に動くようにする。

#define L_to_D_20 OnFwd(OUT_A,21);OnFwd(OUT_B,-22);Wait(330);Off(OUT_AB);   //20仗覆

L_to_D

LからUの方向(斜め)へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。方向的に見れば、DからRに向かうことと変わらない。動き方としては、 ↓△竜々修同時に動くようにする。

#define L_to_U_10 OnFwd(OUT_A,-17);OnFwd(OUT_B,-18);Wait(190);Off(OUT_AB);   //10仗覆
#define L_to_U_20 OnFwd(OUT_A,-19);OnFwd(OUT_B,-20);Wait(370);Off(OUT_AB);   //20仗覆
#define L_to_U_25 OnFwd(OUT_A,-21);OnFwd(OUT_B,-22);Wait(360);Off(OUT_AB);   //25仗覆

L_to_U

RからDの方向(斜め)へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。方向的に見れば、UからLに向かうことと変わらない。動き方としては、 ↓△竜々修同時に動くようにする。

#define R_to_D_20 OnFwd(OUT_A,19);OnFwd(OUT_B,20);Wait(370);Off(OUT_AB);   //20仗覆

R_to_D

DからLの方向(斜め)へと向かうためのプログラム

下図の矢印方向にペンを動かすためのプログラムを書く。方向的に見れば、RからUに向かうことと変わらない。動き方としては、 ↓△竜々修同時に動くようにする。

#define D_to_L_20 OnFwd(OUT_A,-21);OnFwd(OUT_B,22);Wait(330);Off(OUT_AB);   //20仗覆
#define D_to_L_25 OnFwd(OUT_A,-21);OnFwd(OUT_B,22);Wait(400);Off(OUT_AB);   //25仗覆

D_to_L

ペンを上げ下げするためのプログラム

ペンを上げ下げするために、Cのモーターを回すプログラムを作成する。

#define pen_down OnFwd(OUT_C,7);Wait(550);Off(OUT_C);   //ペンを下げる
#define pen_up OnFwd (OUT_C,-9);Wait(540);Off(OUT_C);   //ペンを上げる

『平』という字を書くためのプログラム

平野の『平』を書くためのサブのプログラムを作る。

sub Hira()
{
    R_to_L_90;          // RからLに90仗覆
    pen_up;             //◆張撻鵑鮠紊欧
    L_to_R_60;          //…LからRに60仗覆
    D_to_U_40;          //ぁDからUに40仗覆
    pen_down;           //ァ張撻鵑魏爾欧
    U_to_D_80;          //ΑUからDに80仗覆
    pen_up;             //А張撻鵑鮠紊欧
    D_to_U_10;          //─DからUに10仗覆
    L_to_R_20;          //…LからRに20仗覆
    pen_down;           //…ペンを下げる
    D_to_L_25;          //…DからLに25仗覆
    pen_up;             //…ペンを上げる
    D_to_U_20;          //…DからUに20仗覆
    pen_down;           //…ペンを下げる
    L_to_U_25;          //…LからUに25仗覆
    pen_up;             //亜張撻鵑鮠紊欧
    L_to_R_10;          //院LからRに10仗覆
    pen_down;           //押張撻鵑魏爾欧
    U_to_D_60;          //魁UからDに60仗覆
    pen_up;             //粥張撻鵑鮠紊欧
}

平

分かりやすく書くため実際の大きさと上図は異なる。 また、動作の説明として書かれている数字は上図の数字と関連している。

青い矢印が線を書いているときの動作、赤い矢印は線を書いていないときの動作、灰色の丸はペンの上げ下げを表している。

『野』を書くためのプログラム

平野の『平』を書くためのサブのプログラムを作る。それにあたって、『野』という字は『里』と『予』の二つの部分に分けて考えられる。 下のプログラムの dは『里』の部分。e〜fは『里』と『予』の間の部分。g〜xは『予』の部分を表しており、下図はその三つに分かれている。

sub No()
{
    pen_down;           // 張撻鵑魏爾欧
    U_to_D_40;          //◆UからDに40仗覆
    R_to_L_40;          //…RからLに40仗覆
    D_to_U_40;          //ぁDからUに40仗覆
    L_to_R_40;          //ァLからRに40仗覆
    pen_up;             //Α張撻鵑鮠紊欧
    R_to_L_20;          //АRからLに20仗覆
    pen_down;           //─張撻鵑魏爾欧
    U_to_D_40;          //…UからDに40仗覆
    pen_up;             //…ペンを上げる
    D_to_U_20;          //…DからUに20仗覆
    L_to_R_20;          //…LからRに20仗覆
    pen_down;           //…ペンを下げる
    R_to_L_90;          //…RからLに90仗覆
    pen_up;             //…ペンを上げる
    U_to_D_25;          //亜UからDに25仗覆
    pen_down;           //院張撻鵑魏爾欧
    D_to_U_50;          //押DからUに50仗覆
    pen_up;             //魁張撻鵑鮠紊欧
    U_to_D_10;          //粥UからDに10仗覆
    L_to_R_30;          //a …LからRに30仗覆
    pen_down;           //b …ペンを下げる
    U_to_D_30;          //c …UからDに30仗覆
    pen_up;             //d …ペンを上げる

    U_to_D_20;          //e …UからDに20仗覆
    L_to_R_60;          //f …LからRに60仗覆

    pen_down;           //g …ペンを下げる
    U_to_D_40;          //h …UからDに40仗覆
    D_to_L_25;          //i …DからLに25仗覆
    pen_up;             //j …ペンを上げる
    L_to_U_10;          //k …LからUに10仗覆
    pen_down;           //l …ペンを下げる
    R_to_D_20;          //m …RからDに20仗覆
    pen_up;             //n …ペンを上げる
    D_to_U_40;          //o …DからUに40仗覆
    pen_down;           //p …ペンを下げる
    U_to_D_60;          //q …UからDに60仗覆
    D_to_L_20;          //r …DからLに20仗覆
    pen_up;             //s …ペンを上げる
    L_to_D_20;          //t …LからDに20仗覆
    D_to_U_30;          //u …DからUに30仗覆
    pen_down;           //v …ペンを下げる
    R_to_L_70;          //w …RからLに70仗覆
    L_to_U_20;          //x …LからUに20仗覆
    pen_up;             //y …ペンを上げる
}

里 連結部分 予

分かりやすく書くため実際の大きさと上図は異なる。 また、動作の説明として書かれている英数字は上図の英数字と関連している。

青い矢印が線を書いているときの動作、赤い矢印は線を書いていないときの動作、灰色の丸はペンの上げ下げを表している。

メインプログラム

上記に書かれたサブのプログラムを使用することによりメインのプログラムはかなり簡略された。

このプログラムを開始する際は、ペンを紙につけた(ペンを下げた)状態から始める。

task main()
{
    Hira();      //『平』という字を書くためのプログラム
    U_to_D_40;   //文字と文字の間隔
    No();        //『野』を書くためのプログラム
}

完成した文字

比較的きれいな字を書くことができた。 平野

課題1の反省

今回、初めてのプログラミングだった為、できるだけ簡単なプログラムにしようと思いXY軸にした。 予想通りプログラムを書くことは簡単になったが、字を書く際に安定しなくなった。

さらに安定しなくなった理由は主にロボット本体にあると思われる。箇条書きにしてまとめる。

・レールの部分が地面まで距離があったため、機体が不安定となった。

・ ↓◆↓の機体とレール部分を別々に作ってしまったため、接合部分に大量のパーツを使うこととなってしまった。

・ペンが紙に対して斜めになるようにロボットを作ったため、ペンが紙に対する圧がかかりにくくなり文字がかすむことが多発した。

感想

初めてのプログラミングや初めてレゴブロックで形を作ることをした。様々な難点にあたったが一つ一つ解決していく楽しみがあった。次の課題からは上記の反省点を生かしてロボットを組み立てたい。


添付ファイル: file5々修瞭阿方.PNG 16件 [詳細] file連結部分.PNG 19件 [詳細] file里.PNG 19件 [詳細] file予.PNG 24件 [詳細] file平.PNG 16件 [詳細] fileU_to_D.PNG 22件 [詳細] fileR_to_L.PNG 17件 [詳細] fileR_to_D.PNG 17件 [詳細] fileL_to_U.PNG 16件 [詳細] fileL_to_R.PNG 21件 [詳細] fileL_to_D.PNG 19件 [詳細] fileD_to_U.PNG 22件 [詳細] fileD_to_L.PNG 18件 [詳細] file無題.png 33件 [詳細] fileIMG_3024[1].JPG 31件 [詳細] fileIMG_3041[1].JPG 19件 [詳細] filerobotto.jpg 26件 [詳細] fileIMG_3042[1].JPG 34件 [詳細] fileIMG_3048[1].JPG 20件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-19 (金) 02:50:02 (579d)