*目次 [#ef45319a] #contents *課題 [#x8b1c317] **お絵描きロボット [#o96ebfc0] ・A3用紙に相棒の似顔絵を書くロボットの製作 **課題を行うために必要な機能 [#o9868197] 相談した結果、相棒の似顔絵を描くに為に以下の機能が必要だと考えた。~ ・前進後進が可能~ ・左右に方向転換、及びその場での回転が可能~ ・ペンを装着し固定できる~ ・モーターによってペンを上げ下げできる~ ・ペンと紙との摩擦でペンがずれない~ ・動作中に分解しない耐久性がある~ したがって以上の点を満たすロボットを製作した~ *使用したロボット [#mb1b44ca] **ロボットの説明 [#g781b7ed] ***側面 [#m6e895f7] #ref(2008a/A2/課題1右/TS3H0023.JPG,側面); 移動のしやすさ、特にその場での旋回のしやすさのためにタイヤを用いた。~ 始め、タイヤを3輪にしそのうち一つはロボットの前方に全方向に回転できるものにしたがスムーズな旋回ができなかった。~ そのためタイヤは安定した4輪にした。 ***正面 [#z2030032] #ref(2008a/A2/課題1右/080521_1630~01.jpg,正面); ペンを固定するためにタイヤを4つ用いた。~ 写真から見て右側のタイヤ2つはモータに連動していてタイヤの隙間にペンを固定すると同時にペンを上下させることができる。~ ***上から [#sff29893] #ref(2008a/A2/課題1右/080521_1631~02.jpg,上から) 半径の小さな円を描くためにペン固定装置を回転の中心に近づけた。~ その代わりにロボットの重心が後方によってしまった。 ***ペン固定装置 [#f0255aa6] #ref(2008a/A2/課題1右/TS3H0026.JPG,ペン固定装置); モータの回転に合わせてタイヤが同じ方向に回転することができる。それによりペンを上下させる。~ はじめ小サイズのギヤを使ったらタイヤが高速回転しペンが上に吹き飛んだ。 そのためギヤはゆっくりと回る中サイズのものにした。 ***転倒防止装置 [#e6aabe60] #ref(2008a/A2/課題1右/TS3H0024kai.JPG,転倒装置); 製作したロボットは構造上、重心が後方に寄っていた。~ 通常の動作には影響はなかったが後進→前進の動作をすると慣性の法則の影響から前輪が浮き浮き上がる現象を引き起こした。~ そのためロボットの後方の地面スレスレの所に写真の部品を付けた。~ この部品は前輪が浮き上がる現象が起きた時のみ効果を発揮し浮き上がった前輪をほぼ一瞬で戻すことができる。 *プログラム [#s91e56ea] **A [#ucc27b6f] #define up OnRev(OUT_B);Wait(10);Off(OUT_B); //「up」でペンを上げる #define down OnFwd(OUT_B);Wait(40);Off(OUT_B); //「down」でペンを下げる #define matu Off(OUT_A+OUT_C);Wait(50); //「matu」で0.5秒間モーターA,Bの動作停止 void go(int t) { OnFwd(OUT_C+OUT_A);Wait(t); //「go(秒数)」で秒数分だけ前進 } void back(int t) { OnRev(OUT_C+OUT_A);Wait(t); //「back(秒数)」で秒数分だけ後進 } void right(int t) { OnFwd(OUT_A);OnRev(OUT_C);Wait(t); //「right(秒数)」で秒数分だけ右回りに回転 } void left(int t) { OnFwd(OUT_C);OnRev(OUT_A);Wait(t); //「left(秒数)」で秒数分だけ左回りに回転 } task main() { left(40);matu; //左の眉毛を書く down right(80);matu; up;matu; right(40);matu; go(90);matu; //右の眉毛に移動 left(90);matu; left(40);matu; //右の眉毛を書く down right(80);matu; up;matu; right(40);matu; //右目に移動 back(30);matu; down;matu; back(40);matu; //右目を書く up right(190);matu; //180度回転と同時に左目の移動 down;matu; //左目を書く back(40);matu; go;(20);matu; //顔の中心に移動 up;matu; left(90);matu; //左に90度回転 down //鼻を書く go(30);matu; up;matu; go(50);matu; //口に移動 left(40);matu; //口を書く down;matu; right(80);matu; Off(OUT_A+OUT_B+OUT_C); //停止 } **B [#ia3e4da6] *苦労した点 [#qda0b9ec] **問題点 [#b79e5c23] 1:ペンを下げるときに出しすぎてしまい車体が浮いてしまう~ 2:できる限り小さな円を描こうとした結果ロボットの重心が後方にずれてしまい急発進する際に後ろに浮き上がることがあった~ 3:プログラムを書く際にOnFwd(OUT_A+OUT_C);Wait(300);・・・のように前進させるだけでも長い文を書かなければならず手間がかかるうえに解りずらい~ 4:ペンが紙から離れる前に次の動作が動き出し紙に不要な線ができる **解決策 [#xc6f855d] 1:ペンの構造を利用してブロックである一定以上にペンが出すぎるのを防いだ~ 2:ロボットの後ろにストッパーをつけて浮き上がってもすぐに戻るようにした~ 3:最初に前進、後進、方向転換を「go(300)」「back(300)」のように定義することで書きやすく分かりやすいプログラムを書いた~ 4:ひとつの動作が終わるごとにすべてのタイヤのモーターを止めることで不要な線が書かれるのを防いだ~ *今後の課題 [#ke03dba3] *コメントをどうぞ [#m2bc11ac] #comment