- 追加された行はこの色です。
- 削除された行はこの色です。
[[2017a/Member]]
目次
#contents
*Mission1 [#aad87d9a]
大学生活を表す漢字一文字を書かせるとのことでアパートと大学が近いことから、「近」を描くことに決めた。
*本体について [#zce957cf]
本体は小回りを利かせるために標準形の横幅を少し短くした。
*書く機構について [#y4349824]
書く機構は車体の中心にボールペンを設置した。中心に描く機構を置くことで旋回時の誤差は約半径1cmに抑えることができた。(説明入れる)
ボールペンは輪ゴムを使って常に抑えている状態にした。最初はモーターを使って押し付ける機構を考えていたが、常にモーターを駆動させている状態はモーターへのかなりの負担になるので役割を反対にした。
***書く機構の失敗作について [#c0d7e677]
最初は画像のような機構を考えていたが、旋回時の誤差が考えていたよりも大きくプログラミングでの調整が難しくなったので、変更をした。
*プログラムについて [#q368940a]
***使用した関数 [#g14a2a06]
#define mae_susumu(f) OnFwd(OUT_AC); Wait(f); Off(OUT_AC); //fの値だけ進む
#define mae_susumu_up(f) OnFwd(OUT_AC); OnRev(OUT_B); Wait(f); Off(OUT_ABC); //ペンを上げてfの値だけ進む
#define ushiro_sagaru(y) OnRev(OUT_AC); Wait(y); Off(OUT_AC); //yの値だけ後ろに進む
#define ushiro_sagaru_up(y) OnRev(OUT_ABC); Wait(y); Off(OUT_ABC); //ペンを上げてyの値だけ後ろに進む
#define senkai_migi_up(g) OnFwd(OUT_A); OnRev(OUT_BC); Wait(g); Off(OUT_ABC); //ペンを上げてgの値だけ右旋回する
#define senkai_hidari_up(h) OnFwd(OUT_C); OnRev(OUT_AB); Wait(h); Off(OUT_ABC); //ペンを上げてhの値だけ左旋回する
#define senkai_migi(g) OnFwd(OUT_A); OnRev(OUT_C); Wait(g); Off(OUT_AC); //gの値だけ右旋回する
#define senkai_hidari(h) OnFwd(OUT_C); OnRev(OUT_A); Wait(h); Off(OUT_AC); //hの値だけ左旋回する
関数名は誰が見てもわかりやすいように名前を付けた。Bモーターを作動させていない状態だと、常にペンが紙にあたってしまうので、ペンを上げて進む関数とペンを下げて進む関数2パターンを用意した。関数名も「_up」を末尾につけるだけでいいので簡単にプログラムができる。
***プログラム本体について [#o241eadf]
task main ()
{
Wait(200); // 準備時間
ichikaku_me();
nikaku_me();
sankaku_me();
Wait(40); //車体のバランスが崩れるので間を入れる
yonkaku_me();
gokaku_me_idou();
gokaku_and_rokukaku_me();
nanakaku_me();
}
上のように、「task main」はサブルーチンを使用しているので簡潔になっている。
「車体のバランスが崩れるので間を入れる」についての反省点はこちら(リンク張る)で説明している。
**各サブルーチンについて [#w245c2da]
*1画目 [#kaee0267]
sub ichikaku_me()
{
mae_susumu(16);
}
一画目は点を打つだけ
*2画目 [#hc14847c]
sub nikaku_me()
{
senkai_migi_up(100);
mae_susumu_up(30);
senkai_hidari_up(140);
mae_susumu(21); //本来はこのまま続けてるが、ロボットのうごきが複雑なのでここで2画目とする
}
最初の3行までのプログラムは旋回時の誤差を修正するための動作である。この動作の理由についてはこちら(リンク張る)で説明している。またコメント分にあるように動きが複雑で調整が難しくなりそうだったのでここで2画目とした。
*3、4画目 [#u9df7910]
sub sankaku_me() //
{
mae_susumu_up(13);
senkai_migi_up(200);
Wait(30); //反動で車体が浮くので間を入れる
mae_susumu(31);
senkai_hidari_up(200);
ushiro_sagaru(15);
Wait(30); //反動で車体が浮くので間を入れる
mae_susumu(20);
senkai_hidari_up(36);
Wait(30); //反動で車体が浮くので間を入れる
ushiro_sagaru(40);
}
sub yonkaku_me()
{
mae_susumu_up(10);
Wait(30); //反動で車体が浮くので間を入れる
senkai_migi_up(70);
mae_susumu(86); //しんにょう終わり
}
3画目はカクカク細かく動くことが多く、間隔を入れないと倒れてしまう。この点の反省についてはこちら(リンク張る)
*5、6、7画目 [#hdee8e52]
sub gokaku_me_idou()
{
senkai_hidari_up(130);
mae_susumu_up(55);//5画目の開始地点移動へ
senkai_hidari_up(100);
mae_susumu_up(25);
senkai_migi_up(100);
}
sub gokaku_and_rokukaku_me()
{
senkai_migi_up(70);
ushiro_sagaru(23);
Wait(30); //反動で車体が浮くので間を入れる
mae_susumu_up(9);
Wait(30); //反動で車体が浮くので間を入れる
senkai_hidari_up(60);//ここから6画目
ushiro_sagaru(25);
Wait(30); //反動で車体が浮くので間を入れる
mae_susumu(18);
}
sub nanakaku_me()
{
senkai_hidari_up(110);
ushiro_sagaru_up(9);
Wait(30); //反動で車体が浮くので間を入れる
ushiro_sagaru(23);
Wait(30); //反動で車体が浮くので間を入れる
mae_susumu_up(13)
Wait(30); //反動で車体が浮くので間を入れる
senkai_hidari_up(110);
ushiro_sagaru(10);
Wait(30); //反動で車体が浮くので間を入れる
mae_susumu(30);
}
最初のサブルーチン、「gokaku_me_idou」の調整でつくりが斜めになったり、変な位置に書かれてしまったりと大変だった。
5、6、7画目も誤差の修正などの細かな動作が多い。
*完成した文字 [#le68214d]
&ref(2017a/Member/tsukuzin/Mission1/近333.png,50%,画像の説明);
&ref(2017a/Member/tsukuzin/Mission1/近444.png,50%,);
左の「近」はもっともきれいな形で書いてくれた時の写真。ただ、ボールペンの調子があまりよくなくて、かすれてしまっている。(撮影時に影になってしまったので見やすくなるように加工をしている)
右は発表会当日に書いた時の写真。つくりが傾いてしまったことが残念だった。