[[2016a/Member]] *目次 [#se5e340e] #contents *課題 [#k8ad12ed] risを使って似顔絵を描くロボットをつくり、自分の顔を描けるようにプログラミングする。部品はペンをのぞいて付属のものをつかい。似顔絵を描く紙はA4である 以下のことを目指す 1グループのほかのメンバーと見分けがつく程度に正確に描く 2なるべくプログラムを簡略化する 3丈夫で、部品の各部に負担のかかりすぎない(壊れづらい)本体作り *本体について [#ge275c0e] **全体 [#zf9d4233] &ref(DSC_0018.JPG); 大まかな構造として、ベースには基本的な形(タイヤ)を利用し、それにペンを下ろせるような仕組みを付け加えた。 ベースを大きく変えるという発想ははじめからなかった。 **ペンを下ろす仕組み [#ab25b634] &ref(DSC_0019.JPG); モーターに丸い部品を取り付け、その部品にゴムを2本巻き、ペンを固定した。モータを僅かに回すと丸い部品が回転し、ペンが上下するようになっている。ゴムの巻き方に関しては、写真のように小さい部品をかませ、ゴムへの負荷をなるべく軽減した。 ベースに工夫をしなかった分、ペンを下ろす仕組みをどうしたら良いか非常に悩んだ。丸い部品にペンを取り付けることまではすぐに決まったのだが、どうやってペンを固定するべきかに苦戦した。完成形の巻き方自体も早い段階で思いついてはいたのだが、ゴムがもろいという情報があったため、その巻き方は無理だと思いほかの巻き方を模索したが、結局その方法になった。意外とゴムへの負担は小さく、しっかりとペンを固定できる。 **ベースへの固定 [#hfbef6df] &ref(DSC_0020.JPG); 写真のように固定した。 ペンの前部のでっぱりと電源装置により、ペン先のぶれを防いでいる。 **ペンについて [#o65499be] ペンを下ろしたときの衝撃で装置が壊れることをふせぐためと、衝撃でペンが跳ね上がり、線が引けなくなることを防ぐために先の柔らかい「筆ペン」を使った。しっかりと線が引けるようになった。 *プログラミングについて [#m8454428] **定義 [#x06fe691] #define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); →ACのモーターを前転させることでt秒間前進 #define go_back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); →ACのモーターを後転させることでt秒間後退 #define turn_right(t) OnRev(OUT_C);OnFwd(OUT_A);Wait(t);Off(OUT_AC); →Aのモーターを前転させることで右折 #define p_up OnFwd(OUT_B);Wait(5);Off(OUT_B); →Bのモーターを僅かに前転させることでペン先を上げる #define p_down OnRev(OUT_B);Wait(8);Off(OUT_B); →Bのモーターを僅かに後転させることでペン先を下げる。ペンを上げる時間より下げる時間を長くした。よりペンをしっかり当てられるようになったが壊れやすくもなった 以下この定義を使っていく **task [#p454cb0e] task main() task main() { p_up;//ペンを上げる p_down;//ペンを下げる Wait(100);//1秒停止 turn_right(400);//右折を用いて円を描き輪郭にする Wait(100);//1秒停止 p_up;//ペンを上げる p_down;//ペンを下げる Wait(100);//1秒停止 go_forward(70);//0.7秒前進し前髪を描く Wait(100);//1秒停止 p_up;//ペンを上げる go_back(50);//ペン先をあげたまま線を描かずに移動 turn_right(80);//同上 p_down;//ペンを下げる go_forward(100);//1秒前進し、片側の横髪を描く Wait(100);//1秒停止 p_up;//ペンを上げる go_back(50);//ペン先をあげたまま線を描かずに移動 turn_right(80);//同上 go_forward(20);//同上 turn_right(80);//同上 p_down;//ペンを下ろす Wait(100);//1秒停止 go_forward(100)//一秒前進し、もう片側の横髪を描く p_up;//ペンを上げる Wait(100);//1秒停止 go_back(80);//ペン先を上げたまま線を描かずに移動 turn_right(90);//同上 Wait(100);//1秒停止 go_forward(30);//ペン先を上げたまま線を描かずに移動 Wait(100);//1秒停止 p_down;//ペンを下げる Wait(100);//1秒停止 go_forward(20);//0.2秒前進し口を描く Wait(100);//1秒停止 p_up;//ペンを上げる turn_right(40);//ペン先を上げたまま線を描かずに移動 go_back(20);//同上 p_down;//ペンを下げ、片目を描く Wait(200);//ペンを押し当てる時間 p_up;//ペンを上げる turn_right(320);//ペン先を上げたまま線を描かずに移動 go_back(20);//同上 turn_right(320);//同上 go_forward(10);//同上 p_down;//ペンを下げ、もう片方の目を描く Wait(200);//ペンを押し当てる時間 } 動作が忙しくならないようにところどころ小休止を挟んでいる。 以下似顔絵 &ref(DSC_0023.JPG); *まとめ [#bf46393a] 課題の項に書いた三点について振り返りたいと思う。 **1グループのほかのメンバーと見分けがつく程度に正確に描く [#x85f87bd] 正直自分でも似顔絵のクオリティーは高くないと思う。メンバーの顔にメガネや髪の長さなどわかりやすい特徴があったためクリアできたと思う。課題の趣旨とは異なっているが如何に自分の顔を簡略化し他のメンバーと見分けられるかを真剣に考えた。しかしこのクオリティーでも苦労はした。まずマシンの構造上、横に曲がる際に動いている方と逆のタイヤを中心に円を描くように曲がる。ペン先を中心に回転できれば線が途切れることはないのだが、私たちのマシンだと線が大きく途切れる上、思いもよらない位置にペン先がいってしまう。そのためプログラミングの中に位置の微調整が多く入っている。 **2なるべくプログラムを簡略化する [#ce80351f] これに関しては特別なことはできなかった。しかし自分がプログラミングしたものを見返してみてもそこまで見づらいところはないと感じた。定義を利用したことでわかりやすくはなっている。ただ、ペン先の微調整のために細かい動作がいくつも入っていて長くはなってしまっている。これに関しては本体の方に工夫が必要だったと感じている。 **3丈夫で、部品の各部に負担のかかりすぎない(壊れづらい)本体作り [#p6a2bdb0] 全く工夫できなかったが、課題はクリアできた。普通にマシンを動かすと3回に一回は壊れる。似顔絵を描く際には毎回しっかりと部品をはめ込んだ。 **まとめのまとめ [#p3623833] 本体づくりが1、プログラミングが5くらいの割合で時間がかかった。本体の構造の練りの甘さが、プログラミングをより複雑にした。試行錯誤の楽しさに気づいたため、もしまた同じ課題をやることがあった、本体にもしっかり工夫をしたい。