目次
#contents
*はじめに [#j68cbf97]

課題はA4の紙に収まるように自分またはチームメイトの似顔絵を描く「お絵かきロボット」の作成である。

ただし、main関数がなるべく単純になるようにプログラムを作らなければならない。

*ロボット本体の説明 [#c5230424]

&ref(2016a/Member/Yukihisa/Mission1/お絵かきロボット1.jpg,30%,前);
&ref(2016a/Member/Yukihisa/Mission1/お絵かきロボット2.jpg,30%,横);
&ref(2016a/Member/Yukihisa/Mission1/お絵かきロボット3.jpg,30%,分解);
&ref(2016a/Member/Yukihisa/Mission1/お絵かきロボット4.jpg,20%,分解);


写真のように、ロボットの前の方にモーターを取り付け、タイヤの間に鉛筆をさし込み、鉛筆が上下するようにした。

モーターを取り付けるためにいろんなブロックをつけたので、ロボットが少し重くなった。

*プログラムの説明 [#nae3827c]

-定義

四角の似顔絵を描きたかったので、TURN_TIME 133で統一した。

右折、左折、直進、ペンの上げ下げ、角でのバックの動作が多かったので、定義に加えた。

ここでは、モーターA,B,Cをそれぞれ左タイヤ、前タイヤ、右タイヤとする。

 #define TURN_TIME 133
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_C);//右折
 #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(TURN_TIME);Off(OUT_C);//左折
 #define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);//前進
 #define penndown(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);//ペン降下
 #define penup(t) OnRev(OUT_B);Wait(t);Off(OUT_B);//ペン上昇
 #define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);//後退

-プログラム

前進する時間や、バックする時間を探すのに苦労した。

頂点を綺麗につなげるために、ペンを上げたあとですこし前進し、曲がったあとですこし後退するように工夫した。

 task main ()
 {
    pendown(10);
    go_forward(140); //顔の輪郭(縦)
    penup(10);
    go_forward(73); //顔の輪郭(横)
    go_forward(73); //線を書いたあたりまで前進
    turn_right;
    back(85);
    back(85); //線を書いたあたりまで後退
    pendown(10);
    go_forward(114);
    go_forward(114); //顔の輪郭(横)
    penup(10);
    go_forward(73);
    go_forward(73); //線を書いたあたりまで前進
    turn_right;
    back(85);
    back(85); //線を書いたあたりまで後退
    pendown(10);
    go_forward(140);
    go_forward(140); //顔の輪郭(縦)
    penup(10);
    go_forward(73);
    go_forward(73); //線を書いたあたりまで前進
    turn_right;
    back(85);
    back(85); //線を書いたあたりまで後退
    pendown(10);
    go_forward(114);
    go_forward(114); //顔の輪郭(横)
    penup(10);
    go_forward(73);
    go_forward(73); //線を書いたあたりまで前進
    turn_right;
    go_forward(17);
    go_forward(17); //髪の毛の位置まで前進
    turn_right;
    back(85);
    back(85); //すこし後退
    pendown(10);
    go_forward(114);
    go_forward(114); //前髪の線
    penup(10);
    go_forward(73);
    go_forward(73); //線を書いたあたりまで前進
    turn_left;
    go_forward(26);
    go_forward(26); //目を書く位置まで前進
    turn_left;
    back(85);
    go_forward(22);
    back(85); //すこし後退
    go_forward(22); //左目までの空白
    pendown(10);
    go_forward(22);
    go_forward(22); //左目
    penup(10);
    go_forward(22);
    go_forward(22); //目の間
    pendown(10);
    go_forward(22);
    go_forward(22); //右目
    penup(10);
    go_forward(110);
    go_forward(110); //輪郭の線上まで前進
    turn_right;
    go_forward(50);
    go_forward(50); //口の位置まで前進
    turn_right;
    back(85);
    go_forward(45);
    back(85); //すこし後退
    go_forward(45); //口までの空白
    pendown(10);
    go_forward(34);
    go_forward(34); //口
    Off(OUT_AC)
 }

*結果 [#fb946b06]

&ref(2016a/Member/Yukihisa/Mission1/似顔絵 結果.jpg,30%,結果);

自分の似顔絵を描いたつもりだ。

輪郭はうまく描けたと思う。

髪の毛の線がなぜか斜めになってしまった。電池の消費具合で、変わってしまったかなと思う。

*感想 [#c8279145]

最初はプログラム作成の仕方がよく分からずあまり楽しめなかった。

しかし、やっていくうちにだんだん意味が分かってきて、プログラムが楽しくなった。

ロボットの回転が計算上では90°曲がるはずなのが、実際にやってみたり、電池の消費で変わるので、そのたびにTURN_TIMEを変えるのが面倒だった。

誰が見ても簡単に理解できるように、プログラムをもう少し短くできたらいいのかなと思った。

もっと難しいプログラムもやってみたいなと思った。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS