- 追加された行はこの色です。
- 削除された行はこの色です。
[[2017a/Member]]
*目次 [#k1f6635d]
#contents
*課題 [#g9a3d07c]
**課題概要 [#e1622fa7]
A4の紙に松本の大学生活を表す7画以上の漢字一文字を書くロボットを製作する。
~[[詳しくはこちら:http://yakushi.shinshu-u.ac.jp/robotics/?2017a%2FMission1]]
~相方のページは[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2017a%2FMember%2FtigerM%2FMission1]]
**選んだ漢字・理由 [#pce29cad]
「晴」 松本はあまり雨が降らず、快晴や晴れの日が多いのでこの漢字にした。
*機体の説明 [#h2477691]
**全体 [#h67e7edb]
縦方向に移動するロボット、その上を横方向に移動するロボットからできている。この形にしようと決めた当初は、脱輪を防ぐためペンを持ったロボットをレールからぶら下げるつもりだった。しかし高さ、安定性に問題があったためこの形になった。また、この形で脱輪を防ぐために、レールの内幅とペンの可動部の幅を同じにした。
~&ref(zenntaizou.png);&ref(re-ru.png);
** 縦移動ロボット[#w87af24f]
NXT本体を有するパーツ。本体右後方にモーターが付いている。
レール部分を長くすることで横幅の大きい漢字にも対応できる。
&ref(dodai.JPG);
** 横移動ロボット[#g87fd3a2]
後ろのコックピット、パイロットは機体の重心を中心にするためにつけている。これがなければ前方に倒れてしまう。
&ref(yokokadou.JPG);
**ペン可動部 [#a3afcc4f]
ペンを輪ゴムを使いここにつける。ペン先が円を描くように上下する。
&ref(pennkadou.png);
#define pen_down OnFwd(OUT_A,25);Wait(180);Off(OUT_A);
#define pen_up OnFwd(OUT_A,-25);Wait(220);Off(OUT_A);
*プログラムの説明 [#n8274770]
**書き方 [#x44e6bc4]
下の写真のような書き順にした。ほとんど普通の書き順だが、少しだけ変えた。
右から左へ横向きに線を引いた方が短時間で書き終えることができるが、機体の特性上、右から左へ横向きに線を引くと上手に線が引けないので横向きの線は左から右へ引くようにしている。
&ref(kakijunn.JPG);
**プログラム [#x03a944a]
ペンの上げ下げの動作は、あらかじめ定義しておいた。
#define pen_down OnFwd(OUT_A,25);Wait(180);Off(OUT_A);//ペンを下げる
#define pen_up OnFwd(OUT_A,-25);Wait(220);Off(OUT_A);//ペンを上げる
一画ごとにサブルーチンを作った。2画目と10画目、6画めと7画目は動きが同じなので同じサブルーチンを使用している。
sub ONE()
{
pen_down;
OnFwd(OUT_C,-25);
Wait(1240);
Wait(620);
Off(OUT_C);
pen_up;
}
sub TWO()
sub TWO_TEN()
{
OnFwd(OUT_C,25);
Wait(1240);
Wait(620);
Off(OUT_C);
pen_down;
OnFwd(OUT_B,-35);
Wait(800);
Wait(400);
Off(OUT_B);
OnFwd(OUT_C,-25);
Wait(1240);
Wait(620);
Off(OUT_C);
pen_up;
}
}
sub THREE()
{
OnFwd(OUT_C,25);
Wait(600);
Wait(300);
Off(OUT_C);
OnFwd(OUT_B,35);
Wait(800);
Wait(400);
Off(OUT_B);
pen_down;
OnFwd(OUT_B,-35);
Wait(800);
Wait(400);
Off(OUT_B);
OnFwd(OUT_B,-35);
pen_up;
}
sub FOUR()
{
OnFwd(OUT_B,35);
Wait(425);
Off(OUT_B);
OnFwd(OUT_C,-25);
Wait(325);
Off(OUT_C);
pen_down;
OnFwd(OUT_B,-35);
Wait(400);
Off(OUT_B);
pen_up;
}
sub FIVE()
{
OnFwd(OUT_B,-35);
Wait(200);
Off(OUT_B);
OnFwd(OUT_C,25);
Wait(840);
Off(OUT_C);
pen_down;
OnFwd(OUT_B,-35);
Wait(520);
Off(OUT_B);
pen_up;
}
sub SIX_SEVEN()
{
OnFwd(OUT_C,-25);
Wait(180);
Off(OUT_C);
OnFwd(OUT_B,35);
Wait(950);
Wait(520);
Off(OUT_B);
pen_down;
OnFwd(OUT_B,-35);
Wait(520);
Off(OUT_B);
pen_up;
}
sub EIGHT()
{
OnFwd(OUT_B,35);
Wait(265);
Off(OUT_B);
pen_down;
OnFwd(OUT_C,25);
Wait(528);
Off(OUT_C);
pen_up;
}
sub NINE()
{
OnFwd(OUT_B,35);
Wait(130);
Off(OUT_B);
OnFwd(OUT_C,-25);
Wait(650);
Wait(612);
Off(OUT_C);
pen_down;
OnFwd(OUT_C,-25);
Wait(620);
Off(OUT_C);
pen_up;
}
sub ELEVEN()
{
OnFwd(OUT_C,25);
Wait(410);
Off(OUT_C);
OnFwd(OUT_B,35);
Wait(400);
Off(OUT_B);
pen_down;
OnFwd(OUT_B,-35);
Wait(800);
Wait(395);
Off(OUT_B);
pen_up;
}
sub TWELVE()
{
OnFwd(OUT_C,-25);
Wait(195);
Off(OUT_C);
OnFwd(OUT_B,35);
Wait(380);
Off(OUT_B);
pen_down;
OnFwd(OUT_B,-35);
Wait(395);
Off(OUT_B);
pen_up;
}
task main ()
全ての動作がサブルーチンですでに定義されているのでtask mainは短くなった。
task main()
{
ONE();
TWO();
TWO_TEN();
THREE();
FOUR();
FIVE();
SIX_SEVEN();
SIX_SEVEN();
EIGHT();
NINE();
TWO_TEN();
ELEVEN();
TWELVE();
}
*書いた字 [#h629c5d1]
上手く止まらずにつきだした部分が多々あったり、青の上の部分が揃わなかったりしたが、「晴」と読むことができる字にはなった。
&ref(kaitaji.JPG);
*感想・反省 [#ac55596d]
サブルーチンを作っておくことで動作確認、変更は非常にやりやすかった。しかし、レール部分を凹凸のあるパーツにしたせいか字の形は毎回異なっていた。次回はそういうことも考えつつ、安定した機体を作ったいきたい。
機体のおかげでプログラミングは想像していたよりは難しくなかった。次回はこう簡単にはいかないと思うので覚悟していきたい。
ホームページ作りは想像より難しく時間がかかった。