[[2016a/Member]]
*目次 [#jb69539e]
#contents
*課題 [#y6262dae]
今回の課題は、似顔絵を描くロボットの作成。
注意点としては、�。腺瓦了罎涼罎貿爾泙襪茲Δ砲垢覘▲撻鶲奮阿鷲嫗阿良�品を使用する��プログラムはできる限りコンパクトなものにする。
*ロボットの構造 [#se680c41]
L字型の部品に輪ゴムを使用して、ペンを固定した。ペンの上げ下げは、モーターの回転を利用することで再現した。
【ロボット後方】
#ref(./image5.jpg,ロボット後方の写真)
【ロボット側方】
#ref(./image6.jpg,ロボット側方の写真)
*プログラム [#af740487]
【プログラムの定義】
go:前進する back:後退する turn_left:左回転 turn_right:右回転 up:ペンを上げる down:ペンを下げる Wait:停止する
repeat(x){a}:{a}をx回繰り返す
(t)のtに数字を代入することで各コマンドの動作時間を指定できる
#define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC)
#define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_AC)
#define turn_right(t) OnRev(OUT_C);OnFwd(OUT_A);Wait(t);Off(OUT_AC)
#define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC)
#define up OnRev(OUT_B);Wait(7);Off(OUT_B)
#define down OnFwd(OUT_B);Wait(10);Off(OUT_B)
【顔の手順】
�[愕圓鯢舛�
最初は各線ごとにプログラムしていたが、repeatで省略することが可能だと気づき、変更した。2本の線の角度がずれるときれいな輪郭にならないので、微調整に苦労した。
task main()
{
go(10);
repeat(3){
go(80);
up;
back(120);
turn_left(80);
back(10);
down;}
�¬椶鯢舛�
目は顔の中心から見て、対象になると考え、ここでもrepeatを使用した。
go(105);
up;
back(20);
turn_right(120);
go(70);
repeat(2){
go(10);
down;
go(20);
up;}
back(10);
turn_right(120);
�I,鯢舛�
目の真ん中に来るように微調整することも大変だったが、今回作ったロボットでは、短い線をきれいに書くのが難しいことをここで実感した。その問題点と対策は別に記載した。
go(160);
down;
Wait(20);
go(10);
up;
�じ�を描く
口はあまり問題なく、プログラムすることができたが、ロボットの調子に左右され、苦労した。
go(20);
turn_right(120);
go(130);
down;
go(25);
up;
}
*問題点1 [#nf483377]
ロボット後方についている、ペンを回すためのモーターが、ペンを回す反動やペンが地面につく衝撃ですぐに取れてしまう。
対策 タイヤの間に挟むことで固定した。
【対策後の写真】
#ref(./image1.JPG,対策後の写真)
*問題点2 [#h80e2488]
コードの接続不良。
対策 別のコードを使用。ただし、コードが長いため本体の上に積むことになった。
*問題点3 [#qe82591d]
ペンを回す勢いが強く、短い線を描こうとするとペンがはねて、点線になってしまう。
対策 ペンを下げる動作の後にWaitをプログラムに挟むことで、ペンが完全に地面についてから描き始めるようになり、きれいな線を描くことができた。
*完成図 [#yab3206f]
矢印とその番号はプログラムの「顔の手順」を参照
【完成写真】
#ref(./image8.jpg,完成図)
*感想及び反省 [#e5509d5e]
初めてのプログラミングだったが、少しは慣れることができた。そして、一度プログラムが消えるというハプニングもあったが、そのおかげで最初よりコンパクトなプログラムになったので、良かった。しかし、ロボットの移動範囲が広く、似顔絵を描くときにロボットが紙を動かしてしまうので、抑える必要があった。次は移動範囲を可能な限り狭くするようにしたい。全体的にロボットの調子に左右され、微調整の繰り返しで大変だった。