[[2017a/Member]]
#contents
*課題1 [#f9c979c2]
15cm四方に収まる、松本の大学生活を表す7画以上の漢字一文字を書くロボットを製作せよ。
**書いた文字 [#dcd8e5bc]
大学生になり、勉強に自炊、自動車学校に通ったりと時間に追われているので、「急」を選んだ。以下は作成したロボットで書いた「急」である。
#ref(./ロボット 急.JPG,50%,急);
*ロボット [#gda4e0f5]
**全体について [#d9d965e7]
#ref(./ロボット全体.JPG,50%,ロボット 全体);
作成したロボットは1つのモーターで機体の前後、1つのモーターでペンの左右、もう1つでペンの上げ下げを行うものである。当初はx,y軸に動くロボットを作りたかったのだが、うまく組み立てることができなかった。その結果、x,y軸に動くロボットと似ているが、x軸の動きが異なるロボットになった。詳細は各パーツごとに説明する。
**前後の動き [#gc9f8c04]
#ref(./ロボット 足.JPG,50%,ロボット 足回り);
前後の動きはタイヤで行う。前輪にモーターを取り付けたシンプルな構造である。
**左右の動き [#he0d3087]
#ref(./ロボットX軸機構.JPG,50%,ロボット x軸);
ペンの左右の動きは本体中央にあるモーターで行う。このモーターを動かすと上部のモーターの台座部分が回転する。これによってペンを左右させるが、構造上ペンは弧を描くように動いてしまう。今回の課題は15cm四方なので、弧はほぼ直線になると考えてこの構造を採用した。
**ペンの上げ下げ [#sfb58bf4]
#ref(./ロボット アーム.JPG,50%,ロボット アーム);
ペンの上げ下げは上部のモーターで行う。これもシンプルな構造である。
**問題点 [#ib562d4b]
ロボットの重心が高いため、倒れることはないが不安定である。また、x軸に長い線を書いているとどうしても弧が目立ってきてしまう。
*プログラム [#jb94a225]
**プログラム [#x704c669]
まず、前後左右、ペンの上げ下げ、1つの動作が終わったときにぶれをなくすためモーターを止める、という動きを定義した。
#define Front OnFwd(OUT_A,20); //前に進む
#define Back OnRev(OUT_A,20); //後ろに進む
#define Left OnFwd(OUT_C,100); //右に動く
#define Right OnRev(OUT_C,100); //左に動く
#define Up OnRev(OUT_B,10);Wait(500);Off(OUT_B);Wait(300); //ペンを上げる
#define Down OnFwd(OUT_B,10);Wait(500);Off(OUT_B);Wait(300); //ペンを下げる
#define Stop Off(OUT_AC);Wait(300); //止まる
また、このプログラムでは、書き順を変えている。
#ref(./「急」書き順.JPG,50%,「急」書き順);
プログラムを示す。コメントの数字は書き順の写真に対応している。
task main ()
{
Down; //�ヽ�始
Back;
Left;
Wait(300);
Stop;
Up; //��開始位置に移動
Front;
Right;
Wait(300);
Stop;
Down; //��開始
Right;
Wait(1000);
Stop;
Left;
Back;
Wait(500);
Stop;
Up; //�3�始位置に移動
Left;
Wait(800);
Stop;
Down; //�3�始
Right;
Wait(1600);
Stop;
Back;
Wait(650);
Stop;
Left; //�こ�始
Wait(1800);
Stop;
Up;
Front;
Right;
Wait(350);
Stop;
Down; //�コ�始
Right;
Wait(1600);
Stop;
Up; //�Τ�始位置に移動
Right;
Back;
Wait(300);
Stop;
Down; //�Τ�始
Back;
Right;
Wait(250);
Stop;
Up; //�С�始位置に移動
Left;
Wait(1600);
Stop;
Back;
Wait(150);
Stop;
Down; //�С�始
Back;
Right;
Wait(300);
Stop;
Up; //�┳�始位置に移動
Left;
Wait(1600);
Stop;
Front;
Wait(250);
Stop;
Down; //�┳�始
Back;
Left;
Wait(250);
Stop;
Up; //��開始位置に移動
Right;
Wait(800);
Stop;
Down; //��開始
Back;
Wait(400);
OnRev(OUT_A,10);
OnRev(OUT_C,100);
Wait(200);
Stop;
OnRev(OUT_C,100);
Wait(2000);
Stop;
Up;
Down; //�ヽ�始
Back;
Left;
Wait(300);
Stop;
Up; //��開始位置に移動
Front;
Right;
Wait(300);
Stop;
Down; //��開始
Right;
Wait(1000);
Stop;
Left;
Back;
Wait(500);
Stop;
Up; //�3�始位置に移動
Left;
Wait(800);
Stop;
Down; //�3�始
Right;
Wait(1600);
Stop;
Back;
Wait(650);
Stop;
Left; //�こ�始
Wait(1800);
Stop;
Up;
Front;
Right;
Wait(350);
Stop;
Down; //�コ�始
Right;
Wait(1600);
Stop;
Up; //�Τ�始位置に移動
Right;
Back;
Wait(300);
Stop;
Down; //�Τ�始
Back;
Right;
Wait(250);
Stop;
Up; //�С�始位置に移動
Left;
Wait(1600);
Stop;
Back;
Wait(150);
Stop;
Down; //�С�始
Back;
Right;
Wait(300);
Stop;
Up; //�┳�始位置に移動
Left;
Wait(1600);
Stop;
Front;
Wait(250);
Stop;
Down; //�┳�始
Back;
Left;
Wait(250);
Stop;
Up; //��開始位置に移動
Right;
Wait(800);
Stop;
Down; //��開始
Back;
Wait(400);
OnRev(OUT_A,10);
OnRev(OUT_C,100);
Wait(200);
Stop;
OnRev(OUT_C,100);
Wait(2000);
Stop;
Up;
}
**問題点 [#y3c34ab9]
��のプログラムが複雑になってしまっている。これは曲線がうまく書けなかったからである。速度を変えて曲線を書こうとしたが、結局折れ曲がってしまったのであまり意味はなかったかもしれない。
*総評 [#f56ea2ba]
x軸が弧を描くので、どうしてもその調整をプログラムですることとなってしまった。なので、プログラムがx,y軸のものと比べ全体的に複雑になっている。もう少しうまく機体を組み立てることができていれば、プログラムも書きやすくなり、調整もしやすかっただろう。
今回の経験を活かして、次はもっと上手くやっていきたい。