[[2016a/Member]] *目次 [#i0d6b39b] #contents *課題と自分チームの考え [#ae5afe92] 今回の課題3は模擬的なロボコンということで2つのマイコンを用いての課題だったが、 自分たちのチームは &color(red){1つのロボットのみ}; でほぼ全体の処理を行う。&br; %%のこりの1つは音楽でも流す。%% 今回このような形になった理由には2つ理由が存在する。&br; 1つ目 センサーが1つに集結させることができ、より正確な動作ができる&br; 2つ目 3つのモータで処理全体がカバーできた&br; これらの理由から一体型でなくても処理できると判断したため、重さを考慮して1台のみで行うこととした。 *機体の説明 [#b380836f] 説明が細分化するため分けて記述する。 **全体像 [#t48321e5] 全体像としてこんな感じになっている。 先ほど書いたがマイコンは1つだ。 &ref(./機体01.jpg,45%,機体画像 全体); **パーツ [#kff1a7ff] パーツとしては&br; ・車体&br; ・紙コップ処理部分&br; ・マイコン &br; &ref(./機体02.jpg,45%,機体画像 パーツ); の3つとなる。 **タイヤ [#y3831b02] タイヤの幅はライントレースをするため、できる限り狭くなっている。&br; また、前回先生にアドバイスをもらった通りタイヤは薄いものを使用した。&br; &ref(./機体03.jpg,45%,機体画像 タイヤ); **センサ [#rbf386e7] センサに関しては&br; 1.光センサ (ラントレース)&br; 2.光センサ (紙コップがあるのかの判定)&br; 3.タッチセンサ (上下にどこまで上がっているのかの判別)&br; の3つを使用している。&br; &ref(./機体04.jpg,45%,機体画像 センサ 正面); &ref(./機体05.jpg,45%,機体画像 センサ 横); 1は前回の課題のため省き、3は後述する。 2は書いてある通り紙コップが手前にあるかを判定しているが最初に自分の考えで紙コップを黒くして 判別しようとした。だが実際は白で判別したほうがよくこれはミスといえる。&br; %%コップは買いなおした。(140円)%% **「開く、上げる」と「閉じる、下げる」を同時にやるシステム [#s093e7a0] これは図と画像で説明しようと思う。 &ref(./説明01.png,45%,処理説明1); &ref(./機体06.jpg,45%,機体画像 上下システム); という感じだ。細かい説明は製作者である 「[[RaikouRK:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FRaikouRK%2FMission3]]」に任せる。&br; 気づくと思うがこれでは紙コップを保持することはできない。&br; だがこれはプログラムによるアシストで解決している。(後述) **上下システムを止めるセンサ [#kfc9c9aa] 後述といったタッチセンサについての役割である。&br; &ref(./説明02.png,45%,処理説明2);&br; 最初はタッチセンサは上の限界値を求めるために使用しており、下に下がる処理はWait()で行っていた。&br; しかしこれでは内部の残り電力で下に下がる量が変わってしまうことに気づき、&br; 両箇所でのセンサの判別が必要となったのだ。&br; そのため画像のようにともに移動するようにセンサがついている。&br; &ref(./機体07.jpg,45%,機体画像 タッチセンサ); *プログラムの仕組みについて [#c50d9608] 今回のプログラムは過去最大のためもちろん分けて話す。&br; また今回はプログラムをパーツ化し、分担し作ろうということでメンバーで分担して作った。&br; そのためそのプログラムはだれが作ったのかも記述する。 **レース用プログラム [#md0edf53] 製作者:「[[RaikouRK:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FRaikouRK%2FMission3]]」 彼には悪いが省略 読みたきゃ過去の自分のを見てほしい。 ** 上下に動かすプログラム[#wfd9c2e8] 製作者:「自分」 sub up() //上に上げる動作 { while(SENSOR_2==0) OnFwd(OUT_B); Off(OUT_B); } sub down() //下に下げる動作 { while(SENSOR_2==0) OnRev(OUT_B); Off(OUT_B); } センサー2にはタッチセンサが入っている。&br; down()にFwdが書いてあって動かなかったときは申し訳なかった。&br; **紙コップを保持するプログラム [#lc6bd548] 製作者:「自分」と「[[jake57:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2Fjake57%2FMission3]]」 sub LOOK_CUP() { OnRev(OUT_A); Wait(95); Off(OUT_AC); } task keep() //上でキープしておくただし、ラインとレースと並列動作させるためtaskで定義 { while(1) { OnRev(OUT_B); Wait(1); OnFwd(OUT_B); Wait(3); } } 後述するといった紙コップをどう維持するかというプログラムだ。&br; コメント文でも定義しているが、これはtask定義でライントレースなどをするときに並列動作させている。&br; これによって遠心力などで紙コップが外れることはなく安心だ。&br; ちなみにWait()の1:3は手作業で求めた。 **180度回転するプログラム [#x12ea7d4] 製作者:「[[Yamada:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FYamada%2FMission3]]」 sub TURN_180() //180ど回転 { OnFwd(OUT_AC); Wait(70); Off(OUT_AC); OnRev(OUT_A); Wait(125); while(SENSOR_1>40) { OnFwd(OUT_C); OnRev(OUT_A); } Off(OUT_AC); } 説明として180度回転と書いているが実際にしていることは少し違う。&br; まず3行で後ろに後退する。&br; その後Aのモータのみ一定時間動かし回転し、その後センサが一定になるまでもう一度回転を行う。&br; 一見して簡単なプログラムだがこのプログラムの凝っている点は&br; 一回目と二回目で回転の半径が違うという点だ!&br; これによって大きな回転でだいたいの位置を決め、&br; 小さな回転で正確な位置を決めるということを可能にしている。