書道ロボット 目次 #contents *課題1 [#z75d6197] **課題内容 [#h79539f1] 書道ロボットを作ろう。2人1組でロボットを作り、それぞれ自分にゆかりのある合計10画以上の漢字2文字を書かせる。漢字はA4の紙1枚に書く。 **選んだ漢字 [#wff96004] 自分が住んだことのある三重県の「三重」(合計12画)を選んだ。また、三重県の知名度を上げるため。 *ロボット本体について [#ga2b8daa] **全体図 [#u64120cb] #ref(./image2 (1).jpeg,150%,myrobot) 名前は「みぃ〜君」今回三重と宮木を書くので頭文字の「み」から。かわいくアレンジ。片手で筆を持ち、片手で紙を押さえるイメージ。(他者の意見参考)車輪が目。ちなみに左利き。 **ロボット本体の説明 [#k3f7741b] 今回はXY座標型にして動かした。書こうとする漢字「三重」は横、縦棒が非常に多いのでXY座標型のほうがプログラミングが簡単だと思いこちらにした。最初は一画一画動いて文字を書いていくロボットにしていましたが、プログラミングでうまくいかなくなりやめた。 ・失敗作 #ref(./sippaiya.jpeg,100%,myrobot) ・本体 大きく分けて親機と子機に分かれる。親機が子機の台座となり子機がその上を動く。親機にはモータAが備えられており縦方向に動く。子機にはモータCで横井方向に動き、モータBでペンの上げ下げをする。 #ref(./kokikoki.png,100%,myrobot) 上:子機 子機はタイヤと歯車でバランスを取り、台(親機)の上で滑らかに動くことができる。 #ref(./oyakiya.png,100%,myrobot) 上:親機 タイヤが動く台座がある。中央に黒色の支えをつけることにより、ずれを減らした。 ・モータについて -モータA:車輪を動かし縦方向に動かせることができる。(縦棒を書くとき、縦に動くときに使う) -モータB:アームを動かしてペンを上下に動かせることで書くとき書かないときを変える。 -モータC:歯車を動かして子機を横に動かすことができる。(横棒を書くとき、横移動をするときに使う) #ref(./motabc.png,150%,myrobot) #ref(./image2.png,150%,myrobot) *プログラムについて [#r69a381e] **書き順 [#jfbb2758] #ref(./kakikata.jpeg,50%,書き順) 書き順はできる限り効率よくかつきれいに書くように心がけた。横棒の大きさや位置をできる限り正確に書けるように一画書いて書き始めの位置に戻るようにした。そうすることで一画一画の長さの違いがはっきりとかつ不自然のないようにした。 **プログラム [#fde65f41] ***define [#wd9c8a30] #define yoko(t) OnFwd(OUT_B);Wait(22);Off(OUT_B);Wait(20); OnFwd(OUT_C);Wait(t);Off(OUT_C);Wait(10); OnRev(OUT_B);Wait(25);Off(OUT_B); OnRev(OUT_C);Wait(t);Off(OUT_C); //左から右へ一画書いて戻る #define tate_ido(t) OnFwd(OUT_A);Wait(t);Off(OUT_A); //上から下へ動く #define tate(t) OnFwd(OUT_B);Wait(22);Off(OUT_B);Wait(20); OnFwd(OUT_A);Wait(t);Off(OUT_A);Wait(10); OnRev(OUT_B);Wait(25);Off(OUT_B); OnRev(OUT_A);Wait(t);Off(OUT_A); //上から下へ一画書いて戻る 「三重」には、長さの違う横棒や縦棒で基本出来ているので、defineには一画をセットで書くことにした。 ***メイン [#ifb9b2ff] move_timeの時間を変えることによって同じ横棒でも長さを変えることができた task main() { int move_time; move_time=0; //スタートタイム move_time+=50; //タイム50 yoko(move_time); //1画 move_time-=37; //タイム13 tate_ido(move_time); OnFwd(OUT_C);Wait(10);Off(OUT_C); move_time+=17; //タイム30 yoko(move_time); //2画 OnRev(OUT_C);Wait(10);Off(OUT_C); move_time-=17; //タイム13 tate_ido(move_time); move_time+=37; //タイム50 yoko(move_time); //3画 「三」完成 move_time-=35; //タイム15 tate_ido(move_time); OnFwd(OUT_C);Wait(10);Off(OUT_C);Wait(10); move_time+=10; //タイム25 yoko(move_time); //4画 OnRev(OUT_C);Wait(10);Off(OUT_C); move_time-=20; //タイム5 tate_ido(move_time); //5画 move_time+=45; //タイム50 yoko(move_time); //6画 move_time-=45; //タイム5 tate_ido(move_time); //7画 OnFwd(OUT_C);Wait(5);Off(OUT_C); move_time+=5; //タイム10 tate(move_time); //8画 OnFwd(OUT_B);Wait(22);Off(OUT_B);Wait(20); OnFwd(OUT_C);Wait(40);Off(OUT_C);Wait(10); OnFwd(OUT_A);Wait(10);Off(OUT_A);Wait(10); //タイム10 OnRev(OUT_B);Wait(25);Off(OUT_B); OnRev(OUT_A);Wait(10);Off(OUT_A); //9画 OnRev(OUT_C);Wait(40);Off(OUT_C); move_time-=5; //タイム5 tate_ido(move_time); 繰り返しを使い同じ長さの棒を3本かく repeat(3){ move_time+=35; //タイム40 yoko(move_time); //10画 move_time-=35; //タイム5 tate_ido(move_time); } OnRev(OUT_C);Wait(5);Off(OUT_C); move_time+=45; //タイム50 yoko(move_time); //11画 OnFwd(OUT_C);Wait(25);Off(OUT_C); OnFwd(OUT_B);Wait(22);Off(OUT_B);Wait(20); 12角 OnRev(OUT_A);Wait(21);Off(OUT_A);Wait(10); OnRev(OUT_B);Wait(20);Off(OUT_B); //終わり 「重」完成 } 一画ずつ戻らせる定義でやったがどうしてもできない箇所があり、そこではまったく定義が使えなかった。もう少し細かくやったほうが良かったかもしれない。 *まとめ [#tc62f458] **結果 [#k7ae140f] #ref(./image4 (1).png,150%,結果) 動画 https://youtu.be/wMPDYSKv5B8 電圧によって書く大きさが変わり三重の重が本番では三に比べ小さくなってしまった。本番に合わせて調整しやすいようにプログラミングするべきだと思った。 ペンの上げ下げに使う機構が威力が大きすぎてペン先をだめにしてしまうことが多かった。全体的にモータの回転数を下げれなかったことが問題だと思った。次回はもっと精密にゆっくりとしたロボットを作るべきと思った。 **感想 [#ef9297c0] ロボットを作り本格的に動かせたのは初めてで感動的だった。いろいろな演算子で動かすのは楽しいと思い、動きにあったものを使っていくことはやりがいがあった。今回は後でもっとこうしたらよかったことが多く後悔もあった。次回は今回以上に満足できるものを作りたい。