目次 #contents *課題 [#db414a81] これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙に書くロボットを製作する。 **選んだ字 [#gc53ddf8] 「市川」山梨県市川三郷町からとりました。 *ロボット本体の説明 [#nbfa4a55] **ロボット全体 [#decf7633] &ref(2017b/Member/Taka/Mission1/1510919785105.jpg,240x320,ロボット全体の写真); ロボットは、最初に作ったサンプルのロボットにペンを上下できる機構を取り付けた単純なものである。少しだけ変えたところは、後ろのタイヤを外したことだ。方向転換や後退の時に、後輪のせいで真っ直ぐ行かなかったり、ズレたりすることが多かったので、いろいろ試行錯誤した結果、取り外したものが一番良かったので取り外すことにした。 **アーム(ペンの部分) [#gf0aa5c2] &ref(2017b/Member/Taka/Mission1/1510919786227.jpg,240x320,ペンの上げ下げの機構); アームは写真のような構造である。アームを本体の正面かつ真ん中になるようにに取り付け、しっかり固定されるようにした。 *プログラムの説明 [#zf69944b] **書き順 [#o6dda823] &ref(2017b/Member/Taka/Mission1/dsc_0706.jpg,640x480,書き順); 書き順は、ロボットが動き回るタイプなため、書きやすさを重視して、正規の書き順とは違う書き順にした。 **プログラムについて [#r638b4f3] 動くスピードを定義した。スピードはコントロールしやすいように遅めにした。 #define SPEED 30 //前進時の速度 #define SPEEDREV -30 //後退時の速度 サブルーチンで前進、後退、左右それぞれへの方向転換、ペンの上げ下げを作成した。初めは、時間tの引数でプログラムしていたが、電池の残量で動作にずれが多く生じたので、モーターの回転角度の引数を使ったプログラムに変更した。指定した回転角度だけ動くことで、動作のずれは改善した。左右のタイヤを同期させることもできたので、方向転換もうまくいった。ペンの上げ下げは時間で指定した方がうまくいったため、そのように作成した。 sub go_forward(int t) //前進 { RotateMotor(OUT_AB,SPEED,t); //回転角tだけ前進 Off(OUT_AB); } sub go_reverse(int t) //後退 { RotateMotor(OUT_AB,SPEEDREV,t); //回転角tだけ後退 Off(OUT_AB); } sub turn_right() //回れ右 { RotateMotorEx(OUT_AB,SPEED,180,100,true,false); Off(OUT_AB); } sub turn_left() //回れ左 { RotateMotorEx(OUT_AB,SPEED,180,-100,true,false); Off(OUT_AB); } sub pen_down() //ペンを下ろす { OnFwd(OUT_C,20); Wait(400); Off(OUT_C); } sub pen_up() //ペンを上げる { OnRev(OUT_C,20); Wait(400); Off(OUT_C); } メインのプログラムである。どれくらいの角度でどれだけ動くのか検証しながら何度も試して角度を決めていった。一画目後と五画目後の方向転換は、他の時と同様にサブルーチンを使って行ったときに思い通りにいかなかったので、そこの2カ所だけ回転角を少し調整した単独のプログラムにして作成した。 task main() { pen_down(); //一画目 go_forward(300); pen_up(); go_reverse(300); RotateMotorEx(OUT_AB,SPEED,175,-100,true,false); Off(OUT_AB); go_forward(130); turn_right(); go_forward(100); pen_down(); //二画目 go_forward(150); pen_up(); go_forward(100); turn_right(); go_reverse(270); pen_down(); //三画目 go_forward(210); pen_up(); go_forward(280); turn_left(); go_reverse(260); pen_down(); //四画目 go_forward(150); pen_up(); go_forward(70); turn_left(); go_reverse(250); pen_down(); //五画目 go_forward(270); pen_up(); //「市」終了 go_forward(350); RotateMotorEx(OUT_AB,SPEED,190,100,true,false); Off(OUT_AB); go_reverse(320); pen_down(); //六画目 go_forward(280); pen_up(); go_reverse(280); turn_left(); go_forward(70); turn_right(); go_forward(50); pen_down(); //七画目 go_forward(220); pen_up(); go_reverse(250); turn_left(); go_forward(80); turn_right(); pen_down(); //八画目 go_forward(300); pen_up(); //「川」終了 } 始めの時間指定でやっていたときは、プログラムを行う度に距離が短くなったり、方向転換が甘かったりしたが、角度指定にしてからは、多少の誤差はあったものの比較的安定して動くようにはなった。後は角度を設定して動かしてみて、調整してを繰り返してちょうど良い長さになるようにした。 試作の中で一番うまくできた作品である。 &ref(2017b/Member/Taka/Mission1/dsc_0698.jpg,320x240,試作); *まとめ [#r1eed933] **反省 [#l141f417] 本番では、全体的に右よりになり「川」の最後の画がはみ出してしまう結果になってしまった。字が紙にいっぱいいっぱいになるくらいの大きさであったのでそこが大きな反省点だ。もっと小さめに書けるようにプラグラムを作れば良かったと思った。 **感想 [#o97eb32d] 周りはXY軸のロボットが多かったが、私はロボットが動き回って書くロボットで書いた。XY軸の方が良かったかなと思いはしたが、このロボットで頑張ろうと思い、なんとかプログラムを作りそれなりに形にすることはできたので良かった。自分でロボットとプログラムを作り、それが形となるのは楽しかった。本番ではうまくいかなかったが、明らかな反省点は分かったので良かったと思う。 周りはXY軸のロボットが多かったが、私はロボットが動き回って書くロボットで書いた。XY軸の方が良かったかなと思いはしたが、このロボットで頑張ろうと思い、なんとかプログラムを作りそれなりに形にすることはできたので良かった。電池残量や左右のずれなどにはとても苦戦して何度も繰り返して改善していくのは大変だった。本番ではうまくいかなかったが、明らかな反省点は分かったので良かったと思う。