目次 #contents *今回の課題について [#v6026b6a] 今回の課題は自分の名前又は出身地の中の一文字(7画以上のもの)をA4用紙の書く課題である。 ただし、7画以下の文字であっても複数文字書いて合計7画以上になればそれでも良い。 私は出身の市である稲沢市の一文字の沢を選んだ。 [[2015年後期/課題1:http://yakushi.shinshu-u.ac.jp/robotics/?2015b%2FMission1]] *ロボットの構造がこの形になった理由と沢を選んだ理由 [#if04a2ec] **構造について [#pd8d92a4] -もともとのロボットの形は車のように二つモーターで車輪を動かし、もう一つのモーターで筆を動かす形のものを考えていたが、一度作ってみた結果筆の上げ下げと筆を動かす構造を作るのが難しく、本体を乗せ、さらにペンを動かすためのモータを乗せるとロボット自体が重く不安定で複雑なものになった。これらの弱点を克服できる形を考えた結果写真のような形になった。 **沢を選んだ理由 [#ua028bad] -ロボットが出来上がったあと、はじめは愛知県の愛を書くつもりでやっていたが後述する欠点である筆の可動域の狭さで実現することが困難であったため、次に稲沢市の稲で挑戦してみたがこちらも同様の理由で実現するとこが困難であった。なので最終的に沢を選ぶことになった。 *ロボットの構造について [#ubac466a] #ref(2015b/Member/kei/Mission1/Rob_1.jpg,50%,構造) �,良�分で全体の上げ下げを行いペンを上にあげ、�△良�分でペンを上下左右に動かす。上下左右に動く原理はピンでしか止めてない部分が変形することである。&br; 左右のモーターを同じ方向へ同じ速度で回すことで上下の運動をして、逆に回すと左右のの運動をすることができる。また同じ方向や逆方向でも左右のモーターの回転速度を変えることで緩やかな斜めの線を引くこともできる。もっともわかりやすい部分は「沢」の「尺」の部分の左側のカタカナのノのような部分である。この部分は左右のモーターの回転速度の違いを利用して斜めの線を引いている。 動きに関しては&size(20){[[「実際の動画」:https://youtu.be/gF_ThiidbBs]]};を見ていただけるとわかりやすいと思う。 動きに関しては&size(20){[[「実際の動画」:https://youtu.be12345/gF_ThiidbBs]]};を見ていただけるとわかりやすいと思う。 **この構造でのメリット [#f7eb0581] -本体を搭載していなのでロボット自体が軽くなる -二つのモーターで筆を上下左右に動かすことができるのでロボットの構造とプログラムを単純化できる -写真の下のほうについてるタイヤで紙を抑えることができる **この構造でのデメリット [#ycaaf900] -�△良�分の上下左右の隅で筆をうまく動かすことが構造的に不可能であり可動域が狭いこと *字の書き方について [#u4b4587b] 字の書き順は以下の画像の順である。 本来は7画の文字であるが実際には5画で書いた。 #ref(2015b/Member/kei/Mission1/Rob_2.jpg,50%,書き順); 書き順は�、��□���→�あ��イ僚腓任△襦� *ロボットの動作&プログラミングについて [#v4b5dcc8] **プログラムの工夫点 [#sb346bde] -各動作の後に一瞬の停止を入れることで慣性の影響を抑えている。 -上下左右と斜め移動の命令をパーツ化することでプログラムを書きやすくしている。 **マクロ部分 [#n10b7e13] // 沢 #define go_L OnFwd(OUT_A,10);OnRev(OUT_B,10); // ← #define rev_R OnRev(OUT_A,10);OnFwd(OUT_B,10); // → #define row_up OnRev(OUT_AB,10); // ↑ #define row_down OnFwd(OUT_AB,10); // ↓ 上下左右の移動に関してのマクロである。 #define GoA OnFwd(OUT_A,20);Off(OUT_BC); // / down #define GoB OnFwd(OUT_B,20);Off(OUT_AC); // / up #define RevA OnRev(OUT_A,20);Off(OUT_BC); // \ down #define RevB OnRev(OUT_B,20);Off(OUT_AC); // \ up 片方のモーターだけを動かすプログラムである。片方だけを動かすことによって斜め移動を実現している。 #define GoAB_20_10 OnFwd(OUT_A,20);OnFwd(OUT_B,10); // \ down #define GoBA_20_10 OnFwd(OUT_B,20);OnFwd(OUT_A,10); // / down #define RevAB_20_10 OnRev(OUT_A,20);OnRev(OUT_B,10); // \up #define RevBA_20_10 OnRev(OUT_B,20);OnRev(OUT_A,10); // /up 上で¥で表されているものは\である。文字の表示の関係で\が¥に変換されているようである プログラム内のコメントにある「/ down」とは斜め左下に動く意味である。「GOAB_20_10」とはAに接続されているモーターをパワー20で回し、Bに接続されているモーターをパワー10で回すことを表している。左右でパワーを変えるとことによってペンの斜め移動をすることが可能で、片方のモーターのみを動かす場合より緩やかに斜め移動することができる。 #define up OnFwd(OUT_C,70);wait(300); #define down OnRev(OUT_C,30);wait(280); 「up」は本体を持ち上げることを表している。 「down」は本体を下げることを表している。 #define wait(t) Wait(t);Off(OUT_ABC); #define wait300 Off(OUT_ABC);Wait(300); 「wait」は何秒待つかを表しており、「wait300」は0.3秒すべてのモーターを止めることを表している。 **「氵」を書く [#n8d46b00] go_L; // サンズイ 始まり wait(600); wait300; down; wait300; GoB; wait(200); up; wait300; row_down; wait(150); down; wait300; RevB; wait(200); wait300; up; wait300; row_down; wait(600); down; wait300; RevA; wait(200); wait300; up; wait300; // サンズイ 終わり **「尺」の書きはじめの場所へペンを移動 [#g10d1985] RevA; // 書き始めの位置へ wait(500); wait300; **「尺」を書く [#ucbb51b6] down; //尺 始まり wait300; GoAB_20_10 wait(500); wait(300); up; wait300; RevAB_20_10; wait(500); wait300; down; wait300; rev_R; wait(450); wait300; GoA; wait(250); wait300; go_L; wait(450) wait300; GoBA_20_10; wait(400); wait300; up; //終わり *実際に書いたもの [#qe2c729b] #ref(2015b/Member/kei/Mission1/Rob_3.JPG,50%,構造) *感想&考察 [#g4f185d7] 本当は愛か稲を書きたかった。理由はそっちのほうがかっこいいからである。今回これらの文字が書けなかったのは可動域の狭さが原因の一つであることは明らかである。ペンをつけてある腕をもっと長いパーツにすれば可動域が広がり書きたかった文字を書くことができたと思う。今回の課題について初めは簡単そうだと思っていたが実際にやってみるととても難しく思ったように字を書くことができなかった。しかし完成したロボットは独自性があり、最終的には文字を書くこともできとても楽しかった。