目次
#contents
*課題1 [#x2b39d92]
これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを製作せよ。
**選んだ地名 [#m4c597fe]
自分は長野県上田市に住んでいるが、「長野」は画数が多く複雑になってしまうため「上田」にした。
*ロボットの説明 [#mf505b21]
**ロボットの構造 [#b4099b6c]
x軸、y軸をとり、ペンを移動させるロボットを作ることができればプログラムをより少ない量で書けるとは思ったが、うまく作ることができなかった。なので、プログラムが多少複雑になるとは思ったが、RISのテキストに載っていた4輪の車を参考にし、その4輪車の先にペンを上下させる構造を取り付けたのみのシンプルな構造にした。
#ref(2017b/Member/hata/Mission1/robotics1.jpg,70%,ロボットの全体)
プログラムが複雑になる理由は、この構造で機体を回転させた際の回転軸がペン先ではないので、ペン先を紙から離し、機体を90度回転させた後にペンを下すだけでは、ペン先を離した位置と同じ位置に機体が90度回転した状態で再度ペン先を置くことができないため、ペン先が下図のような動きをしてしまうのだ。
#ref(2017b/Member/hata/Mission1/RISGIF.gif,50%,間違ったペン先の動き)
よって下図のように、本来曲がりたいところでペンを上げて少し前に進み、進んだ先で90度回転した後に1度後ろに下がり、下がったところでペンを下し前に進むことで文字の角を作れることが分かった。
#ref(2017b/Member/hata/Mission1/RISGIF2.gif,65%,正しいペン先の動き)
#ref(2017b/Member/hata/Mission1/RISGIF2.gif,60%,正しいペン先の動き)
**ペンを動かす構造 [#m6e60530]
モーターから伸ばした腕にペンをゴムで固定するのみのシンプルな構造。構造上ペンを上げた際にペンの後ろが他のパーツに当たってしまい、ペンが下がってきてしまうようになってしまった。しかし、そこはペンを常に上げる動きをするようにプログラムを変更したところ改善された。
#ref(2017b/Member/hata/Mission1/robotics3.jpg,70%,ペンを動かす構造)
*プログラム [#ma5ef275]
**文字の書き方 [#b636bb55]
「上田」の「上」は本来の書き順通りに書いた。「田」の書き順に少し悩まされたが、口を書いた後にその中に十を書くのが一番単純になると考えた。
**プログラム全体 [#ca2e431d]
右回転、前進、後進、ペンの上げ下げを定義付けし、あえて左回転を用いないことでプログラムを減らそうと試みた。また、「上田」を書く際に90度回転を多用することが予想されたため、サブルーチンを用いて90度回転をすぐに呼び出せるようにした。
 #define R(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC);//右回転
 #define F(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);//前進
 #define B(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);//後進
 #define pen_up OnFwd(OUT_B);//ペン上げる(ここでペンを上げようとする動きを止めると重力でペンが下がってきてしまったため、常にペンを上げる動きをするようにした。)
 #define pen_down OnRev(OUT_B);;Wait(20);Off(OUT_B);//ペン下げる
ペンを下げた後すぐはペンを下した勢いでペンが跳ねてしまい、そのまま字を書こうとロボットを動かすと点線のようになってしまうことが分かった。なので、ペンを下した後に0.5秒動きを止めるようにしたところそれが改善された。
 sub edge_curve()//90度右回転
 {
     pen_up;
     F(75);
     R(110);
     B(80);
     pen_down;
     Wait(50);
 }
「上」
 task main()
 {
     F(25);//上1画目
     Wait(50);
     pen_up;
     F(80);
     R(100);//本来R(110)で約90度回転するが、ここは車輪と紙の摩擦の関係上R(100)にしたところずれが少し解消された。
     B(50);
     pen_down;
     Wait(50);
     B(60);//上2画目
     pen_up;
     F(90);
     R(110);
     B(110);
     pen_down;
     Wait(50);
     F(60);//上3画目
「上」の書き終わりから「田」の書き始めまでの移動
     pen_up;
     F(50);
     R(110);
     B(40);
     pen_down;
     Wait(50);
「田」のうちの「口」の部分(forを用いて前進→90度回転を4回繰り返し、最後に「田」の「十」の部分の書き始めの位置まで移動する)
     int i;
     for (i=1; i<=4; i++){
     F(50);
     edge_curve();
     }
     F(25);
「田」のうちの「十」の部分
     edge_curve();
     F(50);
     B(25);
     edge_curve();
     F(25);
     B(50);
 }
*まとめ [#k41ec3e8]
**実際に書けた字 [#bffde428]
決してきれいな字とは言えないが読み取ることはできる字を書くことができた。
#ref(2017b/Member/hata/Mission1/robotics2.jpg,50%,実際に書けた字)
**反省点 [#ra3c55ac]
プログラム通りにモーターは動いていても4輪車のためにタイヤと地面の間に生じる摩擦が大きく、想像していた動きをしてくれないことが多かった。また電池の消耗による動きの変化にも苦しめられたので、定期的に電池を交換することが大切であることも分かった。発表会では工夫して作られた作品が多く、他のグループのロボットの完成度には驚かされた。また使い方の分からなかったパーツがあったが、発表会で他のグループが使っているのを見て使い方が分かったので、次の課題では今回使わなかったパーツを積極的に使っていきたいと思った。
**感想 [#g87eee06]
ペンの上げ下げをもう少し工夫していればプログラムが少し簡単になっていた気もするが、どのようなプログラムにすれば思い通りに動いてくれるかを考えるのが楽しかった。また、ペアで一つのロボットを作りどのようなプログラムにすれば良いかをお互いに協力しあいながら進めることができたので、新たな交友関係を築く良い機会となった。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS