[[2015a/Member]] *書道ロボットR8班目次 [#p76987ba] #contents *課題内容 [#yf745b60] 今回の課題は「書道ロボット」。 Mindstorms Robotics Invention System(以下RIS)を用いて自分の名前に含まれる漢字(7画以上)を書けという内容だった。 今回は自分の字の「忠」を選択した。 **難点 [#b699b243] +縦線と横線の書き分け +小さすぎずに文字を書くこと +斜めの線 +全体のバランス +見やすいプログラムで作成すること +美しい字を書くこと *ロボットの説明 [#jaea621d] 難点1を克服するためにも、縦、横、ペンの操作と、3つのモーターを用いて役割を分担する方法を採用した。 そのため、今回作成したロボットは大まかに分けて4つの部分から成り立つ。 **車体部分 [#i06cb4a9] &ref(./body3.jpg,150%); &ref(./body1.jpg,150%); &ref(./body2.jpg,150%); ***ポイント [#ccc772c2] -モーターを1つ使い、縦移動を担当。 -左右のタイヤをつなぐことによって安定した走りを実現。 -RCXを左端に乗せることによりアームを取り付けた際にバランスを維持。 -後輪タイヤ横のL字ブロックでアーム土台を固定。 **アーム [#uf1c3011] &ref(./arm1.jpg,150%); &ref(./arm3.jpg,150%); &ref(./arm4.jpg,150%); ***ポイント [#x40ca998] -横に長い構造により、可動範囲を増やす。 -サインペンをテープで巻いて固定。 -モーターを1つ使い、ペンの上下を管理。 -モーターに歯の数の多いギアをつないでペンの上下するスピードを低下。 **アーム土台 [#x71fd83d] #ref(./arm_base1.jpg,150%); ***ポイント [#d16a356e] -バランスの取れる上限までチューブを使い上下のブレを軽減。 -チューブの凹凸の方向をアームの進行方向と平行にすることによってアームの動きを邪魔しない。 -ストッパーをして強度の向上。 **アーム稼働モーター [#d479a392] &ref(./arm_motor1.jpg,150%); &ref(./base_motor1.jpg,150%); &ref(./base_motor2.jpg,150%); ***ポイント [#c1548d7b] -モーターを1つ使い、横移動を担当。 -左右からブロックで挟むことにより、アームの左右のブレをなくす。 -ペン稼働モーターの余ったコードを邪魔にならないように括り付ける。 -モーター後方にも添えブロックを置いて安定性とバランス力の向上。 **ドッキング [#deaa30e8] アーム、アーム土台、アーム稼働モーターを組み合わせることにより下記のものが完成する。 &ref(./docking1.jpg,150%); &ref(./docking2.jpg,150%); **完成 [#od8d9ad1] 上記の複合パーツ、車体部分を組み合わせることによって完成。 &ref(./compleat1.jpg,150%); &ref(./compleat2.jpg,150%); &ref(./compleat3.jpg,150%); *プログラムの説明 [#t728cbb3] **実際のプログラム [#hc9f8d41] #define WAIT_TIME 50 #define go_side(t) OnFwd(OUT_B);Wait(t);Off(OUT_B); #define back_side(t) OnRev(OUT_B);Wait(t);Off(OUT_B); #define go_length(t) OnFwd(OUT_C);Wait(t);Off(OUT_C); #define back_length(t) OnRev(OUT_C);Wait(t);Off(OUT_C); #define up_pen OnFwd(OUT_A);Wait(5);Off(OUT_A); #define down_pen OnRev(OUT_A);Wait(5);Off(OUT_A); #define wait Off(OUT_ABC);Wait(WAIT_TIME); task main () { down_pen; wait; go_side(25); wait; back_length(10); wait; back_side(25); wait; go_length(10); wait; up_pen; go_length(7); wait; go_side(12); wait; down_pen; wait; back_length(24); wait; up_pen; wait; back_side(12); wait; back_length(6); down_pen; wait; repeat(2) { go_side(1); go_length(3); } wait; up_pen; wait; go_side(1); go_length(3); wait; down_pen; wait; back_length(15); go_side(20); wait; up_pen; wait; go_length(13); back_side(6); wait; down_pen; wait; back_length(10); wait; up_pen; wait; go_side(6); wait; down_pen; wait; go_length(8); wait; up_pen; } **使用した関数 [#r95c5073] #define WAIT_TIME 50 #define go_side(t) OnFwd(OUT_B);Wait(t);Off(OUT_B); #define back_side(t) OnRev(OUT_B);Wait(t);Off(OUT_B); #define go_length(t) OnFwd(OUT_C);Wait(t);Off(OUT_C); #define back_length(t) OnRev(OUT_C);Wait(t);Off(OUT_C); #define up_pen OnFwd(OUT_A);Wait(5);Off(OUT_A); #define down_pen OnRev(OUT_A);Wait(5);Off(OUT_A); #define wait Off(OUT_ABC);Wait(WAIT_TIME); +待機時間を0.5秒に設定。 +ペンをt/100秒右に移動。 +ペンをt/100秒左に移動。 +ペンをt/100秒前に移動。 +ペンをt/100秒後ろに移動。 +ペンを紙から離す。 +ペンを紙につける。 +0.5秒待機。 **1〜3画目 [#o97234ce] task main () { down_pen; wait; go_side(25); wait; back_length(10); wait; back_side(25); wait; go_length(10); wait; up_pen; ***ポイント [#y62c8b38] -ペンの上下による多少のずれもなくすため、1〜3画目までは一筆書き。 -間に待機を入れることによって、角を際立たせた文字を作成する。 **4画目 [#qe9f0512] go_length(7); wait; go_side(12); wait; down_pen; wait; back_length(24); wait; up_pen; ***ポイント [#e6cb3b5b] -上から大胆に貫くことによって力強い字を描く。 -中として見たときに縦と横の割合を約1:1にすることで、心を足した後でバランスの良い字となる。 **5画目 [#xd0a57f2] back_side(12); wait; back_length(6); down_pen; wait; repeat(2) { go_side(1); go_length(3); } wait; up_pen; ***ポイント [#dcb56a26] -縦と横の線を待機を入れずに連続で引くことにより、斜めを描く。 -ペンを右に移動させたほうがしっかりとした字を書けるので、左下からの始動。 -repeat関数を用いて簡略化する。 **6画目 [#t6263c93] go_side(1); go_length(3); wait; down_pen; wait; back_length(15); go_side(20); wait; up_pen; ***ポイント [#pa8b1775] -5画目と同様待機を入れないことによって斜めを形成。 -横を広くとることによって、力強い字を描く。 **7〜8画目 [#i3b6a362] go_length(13); back_side(6); wait; down_pen; wait; back_length(10); wait; up_pen; wait; go_side(6); wait; down_pen; wait; go_length(8); wait; up_pen; } ***ポイント [#m9b057af] -6画目の中に納まるように描くことによってバランスをとる。 **完成 [#jd3c68d0] #ref(./tyuu.jpg,200%);