目次

課題

自分の似顔絵を描く、お絵かきロボットを製作すること。
条件としては
・ペン以外はキットの部品を使うこと。
・プログラムはなるべく簡単に作ること。
・A4サイズの紙に収まる大きさにすること。
である。
(2016年前期/課題1より)

ロボットの説明

ロボット本体

これがロボットの全体像。

100%.タイヤ

ペンを持たせるため、タイヤを二個取り付け挟んだ。
また、タイヤの片側をモータとつなげ、もう片方は空回りさせ、上下運動をできるようにした。

ロボット本体

タイヤだけではペンが安定しなかったため、タイヤ下に補助を取り付けた。
ペンはタイヤ間の距離を考慮し、太さが合うペンを取り付けた。

下書き

80%.下書き

できるだけロボットの移動距離が短くなるように順路を考えた。
また、プログラミングのしやすさを考え、直角を多用できるように下書きした。
髪以外左右対称にしたため、移動距離などがプログラミングしやすかった。

プログラムの説明

定義の説明

#define go_fwd(t)

 t秒間直進。

#define Turn_L
#define Turn_R

 これらは直角に回転するよう定義したもの。
 ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。
 Turn_Lが左回転、Turn_Rが右回転。

#define Turn_L_i
#define Turn_L_ii
#define Turn_L_iii

 これらは髪の毛を描くときに使った定義。
 それぞれ左回転をするが、回転時間を変え、角度を変えた。
 ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。

#define pen_up
#define pen_down

 これらはペンの上下に関する定義。
 pen_upでペンを上げpen_downでペンを下げる。

プログラム

(行変更の際の記号が¥となっている)

#define go_fwd(t)  OnFwd(OUT_AC);Wait(t);Off(OUT_AC)                 //t秒直進
#define Turn_L     pen_up;\
                   OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                   OnFwd(OUT_C);OnRev(OUT_A);Wait(93);Off(OUT_AC);\
                   OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\       //90度左回転
                   pen_down;
#define pen_up     OnFwd(OUT_B);Wait(15);Off(OUT_B);                       
#define pen_down   OnRev(OUT_B);Wait(15);Off(OUT_B);
#define Turn_L_i   pen_up;\
                   OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                  OnFwd(OUT_C);OnRev(OUT_A);Wait(55);Off(OUT_AC);\
                   OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\       
                   pen_down;
#define Turn_L_ii  pen_up;\
                   OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                   OnFwd(OUT_C);OnRev(OUT_A);Wait(68);Off(OUT_AC);\
                   OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\
                   pen_down;
#define Turn_L_iii pen_up;\
                   OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                   OnFwd(OUT_C);OnRev(OUT_A);Wait(160);Off(OUT_AC);\
                   OnFwd(OUT_AC);Wait(72);Off(OUT_AC);\
                   pen_down;
#define Turn_R     pen_up;\
                   OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
                   OnFwd(OUT_A);OnRev(OUT_C);Wait(93);Off(OUT_AC);\
                   OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\       //90度右回転
                   pen_down;

task main()
{
      repeat(2)  {
      go_fwd(90);
      Turn_L;
      go_fwd(80);
      Turn_L;
     }            //輪郭
      pen_up;
      go_fwd(50);
      pen_down;
      Turn_L_i;
      go_fwd(29);
      Turn_L_ii;
      go_fwd(58);      //髪の毛
      Turn_L_iii;
      pen_up;
      go_fwd(24);
      pen_down;
      Turn_R;
      go_fwd(24);      //右目
      pen_up;
      go_fwd(10);
      pen_down;
      Turn_L;
      go_fwd(34);      //口
      Turn_L;
      pen_up;
      go_fwd(10);
      pen_down;
      go_fwd(24);      //左目
       
 
}

輪郭部分でrepeatを使って簡略化することができた。
回転した後、位置のずれが起こるため、回転する際に後退、回転、前進の順に動かし、位置の修正を行った。
ペンの上下、回転、位置の修正までを一つの定義にまとめ、プログラムを短くすることを心がけた。 

感想 

100%.タイヤ

これが完成品。下書きに近い顔を描くことができたと思う。定義やrepeatを使い、簡略化できた。
回転の後、位置ずれが起こるため、後退・前進を使って修正したが、その時間を調節することが一番大変だった。
電池の減り具合でロボットのスピードも変わってしまうため、そこも苦戦した。
何度も繰り返し試験運転をしなければいけなかったため、大変ではあったが、その分、成功した時の達成感は大きかった。
次の課題も頑張りたい。


添付ファイル: filekao.JPG 174件 [詳細] fileimage1 (5).JPG 214件 [詳細] fileimage5.JPG 145件 [詳細] fileimage3.JPG 151件 [詳細] fileimage1.JPG 144件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-06-09 (木) 20:01:33