- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
* 目標 [#r1a89bc0]
A4の紙に今年の大学生活を表す漢字一文字「画」という漢字を書くロボットの制作。
* 漢字設定の理由 [#f771047d]
所属学部名と学科名の画数が多すぎて、テストやプリントを配布されるたびにうんざりしてしまっていたから。
* ロボット本体の説明 [#jc9b74c3]
** 動作 [#ef8e180f]
** アーム [#ue88589c]
*** ほわほわほわほわ [#n31dd562]
** 動作の説明 [#ef8e180f]
プログラムを簡単にするため、x軸y軸でペンを動かすロボットを制作した。x軸のペンの移動はレールを作成し、その上をスライドさせることにした。y軸の移動はロボット本体をタイヤで前後に動かすことで実現させた。次にペンの上げ下げの動作だが、アームの回転運動によって動かすことにした。
#ref(全体1.jpg)
#ref(全体2.jpg)
** 軸のスライド運動の仕組みの説明 [#n1423de9]
*** レールの説明 [#r3b0f429]
スライドさせるためにはなめらかな面を必要とするため、灰色の薄型で長いブロックの凹面を上にして組み合わせ、レールの底面とした。黒色の長いブロックも同様に凹面を上にしてレールの底面に接着し、レールの側面とした。しかしこのままではロボット本体との接着が不可能なので、黒色の長いブロックの凹面を上にしたものをレールの底面に組み合わせ、その黒色の長いブロックの側面についた穴に接続するための部品を差し込み、黒色の長いブロックの凸面を上にしたものを取り付けた。凸面を上にしたブロックを取り付けることで、ロボットの土台にレールをのせる方法での接着が可能になった。
#ref(レールとギア.jpg)
*** スライドの方法の説明 [#y625f6ba]
ギザギザの部品と黒色の長いブロックを組み合わせたもの(パーツAとする)を、レールの上でスライドさせる。動かす方法は、モーターと噛ませたギアをパーツAのギザギザの部品と噛ませて、モーターを回転させることで動かす。
#ref(パーツAにアーム等.jpg)
** y軸移動のためのタイヤの説明 [#s58c24c9]
モーターは後輪のみに取り付けて四輪とした。後輪にしかモーターを取り付けなかった理由は、x軸のスライド運動とアームの上げ下げのためにモーターをとっておきたかったからである。四輪にしたのは、よりロボットが安定すると判断したためである。
#ref(タイヤ.jpg)
** アームの説明 [#ue88589c]
アームとそれを動かすモーターをパーツAに取り付ける。その際、アームとモーターを近い位置に取り付けるとすると、重さのバランスが悪くなる。よって、アームとそれを動かすモーターは、それぞれパーツAの両はじに取り付けることにした。どうやって、アームにモーターの力を伝えるかというと、大きいギアと小さいギアを組み合わせて、小さいギアと同じ位置にゴムをかける円形の部品を取り付け、それとアーム部分に取り付けた同じくゴムをかける円形の部品とをゴムでつなげることで伝える。ペンの取り付けは、アーム二箇所にピンをつけ、そこに小さなゴムを引っ掛けることでペンを固定した。
#ref(アーム.jpg)
* プログラムの説明 [#hb75ae20]
* まとめ [#l1e38632]
#define go_forward(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);Wait(WAIT_TIME); //ロボットを前進させる。
#define go_back(t) OnRev(OUT_B);Wait(t);Off(OUT_B);Wait(WAIT_TIME); //ロボットを後退させる。
#define go_right(t) OnRev(OUT_C);Wait(t);Off(OUT_C);Wait(WAIT_TIME); //パーツAを右にスライドさせる。
#define go_left(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);Wait(WAIT_TIME); //パーツAを左にスライドさせる。
#define pen_up OnFwd(OUT_A);Wait(20);Off(OUT_A);Wait(WAIT_TIME); //ペンを持ち上げる。
#define pen_down OnRev(OUT_A);Wait(20);Off(OUT_A);Wait(WAIT_TIME); //ペンを下げる。
#define WAIT_TIME 100 //一つの動作が終わるごとの停止時間。
task main()
{
pen_up;
go_left(5); //書きはじめの位置を調節
pen_down;
go_left(20);
pen_up;
go_right(10);
pen_down;
go_back(30); //Tを書く
pen_up;
go_right(10);
pen_down;
go_left(20);
go_forward(20);
pen_up;
go_right(20);
go_back(20);
pen_down;
go_forward(20);
go_left(20); //□をかく
pen_up;
go_back(10);
go_right(20);
pen_down;
go_left(20); //□の中の一を書く
pen_up;
go_right(25);
pen_down;
go_back(15);
go_left(30);
go_forward(15); //凵を書く
}
文字を書くときに、ペンを右に引くとペン先が紙に引っかかりうまく文字がかけないことが多かったので、文字を書くときは必ずペンを左に引くようにプログラムした。一つの動作が終わるごとに停止時間を設けたのは、これがないとロボットの動きがあまりにも早く、また乱暴であり、しっかりとした「止め」ができなかったからである。また、ペンの上げ下げができるだけ少なくなるような書き順を意識した。
* 結果 [#j9be6fe7]
ペンの上げ下げの勢いが大きかったため、書き始めに滲み、書き終わりにブレが目立つが、「画」という字になっている。
#ref(最後に書いた画.jpg)
* まとめと反省 [#l1e38632]
今回の反省点は、アームにつなげたゴムを伸ばしすぎたこと、ギアの有効な使い方ができなかったことだ。また、ロボットの保存状態が悪かったのか、発表の場で思うようにロボットを動かせなかった。
しかし、初めてのプログラミングはとても楽しく行うことができた。次回も頑張りたい。