*目次 [#pd4beaec]
#contents
*はじめに [#x300eb6a]
課題内容は字を書くロボットである

詳細は

150mm四方の中に、七画以上の文字を書く

というものである

今回私は「画」という文字を書くことにした

*ロボットの説明 [#wc4b9b3a]

ロボットの全体はこのようになった

#ref(./IMG_1491.JPG,50%,全体図)

**工夫点1 タイヤ [#cded3b7d]

タイヤには大きく2つの工夫をした

ひとつ目は下図のようにタイヤとモータを直結させずギアを噛ませてモータとタイヤをつないだ点である

#ref(./IMG_1492.JPG,50%,タイヤとモータ)

これによりロボットの進行速度を遅くすることができ、プログラミングをする際に調整がやりやすくなった
また、それによりモータの回転軸からタイヤの位置をずらすことができ、次に述べる点においても便利なものとなった

ふたつ目はペンの先端の位置とタイヤの軸の位置を合わせた点である

#ref(./IMG_1493.JPG,50%,ペンとタイヤ)

上下に動かすペンの機構上、こうすることによって曲がった時に、筆の入りに当たる部分を軸として回転するようになる
上下に動かすペンの機構なので、こうすることによって曲がった時に、筆の入りに当たる部分を軸として回転するようにすることができる

それによりプログラムが完結になり、調節もしやすいものとなった

**工夫点2 ペンの上下 [#f1a24cf3]

字を書くためにペンを下ろす方法としてギアの回転により上下に動かす仕組みを作った

#ref(./IMG_1494.JPG,50%,ペンの仕組み)

右に見える大きなギアにペンがつけられており、大きなギアからの円運動をペンを介して上下の運動に変えるという仕掛けになっている

上下の運動のおかげで書き始めに当たる位置がわかりやすく、また安定して筆圧がかかる仕組みとなった

*プログラミングの説明 [#o4096f09]

**字を書く際の工夫 [#zac5446f]

今回選んだ「画」という字を書くにあたって下記順に非常にこだわった

まずこの字は大きく見ると2つの四角の組み合わせという形が特筆される

そのため、今回は実際の下記順とは違い、大きな四角と小さな四角を書くというプログラミングを中心に構成していった

また2つの四角を半時計回りと時計回りというふうにそれぞれ逆に動かすことにした

これにより一回転する間に生まれる回転の誤差を打ち消し合うようにすることができ、最後に書く線まで字としてまとまった形にすることができた

**プログラミングの解説 [#mdcf4673]

はじめの定義ではその目的の動きの頭文字を取り定数等を定義した

また、解説文中の画数は実際の漢字の下記順に則ったものとする


 task main()
 
 #define WT 100//一つの動作をしたあとすぐに次の動きをするとずれてしまうことがあり、それを避けるため、微弱なウエイトをもたせることにした。それを定義したもの
 #define SP 100//モータの出力の定義
 #define GFM OnFwdSync(OUT_AC,SP,0);Wait(100);Off(OUT_AC);Wait(WT);//半時計回りから時計回りに移り変わるときの書き始めを調整する動き
 #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);//1,2,3,5,6画目を書く動き
 #define GF3 OnFwdSync(OUT_AC,SP,0);Wait(380);Off(OUT_AC);Wait(WT);//7画目曲がるまでと8画目を書く動き
 #define GF4 OnFwdSync(OUT_AC,SP,0);Wait(440);Off(OUT_AC);Wait(WT);//7画目の曲がったあとを書く動き
 #define TL OnFwdSync(OUT_AC,SP,-100);Wait(670);Off(OUT_AC);Wait(WT);//左に直角に曲がる
 #define TR OnFwdSync(OUT_AC,SP,100);Wait(670);Off(OUT_AC);Wait(WT);//右に直角に曲がる
 #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);//ペンを上げる    //ここまででプログラム中の大まかに分けた動きを定義した
 
 {
     DW
     GF2 //一画目
     UP
     GF1 
     TL
     GF1
     DW
     GF3 
     UP
     TL
     DW
     GF4                                                                        
     UP //ここまで七画目
     TL
     DW
     GF3 //八画目 ここまでが半時計回りで書かれる大きな四角
     UP
     TL
     GF1
     TL
     GFM
     repeat(4)
  {
      DW
      GF2
      UP
      TR  //二、三、六画目 ここが時計回りの小さな四角
  }
     GF1 //四、五画目の書き始め
     TR
     DW
     GF2
     UP
     TR
     GF2
     TR
     GF1
     TR
     DW
     GF3
     UP
     GF4 //5画目を書き、少し走って終了
 }

*書き上がり [#ie095149]

このようなものが書き上がった

#ref(./IMG_1495_2.JPG,50%,画書き上がり)

*感想 [#ad443033]

私はこの授業をプログラミングなんか全く知らない状態で受け、とても不安だったかここまでの内容は授業を通してだったりペアに教わりながらなんとかすすめることができてとりあえずひと安心した

字を書くことはまず機会を組むところからなかなか頭を使わされ、組めてもプログラミングでかなり細かい調整が必要でかなり根気のいる事だった

次回からの課題も心して取り掛かりたい

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