- 追加された行はこの色です。
- 削除された行はこの色です。
[[2014b/Member]]
目次
#contents
#課題1の内容
*課題1の内容 [#u2fb7e32]
自分の名前から一文字選び、その文字を書くロボットを制作する
(文字が難しくなってしまう場合はイニシャルなどでも可)
#br
*ロボット本体 [#t13bd40a]
相方の提案で 「X軸Y軸Z軸の3つで制御する」 ことをテーマに作成した。
3つのモーターをそれぞれ、
+ロボット全体を動かす(X軸)
+レール上を筆をぶら下げて動かす(Y軸)
+筆を上げ下げする(Z軸)
という動作を割り振った。
これにより、X-Y平面上のX,Y軸の動きで直線を描くことができるので、
プログラムを書くときにとてもわかり易く、調節もしやすくなった。
全体図
#ref(robot2.jpg)
このレールの上を台車が行き来する
#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回ごとの誤差が大きくなってしまったことが原因だと思われる。プログラムの側で誤差をカバーするのは大変なので、なるべく誤差の少ない動作が可能な設計を心がけるようにしたい。~
また、曲線を書こうと思ったときにプログラムが難しく、結局実装できなかったのが残念だった。直線を描くのは簡単に出来たが、曲線が描きにくいのがこのロボットの欠点かも知れない。