目次 #contents *課題1の説明 [#l8ed7f1d] **内容 [#te933478] これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを製作する. **方針 [#m9c1cbdc] ・描く文字は難易度の点から考え,村山とした. ・動力についてはペンをマジックアームのような装置とタイヤによる走行を用いることにより,縦横の動きを可能にさせたものを考案.改造を重ね,ギアを複数搭載することとなった.なお扱うロボットの種類はNXTである. ・プログラミングは速度と秒数を指定するものではなく,調整が容易で電池消費量に囚われないよう角度を指定するものを用いた. *ロボットの説明 [#ve0b55cc] **全体の構造[#v165970e] &ref(image8.jpeg); **ペンのの上下を担うマジックアーム [#db83d9a1] &ref(image7.jpeg); 腕の長さが長いため、伸縮した際コードに引っかかる等の問題が生じた。更に細いパーツを使用しているため文字のブレが大きかった。アームのイメージを思い浮かんだ際には想像できなかった問題点であった。 **ペンの上げ下げを行うギアとモーター [#n579070a] &ref(image5.jpeg); 当初はギアは2つであったが、ペンの筆圧やペンが徐々に上がってきてしまう等の問題点から小さなギアを合わせ、合計3つのギアを使用。これによりモーターの負担を大きく減らすことができ、前述のような問題は緩和された。 **ペンを横に動かすための車部分 [#fea39cd3] &ref(image19.jpeg); シンプルな四輪構造 **その他の工夫 [#s99669c6] &ref(image33.jpeg); NXT本体を乗せる土台とストッパー。これにより本体がグラグラすることの緩和に成功。 &ref(image69.jpeg); ギアやモーターを支える部分が二本の長いパーツでの固定だったため安定感が無かった。しかしそこをブロックで固めることにより安定させることに成功。 *プログラムの説明 [#n675b828] **定義の挿入 [#f06e7488] ペンの上げ下げのみを定義.初めはFloatの記述は無かったが,動作を繰り返す度ペンが浮き上がってくる問題が発生したため追加した.モーターAがマジックアーム.BがAと繋がるギアを動かすもの.Cがタイヤを回転させるためのモーターである.またモーターBの回転角が大きいのはギアの関係からである.実際のプログラミングは以下の通り. #define pen_up RotateMotor(OUT_B, 20, -80);Off(OUT_B);//モーターBを20%の力で-80度回転 #define pen_down RotateMotor(OUT_B,20,80);Float(OUT_B);Wait(1000);Off(OUT_B);//モーターBを20%の力で80度回転 **実際の稼働プログラム [#zb6eebdc] 書き順は以下の画像の通り。色の違いは見やすさを考慮したため。 &ref(image1(2).jpeg); そして実際のプログラムがこちら。 task main(){ //木へん ResetTachoCount(OUT_ABC); pen_up; RotateMotor(OUT_A, 30, 30);//アームを手前に引く pen_down; RotateMotor(OUT_C, 30, 90);//ここまで一画目 pen_up; RotateMotor(OUT_C, 30, -45);//二画目のために一角目の中心に戻る RotateMotor(OUT_A, 30, -20);//二画目のために一角目の真上へペンを移動 pen_down; RotateMotor(OUT_A, 30,80);//二画目 pen_up; RotateMotor(OUT_A, 30, -50);//ペンの位置調整 pen_down; OnFwd(OUT_A,20); OnFwd(OUT_C,-20);//三画目の斜め線 Wait(700); Off(OUT_AC);//ここまで三画目 pen_up; OnFwd(OUT_A,-20); OnFwd(OUT_C,20);//元の位置に戻る Wait(700); Off(OUT_AC); pen_down; OnFwd(OUT_A,20); OnFwd(OUT_C,20);//四画目 Wait(300);//ここまで寸を書くための移動 // 寸 pen_up; RotateMotor(OUT_C,20,15);//位置の移動 RotateMotor(OUT_A,20,-70);//ペンの位置調整 pen_down; RotateMotor(OUT_C, 30, 80);//ここまで寸一角目 pen_up; RotateMotor(OUT_C, 40, -30);//位置の移動 RotateMotor(OUT_A, 30, -20);//一角目の真上にペンを移動 pen_down; RotateMotor(OUT_A,20, 80);//二角目 pen_up; RotateMotor(OUT_C,40,-30);//点を打つ位置に移動 RotateMotor(OUT_A,20,-40);//点を打つ位置にペンを移動 pen_down; Wait(500);//ここまで三角目 Off(OUT_ABC); // 山 pen_up; RotateMotor(OUT_C,30,70); RotateMotor(OUT_A,30,10);//ここまで位置の移動 pen_down; RotateMotor(OUT_A,30,30); RotateMotor(OUT_C,30,90); RotateMotor(OUT_A,30,-30);//同時に三画目までを書く pen_up; RotateMotor(OUT_C,30,-45); RotateMotor(OUT_A,30,-30);//位置の移動 pen_down; RotateMotor(OUT_A,30,60);//四画目 pen_up; RotateMotor(OUT_C,30,180); Off(OUT_ABC); } 以上のプログラムで発表会前に書いたものがこちら. &ref(murayama.jpeg); 村を安定させ描くことが難しい.細かい角度調整がより一層必要であった.山は一度である程度成功した. *生じた問題点とその考察 [#kbb765f8] 当初設計したものはギアを使わず直接モーターでモーターを上げる設計であったため,重さに耐えられずペンが落ちてきてしまっていた.であるためにギアを取り付けたがわずかな負担の軽減にしかならなかった.さらにペンを降ろすスピードを一定値より速くしなければ動きが止まってしまう現象も見られた.これにより行動回数を重ねるほどペンが上がり文字が書けなくなってしまった.というわけできちんと小さいギアを用いて再度作成したところ改善.ペンを紙に少しなら押し付けても止まらない程の余裕はできた. しかし現状文字がブレてしまうという問題や安定感が足らない.改善するためにはペンを動かすアームをの安定性を上げる他ないがそれでは支えるモーターへの負荷が再び重くなってしまうだろう. 今回は軽量且つ正確に文字を描けるロボットを作成できるよう励んだが,自分達の設計したタイプのロボットではギアや支えるアームや土台のことを考えても軽量化は難しいと痛感した.次回からは基本的な物理学の観点から設計をしていきたいと思う.