目次
これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作せよ。
出身地である「幸田」という地名を選んだ。同じ県民でも知らない人が多い町だ。
他のチームは前後に動く土台の上でペンが横移動する形(プリンター型)が多いが、僕たちのチームはペンと一体のロボット全体が前後左右に移動する形(車型)を採った。つまり、ロボットが通った道のりがそのまま文字となる仕組みである。モーターを2つ使って移動し、もう1つでペンを上下に動かす。車型にした理由は、ベルトなどのようなプリンター型に適したパーツがNXTのセットには含まれていなかったからである。
可動の土台が必要なプリンター型に比べて、車型は土台がないため小型である。
ペンが回転の中心に来るようにした。こうすることで方向転換するときにペンの位置が変わらず、無駄な動作を省ける。
ペンを垂直に保ったまま動かすことで、きれいな線が書ける。ペンが浮かない。下の画像はペンの上下機構である。
ペンの上下機構を図で示すと、下の画像のようになる。
ギアを使うことで、動きの安定感が増す。
まずは完成予想図を考えた。2cm四方をを6×6で並べたものを1文字の大きさとし、マスの辺上に線を書くようにした。次に書き順を考えた。誤差を減らすために、できるだけ少ない移動で書ける順番にした。
文字を書くためには、文字に合わせてロボットを移動させなければならないので、前後移動、方向転換、ペンの上下を #define を使って以下のように定義した。
#define GO Onfwd(OUT_B,50);Onfwd(OUT_C,48);Wait(660);Off(OUT_BC); #define BACK OnRev(OUT_B,50);OnRev(OUT_C,48};Wait(660);Off(OUT_BC);※4cm以上動かすときは、repeatを使って2cmを繰り返すようにした。こうすることで安定した長さの比が得られる。
#define Turn_left Onfwd(OUT_B,50);OnRev(OUT_C,50);Wait(4000);Off(OUT_BC); #define Turn_right Onfwd(OUT_C,50);OnRev(OUT_B,50);Wait(4000);Off(OUT_BC);
#define P_ON OnFwd(OUT_A,40);Wait(500);Off(OUT_A); #define P_OFF OnRev(OUT_A,40);Wait(500);Off (OUT_A);
あとは完成予想図の順番に従ってマクロ等を並べるだけだ。 22~24は同じものが連続するため、 repeat でまとめた。 プログラムの各行右端の数字は、完成予想図に示した番号に対応する。
task main() { repeat(2){GO;}; // 0 Turn_left;repeat(3){GO;}; // 1 P_ON;repeat(4){GO;}; // 2 P_OFF;repeat(2){BACK;}; // 3 Turn_right;BACK; // 4 P_ON;repeat(2){GO;}; // 5 P_OFF;Turn_left;repeat(3){BACK;}; // 6 P_ON;repeat(6){GO;}; // 7 P_OFF;repeat(2){BACK;}; // 8 Turn_right;P_ON;repeat(2){GO;}; // 9 P_OFF;repeat(2){BACK;}; // 10 Turn_left;repeat(2){BACK;}; // 11 Turn_right;P_ON;repeat(2){GO;}; // 12 P_OFF;Turn_left;repeat(2){BACK;}; // 13 P_ON;repeat(6){GO;}; // 14 P_OFF;repeat(3){BACK;}; // 15 Turn_right;P_ON;repeat(2){GO;}; // 16 P_OFF;BACK; // 17 Turn_left;repeat(2){BACK;}; // 18 P_ON;repeat(4){GO;}; // 19 P_OFF;Turn_right;repeat(3){GO;}; // 「幸」完成、20 P_ON;repeat(4){GO;}; // 21 repeat(3){Turn_right;repeat(4){GO;};}; // 22~24 P_OFF;repeat(2){BACK;}; // 25 Turn_right;P_ON;repeat(4){GO;}; // 26 P_OFF;repeat(2){BACK;}; // 27 Turn_left;repeat(2){BACK;}; // 28 P_ON;repeat(4){GO;}; // 29 P_OFF;repeat(3){GO;};PlaySound(SOUND_DOUBLE_BEEP); // 終 }
読める字が書けてよかった。 直線がきれいなのが自慢である。 「90°回転」のWaitの時間調節が難しかった。 このロボットは回転が重要で、電池の消耗により常に一定の角度で回転することができないのが弱点だ。 ちょうど90°にあわせることができれば、さらにきれいな文字が書けるだろう。