目次
#contents

* ロボット本体の説明 [#i214ec9f]
** ロボットのコンセプト [#ief3fe91]
~まずロボを作るにあたってコンセプトを決めないと完成しなかったので、「簡単なプログラムで字がかけるロボ」をコンセプトに制作しました。
~コンセプトのために工夫した点は2つあり、車体の向きを変えた時にペンが元の位置とずれないように車輪の中心にペンの先が来るようにしたことと、ロボの小回りがきくようになるべく車幅を狭くしたことです。
** 全体像 [#z1fb9ff4]
~それでは写真を使用しつつ解説します。
#ref(./zentai.JPG,50%,全体図)
~こちらが本体の全体像です。まぁまぁコンパクトに収まっていると思います。
** 工夫点1 ペンの位置 [#z918439e]
** 工夫点1 ペンの位置 [#z918439e]
#ref(./pen-hozi.JPG,50%,ペンの位置と保持部分)
~左の写真ががペンの位置です。車輪の中心にあることがわかると思います。
~またペンをタイヤの中心に保持するために小さめのギアでペンを挟む構造物を付けました(右の写真)。
~これらの部品を完成した土台の上に載せるのは難しいですが、今回はまずペンを上下させる機構を作りそこに車輪を付けることで作業を簡略化しました。
~最初から全体を一気に作ろうとせずに重要な部品を完成させてから小物を追加することで、思い通りの機能をもった物にすることができました。
~この方法でロボットを作った時に役に立ったのが次の写真の灰色の四角い穴の開いたブロックです。
#ref(./brokku.JPG,50%,ブロック)
~今までどう使ったらいいかわからないものでしたが、上下にある部品を結合するという点で有用だということ気づきました。
** 工夫点2 ギアによる減速 [#l7b84ae8]
** 工夫点2 ギアによる減速 [#l7b84ae8]
#ref(./gia.JPG,50%,ギア)
~ペンを上下させる機構に3:10、車輪に2:3のギアをつけて減速することで、モーターの力を最大限引き出せるようにしました。

* プログラム [#j53cd96f]
** 書き順の工夫 [#g79870ca]
~今回書いた字は「汨」という字です。
~そのままの書き順に従って書くと無駄な動きが多くなるので、なるべく回転距離と走行距離が少なくなるようにしました。
~その方法はさんずいを上から順に書いてから、つくりの「日」の部分の外周を左下から時計回りに一周して書き、最後に「日」の真ん中の横棒を書くというものです。
~これでロボットの回転回数と走行距離を最小限に抑えることが出来ました。
~試行錯誤の中「日」の部分の外周を半時計回りに書くプログラムも作りましたが、「日」の外周を書くループの最後に配置した左に90度旋回する部分が余りロボットの向きを戻すために右に90度旋回しなければならなかったので、時計回りにしました。
** プログラムの説明 [#hefbdbcf]
~コンセプトを「簡単なプログラムで字がかけるロボ」にしたので、プログラムは至って簡単なものになりました。

 task main()
 
 #define WT 100    //誤動作を防ぐためにモーターを一旦停止させる秒数。
 #define SP 100    //モーターのスピード。MAXですね。
 #define GF1 OnFwdSync(OUT_AC,SP,0);Wait(210);Off(OUT_AC);Wait(WT);    //さんずいの点の間隔分の距離前に進む。
 #define GF2 OnFwdSync(OUT_AC,SP,0);Wait(300);Off(OUT_AC);Wait(WT);    //「日」の横棒分の距離前に進む。
 #define GF3 OnFwdSync(OUT_AC,SP,0);Wait(380);Off(OUT_AC);Wait(WT);    //「日」の縦棒分の距離前に進む。
 #define GFM OnFwdSync(OUT_AC,SP,0);Wait(250);Off(OUT_AC);Wait(WT);    //ちょっと前に進む。
 #define TL OnFwdSync(OUT_AC,SP,-100);Wait(690);Off(OUT_AC);Wait(WT);    //左に90度曲がる。
 #define TR OnFwdSync(OUT_AC,SP,100);Wait(690);Off(OUT_AC);Wait(WT);    //右に90度曲がる。
 #define DW OnRev(OUT_B,SP);Wait(500);Off(OUT_B);Wait(WT);    //ペンを下げる。
 #define UP OnFwd(OUT_B,SP);Wait(500);Off(OUT_B);Wait(WT);    //ペンを上げる。
 
 {
     repeat(2)    //このループでさんずいの上の2つの点を上から順に打ちます。ペンが上がった状態から開始です。
  {
      DW
      UP
      GF1
  }
     DW
     GF1
     UP    //ここまででさんずいが書き終わりました。
     TL    //ここから「日」の部分に移ります。
     GF1
     TL
     repeat(2)    //このループで「日」の外周を左下から時計回りに書きます。
  {
      DW
      GF3
      UP
      TR
      DW
      GF2
      UP
      TR
  }
     GFM    //ここから「日」の真ん中の棒を書いて終了です。
     TR
     DW
     GF2
     UP
 }

* 結果 [#i09dc4b9]

#ref(./kotu.JPG,50%,汨)
~ペン先がブレて変な形になったが、字としては読める物にはなりました。

* まとめ [#pbc84d22]

~今回は最初にコンセプトを決めずに駄作を6機ほど量産したせいで本番の時間があまり取れなくなってしまい、妥協した点が多くなってしまいました。
~特にさんずいは直線的なものとなっており、もう少しなんとかなったのではと思います(短時間で読める文字をプログラムして書くという点では優れているが)。
~本体制作の経験は多く得られたと思います。

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