#contents *課題1 [#r7c03d9e] 今回の課題はA4の紙に自分が一度でも住んだことのある都道府県や地名を書くロボットを作ること。 **選んだ文字 [#vbb80f5b] 岐阜出身だが画数が多かったので市町村名の”肥田”という字を書くことにした。 *ロボットの説明 [#ue063469] **構造 [#jabe53a9] 肥田という漢字は全て直線で構成されているのでx,y軸に動くロボットを作ることにした。こうすることでプログラムの記述を大幅に短縮することができる。モーターは3つあり、1つ目はy軸に動くローバー部分(車)に、2つ目はx軸に動くローバー部分に、3つ目はペン昇降制御に使った。 #ref(./IMG_0098.JPG,10%,構造) **x軸制御/ペン昇降制御 [#a93711b3] 動作時のズレや振動などで車輪が脱輪することがしばしばあったので、車輪内側に脱輪防止のパーツをを付けた。これにより脱輪は解消された。が、思った以上に車体が重く、移動中に高架から落ちてしまうこともあったため、安定性はあまり良くなかった。また上の重量物に高架が耐えれるように車の反対側の支柱もかなり強度を上げる必要があったし滑らかに動けるようにしなければならなかった。 #ref(./IMG_0101.jpg,20%,x軸制御/ペン昇降制御) #ref(./IMG_0093.JPG,10%,x軸制御/ペン昇降制御) **ペン部分 [#be49a008] 当初は筆圧が一定になるように垂直にペンを上げ下げしようとしたがパーツの少なさなどによって中止し、モーター部分に固定させるだけにした。一応字が書ける程度までにはなったが筆圧が一定しなかったり、移動の際の振動などでずれたりとあまり綺麗な字にはならなかった。 当初は筆圧が一定になるように垂直にペンを上げ下げしようとしたがパーツの少なさなどによって中止し、モーター部分にアームをつけ、ペンをゴムでくくりつけるだけにした。なので紙面に対して斜めの状態で字を書くことになった。一応字が書ける程度までにはなったが筆圧が一定しなかったり、移動の際の振動などでずれたりと安定せず完全性に欠けていた。 #ref(./IMG_0099.JPG,10%,ペン部分) *プログラム [#f1b1ba6e] 変則的だが1文字目が”田”2文字目が”肥”となるようにプログラムを組んだ。理由としては後退するよりも前進するほうがうまくペン先がついたので上からではなく下から書くことにした。 **動作の定義 [#p22e95ae] ここでは各種モーターの動きと速さを定義している //OUT_A → x軸制御 //OUT_B → ペン昇降制御 //OUT_C → y軸制御 #define pen_up() OnFwd(OUT_B,-20); Wait(500); Off(OUT_B); Wait(1000); //ペンを上げる #define pen_down() OnFwd(OUT_B,10); Wait(850); Off(OUT_B); Wait(1000); //ペンを下げる #define forward_A(Wait_time) OnFwd(OUT_A,20); Wait(Wait_time); Off(OUT_A); Wait(1000); //x軸に移動 #define back_A(Wait_time) OnFwd(OUT_A,-20); Wait(Wait_time); Off(OUT_A); Wait(1000); //-x軸移動 #define forward_C(Wait_time) OnFwd(OUT_C,40); Wait(Wait_time); Off(OUT_C); Wait(1000); //y軸移動 #define back_C(Wait_time) OnFwd(OUT_C,-40); Wait(Wait_time); Off(OUT_C); Wait(1000); //-y軸移動 //Wait_timeに移動時間入力 Wait_timeに移動時間を入力するのと各動作のあとに一旦静止するようにしてある。このおかげでズレや振動を抑えている。 **サブルーチン,task main() [#uaf6ba6e] 1文字目の”田”と2文字目の”肥”の2つだけをサブルーチンにしたのでサブルーチンの数は多くない。 sub itimozime() //肥田の”田” { back_A(2800); //1 forward_C(900); //2 forward_A(2800); //3 back_C(900); //4 pen_up(); back_A(1600); pen_down(); forward_C(1000); //5 pen_up(); forward_A(1700); back_C(450); pen_down(); back_A(2850); //6 } sub nimozime() //肥田の”肥” { pen_up(); forward_C(600); pen_down(); forward_A(2000); //7 forward_C(550); //8 back_A(2100); //9 forward_C(650); //10 forward_A(2100); //11 back_C(800); //12 pen_up(); back_A(750); pen_down(); forward_C(550); //13 pen_up(); forward_A(1700); back_C(1400); pen_down(); forward_C(1500); //14 forward_A(750); //15 back_C(1500); //16 pen_up(); forward_C(1100); pen_down(); back_A(800); //17 pen_up(); back_C(450); pen_down(); forward_A(850); //18 } task main() { itimozime(); nimozime(); } #ref(./IMG_0166.JPG,13%,サブルーチン,task main()) ペン先を”田”の一番左下からスタートするようにセットしてある。コメントの数字は上の写真を見てもらえれば分かる通り書き順を表している。書き順は正しいものではなく結果を重視したためこうなった。写真の赤い点線矢印はペン先を紙から離している(pen_up)ときのペンの軌跡を表している。 *結果 [#n4546e8e] #ref(./IMG_0106.JPG,10%,結果) *感想、反省 [#h8aa4d22] 結果の写真は一応読める字になっているが実行結果がいつも同じものになるわけではなかった。最初のペンのセット位置やペンの長さ、電圧、振動、ズレなどによって無視できない程の誤差があった。これはプログラミングというより、ロボットの組み立ての時点で振動やズレが起きにくい、又は起きても大丈夫なような構造にしなければならなかったので工夫が足りなかったと思う。課題2以降ではこれらの反省を踏まえて取り組んでいきたい。