keisuke&mika
地面までの距離が小さくなるように(アームの上げ下げを楽にするため)タイヤは小さめの物を使用。前輪と後輪で別のタイヤを使用しているので比較的滑りにくいと思う。
幅があるので小回りはあんまりきかないが、ぺんを持つことをかんがえるとどこもこんなもんだと思う。また、そのお陰でかなり安定している。
どのようにペンを上げ下げしようかといろいろ悩んだ結果モーターを一つ使ってペンを上下させるものを作りました。またトルクギアを使って空回りできるようにしました。
初めに作ったものは歯車を使いすぎてペンが上下しなかったのでなるべくモーターから離れすぎないところに設置しました。
またペンを固定しているものと歯車との間を狭めなるべくペンがグラグラしないようにしてみました。
そして上と下に同じ歯車を使い動かしやすくかつ安定しやすくしました。
まず円形に書くのが難しそうだったので直線オンリーのものにしました。 またペンを上げ下ろしする際にペンを上げる作業はずっとし、下げるプログラムは少し時間を多めにしました。そして旋回させる前にバックして旋回後に前進させてからペンを下すようにしました。
#define left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);//左に旋回 #define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);//右に旋回 #define go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//前進 #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//後退 #define up OnRev(OUT_B);Wait(100);//ペンを上げる #define down OnFwd(OUT_B);Wait(100);Off(OUT_B);//ペンを下げる #define chokkaku_migi back(40);Wait(20);right(87);Wait(20);go(50);//右に90度 #define chokkaku_hidari back(40);Wait(20);left(80);Wait(20);go(50);//左に90度
task main()
{ down; go(25);//1 up; chokkaku_migi; down; go(110);//2 up; chokkaku_migi; down; go(100);//3 up; chokkaku_migi; down; go(110);//4 up; chokkaku_migi; down; go(25);//5 up; chokkaku_migi; down; go(75);//6 up; chokkaku_hidari; down; go(40);//7 up; chokkaku_hidari; down; go(75);//8 up; back(40);//9 back(40); left(50); go(50); down; go(40);//10 up; back(45); left(60); go(40); down; go(40);//11 up; back(40); left(150); go(75); down; go(20);//12 up; back(10); chokkaku_migi; go(20); down; go(10);//13 up; go(10); chokkaku_migi; go(10); down; go(10);//14 up; back(40); down; go(10);//15 up; Off(OUT_A+OUT_B+OUT_C); }
↑の図の番号とプログラムが一応対応しているはずです...
#define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); //前に進むためのプログラム #define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);//後ろに進むためのプログラム #define go_straight(t) OnFwd(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);//右に旋回 #define go_back(t) OnRev(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);//左に旋回 #define pen_up OnFwd(OUT_B);Wait(100);Off(OUT_B);//ペンを上げる #define pen_down OnRev(OUT_B);Wait(100);Off(OUT_B);//ペンを下げる
task main()
pen_down;//顔//1 go_straight(120); pen_up; go_back(30);//2 turn_left(48); go_straight(30); pen_down; go_straight(85); pen_up; go_back(50);//3 turn_left(60); go_straight(50); pen_down; go_straight(85); pen_up; go_back(50);//4 turn_left(48); go_straight(50); pen_down; go_straight(120); pen_up; turn_left(90);//髪1本目//5 go_straight(120); turn_right(90); go_back(40); pen_down;//6 go_straight(40); pen_up; turn_left(90);//髪2本目//7 go_back(30); turn_right(90); go_back(40); go_straight(40); pen_down; go_back(40); pen_up; turn_left(90);//髪3本目//8 go_back(30); turn_right(90); go_straight(40); go_back(40); pen_down; go_straight(40); pen_up; turn_left(90);//髪4本目//9 go_back(30); turn_right(90); go_back(40); go_straight(40); pen_down; go_back(40); pen_up; go_back(60);//目//10 turn_right(90); go_back(30); pen_down; go_straight(35); pen_up; go_straight(7); pen_down;//11 go_straight(35); pen_up;
プログラムの番号と写真の番号[赤字]が対応。 顔の輪郭がズレてきれいに一つの線につなげることができなかった… でも初めてプログラムを作ったときにロボットが動いたおかしな挙動の事を考えるとめっちゃ成長したと思う!よく見たら可愛いし…(多分) ロボットの動きをみながら修正したからプログラムを見ただけじゃ理解できなさそうなとこがあるかも…ですが…。
ロボットのアームを考えるのに結構苦労しました。固定されなかったりうまく上がらなかったり...少し甘く考えすぎていました。またプログラムの方も旋回させる時に一旦バックさせそして前進させてからペンを下ろす部分が一番苦労しました。こまめに秒数を変えて何回も変更させました。でも完成した時の達成感がとてもよかったです。(でもバランスが悪かったり隙間が結構できていたりして完璧とはいかなかったが...) この後にも課題があると思うと少々心配です。もっとうまくプログラムを組み上げたりロボットを無駄のないように作りたいです。
(発表)
まず顔の輪郭がずれ、方向転換の角度もずれていた。 曲がるところのプログラムに少し修正が必要...
(反省) �プログラムが長くなりすぎたところ �似顔絵に隙間やズレが多くできたこと �ロボットをもう少し軽くすること �土台を動きやすいものにすること
最初の課題やのに難しかった。ペンを強く固定しようとしたら本体にうまくつながらなかったので悲しかった。一番最初に考えたプログラミングをいれたらものすごいことになってしまった。その原因は1,回転させるとタイヤの分ペンの位置がずれることを考えていなかったこと。2,ペンを前にもってるので回転の向きに気を付けなければならなかったこと。3,ぺんを下げる動作が遅すぎたこと。
ロボットの中心にペンをもたせた方が簡単やったかなぁ?って思った。頭の中で考えてる通りに動いてくれないことがめっちゃ難しかった。