目次 #contents *課題説明 [#c49d092b] 今回の課題はこれまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙に書くロボットを製作するものである。 私は今住んでいる長野県松本市岡田の岡田にした。 *ロボット概要 [#jba7580f] 私達はx,y軸で制御するロボットにした。 **ロボット全体 [#w7a732b2] &ref(2017b/Member/Masa/Mission1/kitai_zenntai1.jpeg,100%,機体全体の画像2);&ref(2017b/Member/Masa/Mission1/kitai_zenntai2.jpeg,100%,機体全体の画像2); 過去に作られたロボットを参考に本体の上に橋を作り、そこに小さい機体を走らせることにした。 (参考ページ:[[2016b/Member/ta.kashi/Mission1]]) **上の機体 [#q809e5fe] 上の機体は大きく3つ工夫した。 &ref(2017b/Member/Masa/Mission1/pen.jpeg,100%,ペンの上げ下げの仕組み); -ペンの上げ下げの仕組み 最初は、ペンが紙に対して斜めに入るようにしていたがペンの上げ下げで機体のバランスが崩れるためそれを少しでも調整をしてみたが難しかったため、歯車を使い紙に対してペンが垂直に入るようにした。そうするとペンの上げ下げで機体のバランスが崩れることなく、ペンの上げ下げもやりやすくなった。 &ref(2017b/Member/Masa/Mission1/kitai_ue3.jpeg,100%,バランスをとるための工夫); -機体の重心 上の機体を走らせるとペンとその周りの部品の重さで機体が傾きレールからタイヤが離れてしまい走らなくなってしまったため、余っていた大きいタイヤを重りとして使い上の機体のバランスを調整した。 &ref(2017b/Member/Masa/Mission1/kitai_ue2.jpeg,100%,まっすぐ進むための工夫); -機体をまっすぐ走らせる 橋の部分にレールがないためそのまま動かすと落ちてしまう。なので、下にストッパーをつけることで機体をまっすぐ落ちずに進むようにした。途中完全に固定せずに折りたためるようにしていたがそうするとストッパーの役割をしない時があったため完全に固定した。 **下の機体 [#d4da7e9e] &ref(2017b/Member/Masa/Mission1/sita_kitai.jpeg,100%,下の機体);&ref(2017b/Member/Masa/Mission1/sita_kitai2.jpeg,100%,下の機体); &ref(2017b/Member/Masa/Mission1/sita_kitai.jpeg,100%,下の機体1);&ref(2017b/Member/Masa/Mission1/sita_kitai2.jpeg,100%,下の機体2); 本体が取り付けてある方は安定性を高めるためタイヤを3つ取り付けた。また、上の機体が落ちないようにストッパーとなるように棒をつけた。 *文字の書き方について [#wed51d12] ペンは筆ペンを使用し、なるべく紙との摩擦が少なくなるようにした。 **書き順 [#h486cc23] #ref(2017b/Member/Masa/Mission1/okada_kakizyunn2.jpeg,200%,書き順の説明) 今回x,y軸で制御するロボットを作ったため、大体の基準が決まっている。なので、文字の書き方を特に工夫する必要がないと考え最短ルートで文字を書くようにした。 *プログラムについて [#b6f5d390] **定義 [#pcb39f69] #define Apower 20 #define Bpower 20 #define Cpower 10 定義は少なくA,B,Cのパワーをそれぞれ上のように定義した。 **サブルーチン [#faeb1893] sub pen_up() //ペンを上げるプログラム { ResetTachoCount(OUT_C); RotateMotor(OUT_C,Cpower,45); Wait(500); Off(OUT_C); Wait(500); } sub pen_down() //ペンを下げるプログラム { ResetTachoCount(OUT_C); RotateMotor(OUT_C,-Cpower,45); Wait(500); Off(OUT_C); Wait(500); } ペンを上げるプログラムとペンを下げるプログラムを角度を指定して実行するものとしてつくった。また、動作の後すぐに動き出すのを防ぐために止まるプログラムも入れた。これは、機体のずれを少なくするためでx軸y軸を動かすときにも入れている。 sub x_go(int t) //x軸方向で前進 { OnFwd(OUT_A,-Apower); Wait(t*1.5); Off(OUT_A); Wait(1000); } sub x_back(int t) //x軸方向で後退 { OnFwd(OUT_A,Apower); Wait(t*1.5); Off(OUT_A); Wait(1000); } sub y_go(int t) //y軸方向で前進 { OnFwd(OUT_B,-Bpower); Wait(t*1.5); Off(OUT_B); Wait(1000); } sub y_back(int t) //y軸方向で後退 { OnFwd(OUT_B,Bpower); Wait(t*1.5); Off(OUT_B); Wait(1000); } 動かす時間を変数tとする。(電池の消耗で機体の動きが遅くなり文字が小さくなったため、時間を長くするのに1.5倍してある。)文字の線の長さはすべて時間で調整するようにしている。下の機体をx軸、上の機体をy軸としてプログラムを考えた。ここでは、横軸をx軸、縦軸をy軸として文字の左下を原点として考える。 sub r_naname() //右斜めの線を書く { OnFwd(OUT_A,20); OnFwd(OUT_B,-15); Wait(400); Off(OUT_AB); } sub l_naname() //左斜めの線を書く { OnFwd(OUT_A,-20); OnFwd(OUT_B,-15); Wait(400); Off(OUT_AB); } 一文字目の岡には斜め線が二本あり、他にはないためこの斜め線だけサブルーチンであらかじめつくっておく。 **本文 [#fe80b490] 最初はペンを紙において書ける状態からスタートする。 task main() { y_back(1280); //一画目 x_go(1000); y_go(1280); pen_up(); x_back(300); y_back(450); pen_down(); y_go(256); //二画目 x_back(600); y_back(256); pen_up(); x_go(450); y_go(200); pen_down(); y_back(520); //三画目 pen_up(); x_go(290); pen_down(); x_back(600); //四画目 pen_up(); y_back(250); x_go(150); pen_down(); l_naname(); //五画目 pen_up(); x_go(290); y_back(200); pen_down(); r_naname(); //六画目 } これは一文字目の岡のプログラム。 同じx軸、同じy軸でも前進と後退で進む距離が変わるため(長い距離はあまり変わらないが、短い距離だと変わりやすい)単純にx軸、y軸でかんがえるのではなく、さらにx軸の前進、後退、y軸の前進、後退で時間(距離)を考える必要があるため、調整が難しい。 { pen_up(); x_go(1000); y_go(1000); } 二文字目の場所へ移動 { pen_down(); //田を書き始める y_back(1280); //一画目 x_go(1000); y_go(1280); x_back(1000); pen_up(); x_go(600); pen_down(); y_back(1250); //二画目 pen_up(); x_back(650); y_go(650); pen_down(); x_go(1100); //三画目 pen_up(); } これは二文字目の田のプログラム。 簡単な文字なので調整が一文字目より簡単だった。 *結果 [#n8f4575b] #ref(2017b/Member/Masa/Mission1/okada_result.jpeg,200%,結果) 綺麗ではないが何を書いているのかはわかる程度には書けた。練習のときには同じプログラムでも普通に動いてくれる時と全然動かない時があり、最初はそれに気づかずプログラムがおかしいと思いなおしていたので途中すごく無駄な時間が多かった。なので、本番ではしっかり動いてくれてよかった。 *問題点と改善点 [#kf9a9620] **下の機体 [#t2cf53bf] 下の機体は横に長いため全体へ均等に力を働かせる必要があるのだが、設計上一番端にモーターを取り付けた。その結果、動かしたときに端と端で動きに差が生まれ、特に細かい動きをするときに片方のタイヤしか動かないといったことが起こった。 **上の機体 [#g63184e4] ペンを外に出す形で取り付けたため重心が傾きしっかり走らない問題が起こったため応急処置として重りを取り付けることとなった。傾かないように真ん中に近いようにペンを取り付けたほうが見た目的にもよりよくできた。 また、ペンを上げ下げする仕組みで、固定しているところが1ヶ所しかなく不安定でたまにうまく歯車が上がらないことがあった。あともう一か所固定し確実に動作するようにすべきだった。 **機体全体 [#d6fd0f30] 全体的に重心が上の方にあるためぐらつきが大きかった。また、下の機体の橋の部分の強度が低いのに、上の機体は重量があることもぐらつきの原因だったと思う。改善点として橋を上につけるのではなく下につけるのがよかったかもしれない。実際うまくいくかわからないが高くするために使っていた部品を節約できる利点もあったのでその後の工夫もしやすかったと思う。 **プログラム [#u2f42edc] プログラム自体はとてもシンプルにまとめたが、機体を動かして調整を行うときに時間を変更して長さを決めるのでどこを直せばよいのかわかりにくい。また、一つ一つ直すので時間がかかった。なので、あらかじめ長さでサブルーチンをつくり、調整はサブルーチンの中だけで行う方がよかったのかもしれない。 *感想 [#q08b7b2e] 今回製作したロボットは全体的に不安定だった。動力がうまく伝わらなかったり、ペンの固定箇所が少なくぐにゃっとした字になったり。そうすると、ロボットは理想通り動いてくれないので誤差が多くなり、それを調整するためいろんな値を代入した。今回のロボット製作でこの作業が長く大変だった。なので、ロボットを安定して動かすことが重要だと今回のロボット製作でわかった。次の課題ではロボットの安定性を重要視して製作に臨みたい。