これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作せよ。
私たちは、現在住んでいる「松本」という地名を選んだ。
前後左右に動いて、文字を書くロボットを作ることにした。下記の3つの構造を組み合わせ、ロボットを組み立てた。
以下がロボットの写真である。
一つのタイヤで二つのモーターを一気に動かせるようにした。
また、歯車を2列にして使い、(8/24)×(8/40)=1/15 とスピードを減速させた。
歯車の回転運動を左右の直線運動に帰るために、平らでギザギザしたパーツを使用した。
ここでも、減速をするために歯車を使いスピードを(8/40)×(8/24)=1/15 とし、白い歯車を使うことで、大きな負荷がかかっても空回りしてロボットが壊れることを予防した。 1のロボットを前後に動かす際と似たような歯車の使いかたをしたが、タイヤを使う点、ギザギザのパーツを使う点が異なっており、左右で程よいバランスに動くように歯車の数や大きさを調節するのが大変だった。
さらに、左右の動きを安定化させるために右側にモーターの力が伝わらない歯車を設置した。
上部の青いパーツは、位置を微調整する際に使用した。
ここでも、ペンを左右に動かすときにと同様に、青いパーツを取り付けて簡単に微調整を行えるようにした。
写真右側のモーターから左側のペンに動力を伝える。
接合部分の紫色のチューブによって、モーターが回りすぎても空回りし、ロボットが壊れることを予防できた。
プログラムを書くためにdefineを使い、プログラムを見やすくした。 定義したものは以下の通り。
#define TATE_down150 OnFwd(OUT_B);Wait(150);Off(OUT_B); //下に動く #define TATE_down50 OnFwd(OUT_B);Wait(50);Off(OUT_B); #define TATE_UP50 OnRev(OUT_B);Wait(50);Off(OUT_B); //上に動く #define TATE_UP100 OnRev(OUT_B);Wait(100);Off(OUT_B); #define TATE_UP25 OnRev(OUT_B);Wait(25);Off(OUT_B);
#define NANAME_right OnFwd(OUT_B);OnRev(OUT_C);Wait(100);Off(OUT_BC); //斜め右に動く #define NANAME_right_half OnFwd(OUT_B);OnRev(OUT_C);Wait(050);Off(OUT_BC); #define NANAME_right_quarter OnFwd(OUT_B);OnRev(OUT_C);Wait(025);Off(OUT_BC); #define NANAME_rightback OnRev(OUT_B);OnFwd(OUT_C);Wait(100);Off(OUT_BC); #define NANAME_rightback_half OnRev(OUT_B);OnFwd(OUT_C);Wait(050);Off(OUT_BC); #define NANAME_rightback_quarter OnRev(OUT_B);OnFwd(OUT_C);Wait(035);Off(OUT_BC); #define NANAME_left OnFwd(OUT_BC);Wait(100);Off(OUT_BC); //斜め左に動く #define NANAME_left_half OnFwd(OUT_BC);Wait(050);Off(OUT_BC); #define NANAME_leftback OnRev(OUT_BC);Wait(100);Off(OUT_BC); #define NANAME_leftback_half OnRev(OUT_BC);Wait(050);Off(OUT_BC);
#define YOKO_left100 OnFwd(OUT_C);Wait(100);Off(OUT_C); //左に動く #define YOKO_left50 OnFwd(OUT_C);Wait(50);Off(OUT_C); #define YOKO_right100 OnRev(OUT_C);Wait(100);Off(OUT_C); //右に動く #define YOKO_right50 OnRev(OUT_C);Wait(050);Off(OUT_C);
#define UP OnFwd(OUT_A);Wait(100);Off(OUT_A); //ペンが上がる #define DOWN OnRev(OUT_A);Wait(50);Off(OUT_A); //ペンが下がる
「松」の書き順は以下の通り。
task main() { YOKO_right100; //1画目 UP; YOKO_left50; //1から2への移動 TATE_UP50;
DOWN; //2画目 TATE_down150; UP; TATE_UP100; //2から3への移動
DOWN; //3画目 NANAME_left_half; UP; NANAME_leftback_half; //3から4への移動
DOWN; //4画目 NANAME_right_half; UP; TATE_UP100; //4から5への移動 YOKO_right50;
DOWN; //5画目 NANAME_left_half; UP; NANAME_leftback_half; //5から6への移動 YOKO_right50;
DOWN; //6画目 NANAME_right_half; UP; YOKO_left100; //6から7への移動
DOWN; //7画目 NANAME_left_half; YOKO_right100; UP; NANAME_rightback_quarter; //7から8への移動
DOWN; //8画目 NANAME_right_half; UP;
YOKO_left100; YOKO_left100; TATE_down150;
「本」の書き順は以下の通り。
DOWN; //1画目 YOKO_right100; YOKO_right100; UP; YOKO_left100; //1から2への移動 TATE_UP50;
DOWN; //2画目 TATE_down150; UP; TATE_UP50; //2から3への移動 TATE_UP50;
DOWN; //3画目 NANAME_left; UP; NANAME_leftback; //3から4への移動
DOWN; //4画目 NANAME_right; UP; YOKO_left100; //4から5への移動 YOKO_left50; TATE_UP25;
DOWN; //5画目 YOKO_right100; }
結構きれいに書けたのではないかと思う。ただ、問題点として、以下があげられる。
解決策としては、