2019a/Member

目次

課題1

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

選んだ文字

日本の中枢機能の中心であり、2020年にはオリンピックも開催されるということで「東京」を選んだ。

ロボットの説明

ロボット全体について

405AAF06-CA24-48BE-AFD3-E723D98A2BEB.jpeg

上の写真はロボットの全体を撮ったものである。 ロボットの構成は―聴榮亜↓横移動、ペンの上げ下げ、の3つから成っている。 写真の下にあるタイヤは、y軸方向の移動と、ペンの上げ下げをやる時にロボット全体がペンのある方へ傾くのを防ぐために取り付けた。

縦移動の部分

3718435B-E4E0-474C-ABFF-5F5BEC40603F.jpeg

モーターに歯数8の歯車をつけ、それに歯数40の歯車を噛ませ、タイヤに付けた歯数24を回すことでタイヤが回転し、前後に進むようになっている。

横移動の部分

DE7D3C59-46B5-4B1A-934B-5E99ABEA2005.jpeg
8AB7FA6F-6800-48A3-949F-5BC06C8B795B.jpeg

1枚目の部品に2枚目の部品を乗せる。横スライドを滑らかに行うために、1枚目の写真にあるようにブロックが上を滑るためのブリッジを導入した。文字を書いている途中で2枚目の写真の部品が回転して、同じ挙動を示さなくなるのを防ぐために、黒いブロックは2段積んだ。

ペンの上げ下げの部分

D4B00339-E083-48ED-9B3B-E39893CC94CA.jpeg

モーターを回転させることで写真の黄色いパーツが上がり下がりするようになっている。黄色いパーツにペンを取り付けることでペンが上がり下がりする。横スライドする部分の上にペンを上げ下げする部分が付いているため、横に大きく動いた時にバランスが崩れてしまう。それを防ぐためにモーターとペンの上げ下げの部分を分離して左右に置くことでバランスを保てるようにした。

プログラムの説明

一つ一つの動きをそのまま書くとプログラムが長くなりすぎると思ったため、サブルーチンを用いた。また、サブルーチンを用いたもうひとつの理由は、ロボットの挙動の調整を簡単にするためである。それぞれのサブルーチンに変数tを導入することで、tを変えるだけで動く時間をコントロールし、t以外の命令は同じ向きに動く命令であれば、全く同じ命令で動かせるようにした。変数はint t;で指定した。

サブルーチンについて

用いた6つのサブルーチンは以下の通りである。

sub go_ahead()
{OnRev(OUT_A);Wait(t);Off(OUT_A);Wait(50);}

sub go_back()
{OnFwd(OUT_A);Wait(t);Off(OUT_A);Wait(50);}

sub draw_LtoR()
{OnRev(OUT_B);Wait(t);Off(OUT_B);Wait(50);}

sub draw_RtoL()
{OnFwd(OUT_B);Wait(t);Off(OUT_B);Wait(50);}

sub pen_up()
{OnRev(OUT_C);Wait(30);Off(OUT_C);Wait(50);}

sub pen_down()
{OnFwd(OUT_C);Wait(30);Off(OUT_C);Wait(50);}

これは紙をxy平面に置いた時の動きを命令するものである。

これらは上から順にy軸正、y軸負、x軸正、x軸負の向きに動く命令で、下の二つは、 上がペンを上げる命令、下がペンを下げる命令である。それぞれtを変えることで動く時間を変え、コントロールしている。また、それぞれの命令の最後にWait(50);があるのは、一つ一つの挙動の間に動かない時間を導入することで、自分が想定していない行動をロボットがとった時に止めやすくする、一つ一つの挙動を見やすくするという目的のために導入したものである。

また、斜めに動かすサブルーチンは作っていない。その理由は、縦横移動やペンの上げ下げよりもはるかに使用頻度が低く、斜め線の中でも角度が違ったりするためである。

主にこれら6つのサブルーチンを使って、メインプログラムを構成していく。

「東」を書く

pen_down();t=80;draw_LtoR();pen_up();
t=70;draw_RtoL();t=5;go_back();
pen_down();t=60;draw_LtoR();t=20;go_back();t=60;draw_RtoL();t=20;go_ahead();pen_up();
t=10;go_back();
pen_down();t=60;draw_LtoR();pen_up();
t=30;draw_RtoL();t=20;go_ahead();
pen_down();t=50;go_back();pen_up();

