- 追加された行はこの色です。
- 削除された行はこの色です。
sub pen_up()
[[2017a/Member]]
目次
#contents
*課題について [#ge770df0]
最初の課題は「松本の大学生活を表す漢字一文字を書くロボットを製作せよ」というものだった。
入学して1か月、まだ慣れない事も多く苦労していたので「苦」という漢字を選んだ。
誰が見てもすぐに「苦」とわかるようにきれいにはっきり書くことを目標にした。
*ロボットの説明 [#fc0fc420]
**ロボット全体 [#k1729612]
最初はペンの位置は固定してロボット本体が動いて字を書くように作成したがプログラムが上手くいかないため作り直すことにした。そして完成したのが下の写真のものだ。
&ref(2017a/Member/ejj/Mission1/pic_ejj1.JPG,50%,);
持ち運びがしやすいように分解できるように作った。しっかり固定してしまうと分解する時に壊れてしまうので安定しながらも取り外ししやすいように写真のように凸のない部品を使用した。
&ref(2017a/Member/ejj/Mission1/pic_ejj2.JPG,50%,);
&ref(2017a/Member/ejj/Mission1/pic_ejj3.JPG,50%,);
また重心が後ろにきて倒れることがあったので前を重くして倒れないようにした。その時タイヤをつけるだけでもよかったけれど、なるべく見た目を良くするために努力した。
&ref(2017a/Member/ejj/Mission1/pic_ejj4.JPG,50%,);
**ロボットの動き [#c3f1387b]
前後の動きは車のようにタイヤで動いている。左右の動きは歯車を使ってペンがついている部分をスライドさせるようにしている。ブロックの摩擦でうまくスライドすることができず、何度も改良して下の写真のものに辿り着いた。ペンの上下の動きも非常に単純なもので、モーターを動かすことで上下している。
&ref(2017a/Member/ejj/Mission1/pic_ejj5.JPG,50%,);
&ref(2017a/Member/ejj/Mission1/pic_ejj6.JPG,50%,);
*プログラムについて [#s644a511]
プログラムは大まかに「草冠」と「十」と「口」の3つだ。
「草冠」は簡単に思われるかもしれないが理論的な秒数ではうまくいかず微調整が何度も必要になった。
「十」は難しいプログラムではなかったがバランスを考えて自分が納得するまで改良を繰り返した。
「口」はペンを下したままX軸方向とY軸方向に順番に動かすだけでよかったので比較的に楽だった。
今回はプログラムを書きやすいようにロボットを作成したので、全体的に動きのプログラムは非常に簡単だった。ただし、字のバランスが悪かったり「口」の最初と最後が交わらなかったり動かす時間の調整にかなりの時間を費やした。おそらくロボットの慣性や歯車の噛み合わせが完璧でなかったこと、机との摩擦が原因だろう思う。また、慣性で動いた状態のままペンを下してしまうトラブルがあったのでペンを下す前に0.5秒ほど待つという工夫をした。この動きは頻繁にあるのでサブルーチンを使用した。そして完成したプログラムが下のものだ。
sub pen_up()
{
OnRev(OUT_B);
}
sub pen_down()
{
Off(OUT_AC);
Wait(50);
Off(OUT_B);
Wait(100);
}
task main()
{
OnFwd(OUT_C); //1画目
Wait(53);
Off(OUT_C);
Wait(52);
pen_up(); //移動
OnFwd(OUT_A);
Wait(9);
Off(OUT_A);
OnRev(OUT_C);
Wait(43);
pen_down();
OnRev(OUT_A); //2画目
Wait(14);
pen_up(); //移動
OnFwd(OUT_A);
Wait(18);
Off(OUT_A);
OnFwd(OUT_C);
Wait(40);
pen_down();
OnRev(OUT_A); //3画目
Wait(14);
Off(OUT_A);
pen_up(); //移動
OnRev(OUT_C);
Wait(22);
pen_down();
OnRev(OUT_A); //4画目
Wait(11);
Off(OUT_A);
Wait(50);
pen_up(); //移動
OnRev(OUT_C);
Wait(30);
pen_down();
OnFwd(OUT_C); //口部分
Wait(44);
Off(OUT_C);
Wait(50);
OnRev(OUT_A);
Wait(20);
Off(OUT_A);
Wait(50);
OnRev(OUT_C);
Wait(44);
Off(OUT_C);
Wait(50);
OnFwd(OUT_A);
Wait(16);
Off(OUT_A);
Wait(50);
pen_up(); //移動
OnFwd(OUT_A);
Wait(10);
Off(OUT_A);
OnRev(OUT_C);
Wait(10);
pen_down();
OnFwd(OUT_C); //画目
OnFwd(OUT_C); //ラスト画目
Wait(49);
Off(OUT_ABC);
}[[2017a/Member]]
}
*まとめ [#y3f8d024]
**書けた漢字 [#d9d729df]
ロボットに動ける範囲の制限があったのでスタートの位置を気を付ける必要があった。下の写真が書けた漢字だ。上手くいったりいかなかったりしたので一番きれいに書けたものを選んだ。書き順はロボットが書きやすいようにしている。
&ref(2017a/Member/ejj/Mission1/pic_ejj7.JPG,50%,);
&ref(2017a/Member/ejj/Mission1/pic_ejj8.JPG,50%,);
**感想 [#pd39577b]
こんなに時間をかけて何かを作成したのは初めてかもしれない。特にプログラムで苦労し、何十回ものテストをした。何度も投げ出したくなったけど、周りの人がしているところを見ると最後まで頑張ることができ、最後にはものすごい達成感を感じた。しかしまだいくつかの課題があると思う。ロボットは動き(特にペンの上下運動)をもう少しゆっくりできるように歯車の組み合わせを調整したほうがよかった。また、プログラムは長くなりすぎたのでもっとシンプルで分かりやすいようにすべきだった。次回からは今回の課題を達成できるように努力していきたい。