目次 #contents *課題1 [#c53baac1] これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙の範囲内に書くロボットを製作せよ。 [選んだ文字] **選んだ文字 [#hc071ccf] 私が今現在住んでいる「松本」とという字を選んだ。 *ロボットの説明 [#keedb3ac] 当初、ロボット自体をグルグルと動かして、字を書こうとしたがプログラミングが大変なため、XY方式にした。ロボット自体を前後(Y軸方向)に動かし、ペンの部分を左右(X軸方向)に動かす。 そのほかにペンの上げ下げ(Z軸方向)を用意した。 下の写真がロボット全体の写真である。 #ref(IMG_1131 (2).JPG,,10%) **Y軸方向に動かす装置 [#j26a7606] 1つのモーターに2つのタイヤをつけて、前後に動かせるようにした。ただ、このタイヤの上に操縦版を設置したが、モーターと操縦版をつなげる部品がタイやとぶつかってしまったりしてしまった。 #ref(IMG_1121.JPG,,10%) **X軸方向に動かす装置 [#f859a2ea] レールを作りその上にタイヤをつけたモーターを走らせることによって、左右の動きを可能にした。モーターが動く際にモーターの重みでレールが壊れてしまうのを避けるために、レールのつなぎ目や端にタイヤをつけることによって、バランスをとった。しかし、レールをつけたことによって右側が重くなってしまい、Y軸方向に動かす際にロボット全体のバランスが悪くなってしまった 。 #ref(IMG_1122.JPG,,10%) **Z軸方向に動かす装置 [#ccef09e4] Y軸方向に動かす装置の上につけることによって、シンプルにペンの上げ下げをできるようにした。しかし、x軸方向に動かす装置の上にのっけることにより、Y軸方向に動かす際にスムーズに動かすごとができなかった。 *プログラムの説明 [#j1e41f92] **プログラムの定義 [#kda91bd9] #define pen_down OnFwd(OUT_C,8);Wait(1200);Off(OUT_C); 筆を下げる(速さ8) #define pen_up OnRev(OUT_C,8);Wait(1700);Off(OUT_C); 筆を上げる (速さ8) #define all_off Off(OUT_ABC); すべての動作停止 #define left_down OnFwd(OUT_A,30);OnRev(OUT_B,30);Wait(1500);Off(OUT_AB) 左下への動作 #define right_up OnRev(OUT_A,30);OnFwd(OUT_B,30);Wait(1500);Off(OUT_AB) 右上への動作 #define right_down OnRev(OUT_A,30);OnFwd(OUT_B,30);Wait(1500);Off(OUT_AB)右下への動作 #define left_up OnFwd(OUT_A,30);OnRev(OUT_B,30);Wait(1500);Off(OUT_AB) 左上への動作 筆の上げ下げのスピードを早くするとロボットのバランスがとれなくなったため、遅いスピードにした。 **「松」を書くプログラム [#xe5185d2] task main() { pen_down; OnFwd(OUT_B,30); //木へんの横線 Wait(1200); all_off; pen_up; OnRev(OUT_B,30); //線の真ん中へ Wait(600); all_off; pen_down; OnRev(OUT_A,30); //木へんの縦線 Wait(600); OnFwd(OUT_A,30); Wait(1500); all_off; pen_up; OnRev(OUT_A,30); //縦線と横線の交わるところへの移動 Wait(600); all_off; pen_down; left_down; //木へんの左斜め下の線 all_off; pen_up; right_up; all_off; pen_down; right_down; //木へんの右斜め下の線 all_off; pen_up; left_up; all_off; OnFwd(OUT_B,30); //「公」の一画目の位置への移動 Wait(1000); all_off; pen_down; //「ハ」の字の左側部分の線 right_up; pen_up; OnFwd(OUT_B,30); //「公」の二画目の位置への移動 Wait(500); all_off; pen_down; right_down; //「ハ」の字の右側の部分の線 all_off; pen_up; OnRev(OUT_B,30); //「ム」の字の一画目の位置への移動 Wait(1000); pen_down; left_down; //「ム」の字の斜め線 OnFwd(OUT_B,30); //「ム」の字の右線 Wait(1000); all_off; right_down; //「ム」の字の右斜め下の線 all_off; **[本」を書くプログラム [#q1914522] pen_up; OnFwd(OUT_A,30); //「本」を書く位置への移動 Wait(3000); all_off; pen_down; OnRev(OUT_B,30); //「本」の一番上の横線 Wait(2000); all_off; OnFwd(OUT_B,30); Wait(1000); left_down; //「本」の左斜め下の線 all_off; right_up; right_down; //「本」の右斜め下の線 all_off; left_up; all_off; OnRev(OUT_A,30); //「本」の縦線 Wait(500); OnFwd(OUT_A,30); Wait(2000); all_off; OnRev(OUT_A,30); //「本」の下の横線の位置への移動 Wait(1000); all_off; OnRev(OUT_B,30); //「本」の下の横線 Wait(1000); all_off; OnFwd(OUT_B,30); Wait(2000); all_off; } 全体として長いプログラムになってしまった気がするので、もっとうまく定義を使ってコンパクトなプログラムを作るべきだった。また、一回、一回、ロボットを止めるなどして、ロボットのバランスを安定させるべきだった。 *完成した文字 [#b034c2bf] #ref(IMG_1120.JPG,,turn_right,10%) あまりうまい字とはいえなく、バランスが崩れたりしてしまった。 *課題�気隆響� [#f8cf34a0] 初めて設計図もなしに、自分たちでロボットをいちから作り、プログラムをつくって動かしてみたが、最初に思っていたとおり、とても難しかったです。僕のグループは先にロボットを組み立てましたが、実際にプログラムを入れると動かなかったりして、大変でした。同時並行で進めていくのがいいのかなと思いました。X軸方向とY軸方向に同時に動かして斜めに線を書くのが、力の調節など難しかったです。次回の課題では今回の反省を生かして、少しでも効率よく正確なロボットを作れるようによく考えたいです。