- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
*課題1 [#i7298d6a]
出身地の都道府県や市、町などの中から2文字を選び、それをA4のの用紙に書くロボットを製作せよ。
*選んだ文字 [#vd1baa0f]
滋賀県にある、とある町の名前の「高田」という文字を選んだ。
*ロボットの説明 [#i0c4c560]
**アーム[#c87f6dc2]
右や左に曲がったり、旋回しても筆ペンの用紙上での位置がブレないように筆先が前輪を結んだ直線の中点の真上に設置した。また、アームのコンパクト化、筆先のブレ防止のために歯車と螺旋状の部品を用いて、筆ペンを地面と垂直に固定したまま上下に動かせるようにした。筆は部品同士で挟んでアームに固定している。仕組みは図のようになっている。➡
&ref(penueshita2.tiff);
右や左に曲がったり、旋回しても筆ペンの用紙上での位置がブレないように筆先が前輪を結んだ直線の中点の真上に設置した。また、アームのコンパクト化、筆先のブレ防止のために歯車と螺旋状の部品を用いて、筆ペンを地面と垂直に固定したまま上下に動かせるようにした。(図A)筆は部品同士で挟んでアームに固定している。仕組みは図のようになっている。(図B)
&ref(buhinnB.png);
&ref(penjouge.png);
&ref(IMG_1261.jpg);
※筆部分は見やすいように蛍光ペン使用している。
**車輪部分[#j1bb9317]
シンプルな三輪構造で前輪が二輪、後輪が一輪となっている。前輪の二輪が駆動し、後輪は360°回転可能となっている。
&ref(IMG_1250.jpg);
*プログラミングにあたっての準備[#s1616dcd]
**アームを上下させるプログラム[#b424451f]
#define arm_down OnFwd(OUT_A,50);Wait(150);Off(OUT_A);
#define arm_up OnRev(OUT_A,50);Wait(150);Off(OUT_A);
**直進させるプログラム[#xc911cb7]
#define go_straight OnFwd(OUT_B,40);OnFwd(OUT_C,43);
左右の駆動力のバランスが異なるため調整した。
**左右それぞれに90度旋回するプログラム[#o31edb19]
#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,25);Wait(1425);Off(OUT_BC);
#define turn_left OnFwd(OUT_B,25);OnRev(OUT_C,25);Wait(1425);Off(OUT_BC);
**左右それぞれに曲がるプログラム[#ca401bd1]
#define turn_R OnFwd(OUT_C,25);OnRev(OUT_B,25);
#define turn_L OnRev(OUT_C,25);OnFwd(OUT_B,25);
**車輪を制止させるプログラム[#wdfb00e5]
#define off Off(OUT_BC);
#define arm_down OnFwd(OUT_A,50);Wait(150);Off(OUT_A);//筆ペンを上げる
#define arm_up OnRev(OUT_A,50);Wait(150);Off(OUT_A);//筆ペンを下ろす
#define go_straight OnFwd(OUT_B,40);OnFwd(OUT_C,43);//前進する
左右のモータの出力が異なるため調整した。
#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,25);Wait(1425);Off(OUT_BC);//直角右に曲がる
#define turn_left OnFwd(OUT_B,25);OnRev(OUT_C,25);Wait(1425);Off(OUT_BC);//直角左に曲がる
#define turn_R OnFwd(OUT_C,25);OnRev(OUT_B,25);//右に曲がる
#define turn_L OnRev(OUT_C,25);OnFwd(OUT_B,25);//左に曲がる
#define off Off(OUT_BC);//停止する
*プログラム本編[#v6748922]
**「高」を書くためのプログラム[#z1f9ebf0]
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
turn_right //右に90度曲がる
go_straight //前に進む
Wait(350); //0.35秒間状態を保つ
off //車輪を止める
u_turn //180度回る
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(700); //0.70秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
turn_R //右に曲がる
Wait(2700); //2.70秒間状態を保つ
off //車輪を止める
go_straight //前に進む
Wait(650); //0.65秒間状態を保つ
off //車輪を止める
turn_L //左に曲がる
Wait(1275); //1.275秒間状態を保つ
off //車輪を止める
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(500); //0.50秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
turn_left //左に90度曲がる
go_straight //前に進む
Wait(500); //0.50秒間状態を保つ
off //車輪を止める
turn_L //左に曲がる
Wait(950); //0.95秒間状態を保つ
off //車輪を止める
go_straight //前に進む
Wait(230); //0.23秒間状態を保つ
off //車輪を止める
turn_L //左に曲がる
Wait(425); //0.425秒間状態を保つ
off //車輪を止める
go_straight //前に進む
Wait(500); //0.50秒間状態を保つ
off //車輪を止める
u_turn //180度回る
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(500); //0.50秒間状態を保つ
off //車輪を止める
turn_right //右に90度曲がる
go_straight //前に進む
Wait(765); //0.765秒間状態を保つ
off //車輪を止める
turn_right //右に90度曲がる
go_straight //前に進む
Wait(500); //0.50秒間状態を保つ
off //車輪を止める
turn_right //右に90度曲がる
turn_R //右に曲がる
Wait(425); //0.425秒間状態を保つ
off //車輪を止める
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
go_straight //前に進む
Wait(378); //0.378秒間状態を保つ
off //車輪を止める
turn_L //左に曲がる
Wait(1850); //1,85秒間状態を保つ
off //車輪を止める
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(150); //0.15秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
**「田」を書くためのプログラム[#v9ddb1ce]
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(460); //0.46秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(460); //0.46秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(460); //0.46秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(460); //0.46秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
turn_left //左に90度曲がる
go_straight //前に進む
Wait(230); //0.23秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(460); //0.46秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
turn_left //左に90度曲がる
go_straight //前に進む
Wait(230); //0.23秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
go_straight //前に進む
Wait(230); //0.23秒間状態を保つ
off //車輪を止める
turn_left //左に90度曲がる
arm_down //筆ペンを下ろす
go_straight //前に進む
Wait(430); //0.43秒間状態を保つ
off //車輪を止める
arm_up //筆ペンを上げる
&ref(takada.pdf);
青線は筆先が接地しており、赤線は接地していない。
*完成した文字[#i3fe4a9f]
&ref(IMG_1257ex2.jpg);
少し傾いてしまったが、線はきれいに引けた。
* 課題1を振り返って[#d7a6f340]
**苦労した点[#b617525e]
ロボット第一弾は重心が後方に偏ってしまい、旋回時に前輪が浮いてしまうという問題が起こったので、解決するために重心を偏らせず、うまく機能するようなロボットを製作するのが大変だった。また、ロボットの燃費が非常に悪く、一通り動作させる度に出力が変わってしまい、プログラミングと動作がずれてしまうところを調整することも大変だった。
**良かった点[#w17d50c9]
ロボット製作において、アームの接地位置を前輪の中点においたことや、アームのリーチを無くし、歯車を使うことでロボット全体のコンパクト化が可能になったこと、また、プログラムにおいて、できるだけ#defineを使い一文一文を短く出来たことがよかった。
**反省点[#mce76d23]
ロボット第一弾が完成し、それに合わせたプログラミングが大方できたところでロボットに問題が生じ、最初から作り直すことがあったので、逐一確認して、最小限の手直しで済むようにしたい。また、プログラミングの行数が多くなってしまったので、様々な関数を駆使して短く抑えられるようにしたい。