上の命令は「東」の1画目から6画目までを書いている。ただし2,3,5画目を繋げて一筆で書いているため、実際にロボットが書いたのは4画である。

pen_down();t=40;OnFwd(OUT_B);OnFwd(OUT_A);SetPower(OUT_A,0);Wait(t);Off(OUT_AB);Wait(50);pen_up();
t=40;OnRev(OUT_B);OnRev(OUT_A);Wait(t);Off(OUT_AB);Wait(50);
pen_down();t=40;OnRev(OUT_B);OnFwd(OUT_A);Wait(t);Off(OUT_AB);Wait(50);pen_up();

上の命令は「東」の7,8画目である。x軸方向の移動の速さと、y軸方向の移動の速さが違っていた。しかし、ロボットは移動の速さの違いを除いて、自分の思った通りの挙動を示した。そのため、斜め線を書く時は、ロボットを変えるのではなく、プログラムを調整することでロボットの挙動を調整した。

具体的にはSetPower(OUT_A,0)という命令を使うことでy軸方向の移動の速さを遅くする(何も書かなければモーターは最小出力の0ではなく、最大出力の7で動く)。こうすることで、x軸y軸を両方同時に動かした時よりも斜め線がx軸となす鋭角を小さくし、より自然な「東」を書けるようにした。

「京」を書く

OnRev(OUT_A);Wait(40);Off(OUT_A);Wait(50);SetPower(OUT_A,7);t=40;go_back();
pen_down();t=40;draw_RtoL();t=5;go_ahead();t=5;go_back();t=40;draw_RtoL();pen_up();
t=10;draw_LtoR();t=5;go_back();
pen_down();t=60;draw_LtoR();t=10;go_back();t=60;draw_RtoL();t=10;go_ahead();pen_up();
t=30;draw_LtoR();t=12;go_back();
pen_down();t=30;go_back();t=7;OnRev(OUT_A);OnFwd(OUT_B);Wait(t);Off(OUT_AB);Wait(50);pen_up();
t=10;go_ahead();t=23;draw_RtoL();
pen_down();t=7;OnFwd(OUT_A);OnFwd(OUT_B);Wait(t);Off(OUT_AB);Wait(50);pen_up();
t=7;go_ahead();draw_LtoR();t=60;draw_LtoR();
pen_down();t=7;OnFwd(OUT_A);OnRev(OUT_B);Wait(t);Off(OUT_AB);Wait(50);pen_up();

「京」についても「東」と同様に、tを調整することで各画の長さ等を調整した。ただし、「東」を書き終えた時、ペンはx>0の領域にあるため、またプログラムを短くするために、1,2画目を一筆で書いた。且つ2画目のx>0のところから書き始め、x軸負の方向に動かし、2画目の途中で1画目を書き、そのあと2画目の続きから描き始めるというプログラムにした。また、「京」の6画目のハネ、7,8画目については、SetPowerを用いずにx軸、y軸を同時に動かして斜め線を書いた。

書けた文字

03A7E011-469D-4CF1-9C4D-E6C1B38B17CC.jpeg

全体的に上手く書けたと思う。「東」は完璧と言ってもいいだろう。「京」については、1,2画目を繋げて書くのではなく、一画一画書けば、もっと綺麗に書けたと思う。それ以降の部分も「東」と同様に、良い出来である。「東」の7,8画目と「京」の7,8画目の斜め線の角度の違いがはっきりとわかるように書けていて良かった。


添付ファイル: fileD4B00339-E083-48ED-9B3B-E39893CC94CA.jpeg 9件 [詳細] file8AB7FA6F-6800-48A3-949F-5BC06C8B795B.jpeg 10件 [詳細] fileDE7D3C59-46B5-4B1A-934B-5E99ABEA2005.jpeg 9件 [詳細] file03A7E011-469D-4CF1-9C4D-E6C1B38B17CC.jpeg 8件 [詳細] file3718435B-E4E0-474C-ABFF-5F5BEC40603F.jpeg 8件 [詳細] file405AAF06-CA24-48BE-AFD3-E723D98A2BEB.jpeg 15件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-05 (水) 19:10:18 (77d)