目次
・A4の紙に松本の大学生活を表す漢字1文字を書くロボットを制作する。
・7画以上の漢字であること。
・文字は15cm四方に収まる大きさにすること。
松本に来てふと見上げた夜空の星がとても綺麗で印象的だったので「星」という漢字にした。
私たちは本体部分をほとんど改造せずに重心を低くするのみだった。(写真1を参照)
今回私たちはロボットの先にペンを取り付けるというシンプルな方法を取った。(写真2を参照)
私は書き順にはこだわらず、次の写真のような書き順で「星」を書いた。
・私たちの組み立てたロボットは左右のタイヤの回転数が若干異なっていたため左右のモーターの速度を変え調節した。
・横の動きを連続して書くことによりプログラムを簡略化した。
回転させるモーターはA,B,Cの3つがあり、それぞれ
A:ペンの上げ下げをする。
OnFwd(OUT_A)→ペンを下ろす OnRev(OUT_A)→ペンを上げる
B:右のタイヤを回転させる。
C:左のタイヤを回転させる。
となっている。
#define speed_left 50//左のモーターの回転速度 #define speed_right 47//右のモーターの回転速度 #define time_pen 90//ペンの上げ下げする時間 #define move_time_L 333//1画目と2画目の動く時間 #define move_time_S 410//2~7画目の動く時間
・1画目と2画目の縦線を書くプログラム
#define long_line OnFwd(OUT_A,50);Wait(time_pen);Off(OUT_A);Wait(1000);\ OnRev(OUT_B,speed_right);OnRev(OUT_C,speed_left);Wait(move_time_L);Off(OUT_BC);Wait(1000);OnRev(OUT_A,50);\ Wait(time_pen);Off(OUT_A);Wait(1000);OnFwd(OUT_B,speed_right);OnFwd(OUT_C,speed_left);Wait(move_time_L);\ Off(OUT_BC);Wait(1000);
・3~7画目を書くプログラム
#define short_line OnFwd(OUT_A,50);Wait(time_pen);Off(OUT_A);Wait(1000);\ OnFwd(OUT_B,speed_right);OnFwd(OUT_C,speed_left);Wait(move_time_S);Off(OUT_BC);Wait(1000);OnRev(OUT_A,50);\ Wait(time_pen);Off(OUT_A);Wait(1000);OnRev(OUT_B,speed_right);OnRev(OUT_C,speed_left);Wait(420);\ Off(OUT_BC);Wait(1000);
・右に90°回転し、まっすぐ直進し左に90°回転するプログラム
#define turn_s OnFwd(OUT_B,speed_right);OnRev(OUT_C,speed_left);Wait(545);\ Off(OUT_BC);Wait(1000);OnFwd(OUT_B,speed_right);OnFwd(OUT_C,speed_left);Wait(180);Off(OUT_BC);Wait(1000);\ OnFwd(OUT_C,speed_left);OnRev(OUT_B,speed_right);Wait(563);Off(OUT_BC);Wait(1000);
(書き順、書き方は書き順欄を参照)
task main() {
1画目
long_line;
1画目から2画目に移動
OnFwd(OUT_C,speed_left); OnRev(OUT_B,speed_right); Wait(650); Off(OUT_BC); Wait(1000); OnFwd(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(450); Off(OUT_BC); Wait(1000); OnFwd(OUT_B,speed_right); OnRev(OUT_C,speed_left); Wait(590); Off(OUT_BC); Wait(1000);
2画目
long_line;
2画目から3画目に移動
OnFwd(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(750); Off(OUT_BC); Wait(1000); OnFwd(OUT_B,speed_right); OnRev(OUT_C,speed_left); Wait(550); Off(OUT_BC); Wait(1000); OnRev(OUT_B,speed_right); OnRev(OUT_C,speed_left); Wait(800); Off(OUT_BC); Wait(1000);
3〜7画目
repeat(5){ short_line; turn_s }
8画目
OnRev(OUT_B,speed_right); OnRev(OUT_C,speed_left); Wait(205); Off(OUT_BC); Wait(1000); OnFwd(OUT_A,50); Wait(time_pen); Off(OUT_A); Wait(1000); OnFwd(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(820); Off(OUT_BC); Wait(1000); OnRev(OUT_A,50); Wait(time_pen); Off(OUT_A); Wait(1000);
8画目から9画目に移動
OnFwd(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(810); Off(OUT_BC); Wait(1000); OnRev(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(917); Off(OUT_BC); Wait(1000); OnRev(OUT_B,speed_right); OnRev(OUT_C,speed_left); Wait(634); Off(OUT_BC); Wait(1000);
9画目
OnFwd(OUT_A,50); Wait(time_pen); Off(OUT_A); Wait(1000); OnFwd(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(298); Off(OUT_BC); Wait(1000); OnRev(OUT_A,50); Wait(time_pen); Off(OUT_A); Wait(1000);
9画目から10画目に移動
OnFwd(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(1050); Off(OUT_BC); Wait(1000); OnRev(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(950); Off(OUT_BC); Wait(1000); OnRev(OUT_B,speed_right); OnRev(OUT_C,speed_left); Wait(400); Off(OUT_BC); Wait(1000);
10画目
OnFwd(OUT_A,50); Wait(time_pen); Off(OUT_A); Wait(1000); OnFwd(OUT_B,speed_right); OnFwd(OUT_C,speed_left); Wait(400); Off(OUT_BC); Wait(1000); OnRev(OUT_A,50); Wait(time_pen); Off(OUT_A); }
上記のプログラムで「星」を書いた結果次の写真のようになった。
今回初めて自分でプログラミングしてみたが、回転する角度がおかしくなってしまったり線が長すぎや短すぎるという事態が多発した。
しかし、改良を加えていくにつれてだんだんきちんとした「星」になったと思う。
10画目が少し上になってしまったのは残念だが最初に書いていたものに比べると格段に良くなったと思う。
今回のプログラミングを通してプログラミングは大変だがきちんとしたものが完成した時の嬉しさ・達成感がとてもいいものであると思った。
次回も今回の達成感と嬉しさを忘れずにより一層頑張ろうと思う。