[[2017a/Member]]

目次 

#contents


*課題 [#hf67df50]
15cm×15cmの正方形に入るように大学での新生活を表す漢字一字を書く。
(詳しくは[[課題1>2017a/Mission1]]を参照。)

**選んだ漢字 [#hce235cd]
私は「求」という漢字を選びました。理由は単位を求めているからです。

*ロボットの説明 [#xe266d76]

&ref(2017a/Member/Mitsuki/Mission1/hontai.1.JPG,50%,本体画像1);
&ref(2017a/Member/Mitsuki/Mission1/hontai.2.JPG,50%,本体画像2);
&ref(2017a/Member/Mitsuki/Mission1/hontai.3.JPG,50%,本体画像3);

**ロボット全体について [#r00375c5]
私たちがつくったロボットはRISの説明書に載っているタイヤを使ったモデルをそのまま採用し、
そこにマジックペンを装着した設計です。

**ペン装着部分について [#u32344c1]
今回ロボットを組み立てる過程で一番苦労したのがこの部分です。

最初にロボット前方の真ん中にあるタイヤがついた部品を作りペンを上下させることに成功しましたがこれだけではぺんの固定が弱くロボットを動かすとペンがぶれてしまいました。

&ref(2017a/Member/Mitsuki/Mission1/pen1.JPG,50%,ペン上げ下げ部品);

この問題を解決するためにロボット前方下の部品を作りました。その結果、ペンがぶれるという問題は解決しましたが、この状態でもロボットを動かせば線を書けましたが、線がかすれてしまうのが気になり解決を試みました。

&ref(2017a/Member/Mitsuki/Mission1/sita1.JPG,50%,ペン固定部品);

そこで線がかすれないようにするにはペンを下方向に押さえることが必要だと思いロボット前方上の部品を作りました。この部品はペンが下に降りてる時だけ押さえつけペンが上がっている時は押さえつける部分がずれ押さえなくなります。よって、この部品のおかげできれいに線を書けるようになりました。この部分については見た目が気に入らなかったので作り直しました。

改良前

&ref(2017a/Member/Mitsuki/Mission1/arm.1gou1.JPG,50%,ペン抑え部品改良前);

改良後

&ref(2017a/Member/Mitsuki/Mission1/arm1.JPG,50%,ペン抑え部品改良後1);
&ref(2017a/Member/Mitsuki/Mission1/arm2.JPG,50%,ペン抑え部品改良後2);

ここまで組み立てた時点では
ロボットの赤外線受信部はペンの装着部分の方向を向いていましたがデータの送信が不便なことに気づいたのでRIS本体の向きを逆にしました。
よってコードが少し絡み合ってしまうがデータの受信が楽になりました。

*プログラムについて(RIS) [#yf1e6ddd]
**書き順 [#xe2717e7]
本来の書き順とは違う順番で書いています。

#ref(./kakijun.JPG,50%,書き順)

**モータの接続について [#nf23197d]
A→左タイヤ (OnFwd:前進 OnRev:後退)

B→ペン上げ下げ (OnFwd:上げる OnRev:下げる)

C→右タイヤ (OnFwd:前進 OnRev:後退)

**プログラム全体 [#h7439910]
まず一番使うと思った「前進しながら書く」「後退しながら書く」という動作をdefineでそれぞれ「write_fwd」「write_back」という名前で定義しました。
また、ペンの上げ下げの勢いがなかなか大きくてマシーンが揺れてしまうので、ペンを上げ下げした直後に停止する時間を作ることできれいに線を書き始めれ、書き終われます。

defineの詳しい行動は

write_fwd:ペンを下げる→0.1秒停止→t/100秒前進→0.1秒停止→ペンを上げる

write_back:ペンを下げる→0.1秒停止→t/100秒後退→0.1秒停止→ペンを上げる

となっています。

 #define write_fwd(t) 
 OnRev(OUT_B);Wait(6);Off(OUT_B);Wait(10);OnFwd(OUT_AC);Wait(t);Off(OUT_AC);Wait(10);OnFwd(OUT_B);Wait(6);Off(OUT_B);

 #define write_back(t) 
 OnRev(OUT_B);Wait(6);Off(OUT_B);Wait(10);OnRev(OUT_AC);Wait(t);Off(OUT_AC);Wait(10);OnFwd(OUT_B);Wait(6);Off(OUT_B);

task mainは分かりにくいですが上の書き順でdefineを使ってプログラミングしてあります。

(線を上の書き順の画像にある番号で示す。)

を書く場合だけ「はね」まで一気に書きたかったのでdefineを使わずにプログラミングしました。(「はね」はペンを下ろしたまま左右のタイヤを逆回転させ右へ旋回して書きました)

 task main()
 {
   OnFwd(OUT_B);Wait(5);Off(OUT_B);//ペンを上げる
   write_fwd(90);//,鮟颪
   OnFwd(OUT_AC);Wait(80);Off(OUT_AC);//前進
   OnFwd(OUT_A);OnRev(OUT_C);Wait(80);Off(OUT_AC);//右へ旋回
   OnRev(OUT_AC);Wait(90);Off(OUT_AC);//後退
   write_back(20);//△鮟颪
   OnFwd(OUT_A);OnRev(OUT_C);Wait(30);Off(OUT_AC);//右へ旋回
   OnRev(OUT_AC);Wait(10);Off(OUT_AC);//後退
   OnRev(OUT_B);Wait(6);Off(OUT_B);Wait(10);OnFwd(OUT_AC);Wait(120);Off(OUT_AC);Wait(10);
   OnFwd(OUT_A);OnRev(OUT_C);Wait(15);Off(OUT_AC);Wait(10);OnFwd(OUT_B);Wait(6);Off(OUT_B);
   Wait(10);//を書く
   OnFwd(OUT_C);OnRev(OUT_A);Wait(15);Off(OUT_AC);//左へ旋回
   OnFwd(OUT_AC);Wait(30);Off(OUT_AC);//前進
   OnFwd(OUT_A);OnRev(OUT_C);Wait(60);Off(OUT_AC);//右へ旋回
   OnRev(OUT_AC);Wait(20);//後退
   write_back(30);//い鮟颪
   OnRev(OUT_AC);Wait(30);Off(OUT_AC);//後退
   write_back(30);//イ鮟颪
   OnFwd(OUT_AC);Wait(120);Off(OUT_AC);//前進
   OnFwd(OUT_C);OnRev(OUT_A);Wait(120);Off(OUT_AC);//左へ旋回
   OnRev(OUT_AC);Wait(50);Off(OUT_AC);//後退
   write_back(30);//Δ鮟颪
   OnRev(OUT_AC);Wait(30);Off(OUT_AC);//後退
   write_back(30);//Г鮟颪
 }

*まとめ [#z230720e]

**書けた字 [#uca8dd9c]

&ref(2017a/Member/Mitsuki/Mission1/kaitazi1.JPG,50%,書けた字);

**感想 [#i94a7fe2]
私は小さい頃からLEGOで遊んでいたこともあり、今回のロボットの組み立ても問題解決するために改良も楽しくできました。最初プログラミングのdefineの使い方もよくわからなかったですがプログラミングしているうちの理解も深まりだんだんと楽しく作業ができました。ロボットの組み立ててきれいに線が書けた時や、プログラミングして字が書けて完成した時はとても嬉しかったです。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS