目次 #contents *課題1の内容 [#u2fb7e32] 自分の名前から一文字選び、その文字を書くロボットを制作する (文字が難しくなってしまう場合はイニシャルなどでも可) #br *ロボット本体 [#t13bd40a] 相方の提案で 「X軸Y軸Z軸の3つで制御する」 ことをテーマに作成した。 3つのモーターをそれぞれ、 +ロボット全体を動かす(X軸) +レール上を筆をぶら下げて動かす(Y軸) +筆を上げ下げする(Z軸) という動作を割り振った。 これにより、X-Y平面上のX,Y軸の動きで直線を描くことができるので、 プログラムを書くときにとてもわかり易く、調節もしやすくなった。 全体図 #ref(robot2.jpg) 筆を持った小さな台車がこのロボットの肝である。 モーターが2つつながった台車がレールの上をペンを持って走る。 2つのモーターにはそれぞれ、「筆の上げ下げ」と「X軸方向への動き」という仕事が割り振られている。 このレールの上を台車が行き来するX軸方向への動きと、ロボット全体のY軸方向への動きを使って文字を書く。 #ref(robo.jpg) このロボットを作成する過程で最も苦労した点は、台車を走らせるための長いレールを作ることだった。 そもそも部品が限られているなか、台車がまっすぐスムーズに動き、書いているうちにズレてしまわないように設計していった。 最初は本体の重量を減らすため、レールを支える柱の部分にタイヤではなく普通のブロックパーツを使用していた。しかし、動くときの摩擦でロボット全体が引っ張られてしまい、少しずつ向きが変わってしまうことがわかったため、タイヤをつけることになった。部品不足のため強度に不安があり、持ち運びの時に注意が必要だった。 *プログラム [#ode4f96f] 私は自分の名前から「朋」という文字を選んだ。 /*各スピードの指定*/ #define SPEED_1 30 //X軸方向のスピード #define SPEED_2 30 //Y軸方向のスピード #define SPEED_X 0 //X軸方向のスピード(変化) #define SPEED_Y 30 //Y軸方向のスピード(変化) /*各軸方向への動きの指定*/ #define go_forward_X(t) Off(OUT_AC); OnFwd(OUT_B,SPEED_1); Wait(t); Off(OUT_B); //X軸方向に SPEED_1で前進 #define go_back_X(t) OnRev(OUT_B,SPEED_1); Wait(t); Off(OUT_B); //X軸方向にSPEED_1で後退 #define go_forward_Y(t) Off(OUT_BC); OnFwd(OUT_A,SPEED_2); Wait(t); Off(OUT_A); //Y軸方向にSPEED_2で前進 #define go_back_Y(t) OnRev(OUT_A,SPEED_2); Wait(t); Off(OUT_A); //Y軸方向にSPEED_2で後退 #define up_pen ResetTachoCount(OUT_C); RotateMotor(OUT_C,-20,35); //筆上げ #define down_pen ResetTachoCount(OUT_C); RotateMotor(OUT_C,20,35); //筆下げ /*X-Y平面上の斜めの動きの指定(今回は間に合わず使用できなかった)*/ #define go_forward_XY(t) Off(OUT_ABC); OnFwd(OUT_B,SPEED_X); OnFwd(OUT_A,SPEED_Y); Wait(t); Off(OUT_AB); //X軸方向にSPEED_X,Y軸方向にSPEED_Yでそれぞれ前進 「朋」という字は「月」という文字を2つ並べた字であるので、「月」の文字を描く動作を、開始位置をずらして2回行うことにした。 /*文字の開始位置に筆を下ろした状態ではじめる*/ task main() { Wait(1000); //押してから1秒間待つ go_back_Y(1500); //↑ #ref(無題2.jpg) go_forward_X(750); //→ go_forward_Y(1500); //↓ #ref(無題4.jpg) up_pen; go_back_Y(700); //筆をあげて移動 down_pen; //筆を下ろす go_back_X(700); //← #ref(無題5.jpg) up_pen; go_back_Y(500); //筆をあげて移動 down_pen; //筆を下ろす go_forward_X(500); //→ #ref(無題6.jpg) up_pen; //1つ目の”月”終了 /*2つ目の”月”の開始位置へと移動*/ go_forward_X(400); go_forward_Y(1300); #ref(無題7.jpg) down_pen; //筆を下ろす /*同じように、2つ目の”月”を書き始める*/ go_back_Y(1500); go_forward_X(750); go_forward_Y(1500); up_pen; go_back_Y(800); down_pen; go_back_X(700); up_pen; go_back_Y(500); down_pen; go_forward_X(500); up_pen; } *結果 [#dde017cb] 「朋」 #ref() *考察・感想 [#o3b8a8e7] ロボット本体の制作をかなり工夫して時間を費やしたので、その分プログラミングはとてもしやすかった。このX-Y-Z軸で筆を動かす仕組みはプリンターの内部の構造によく似ているので、効率の良い方法だったのかもしれない。~ 実際に字を書いてみると、うまく行くときとかなりずれてしまうときでかなりバラつきがあった。これはやはりロボット自体がかなり大きいうえに動作部分がいくつもあるため、1回ごとの誤差が大きくなってしまったことが原因だと思われる。プログラムの側で誤差をカバーするのは大変なので、なるべく誤差の少ない動作が可能な設計を心がけるようにしたい。~ また、曲線を書こうと思ったときにプログラムが難しく、結局実装できなかったのが残念だった。直線を描くのは簡単に出来たが、曲線が描きにくいのがこのロボットの欠点かも知れない。