[[2016a/Member]]

目次
#contents
*はじめに [#geedb62a]
お絵かきロボットの作成である。

詳しい内容として
余裕を持ってA4紙の中に似顔絵を納めること。ペン先以外はキット内のものを使うこと。マクロや関数などを使い、main関数がなるべく単純になるように作ること。
(2016年度前期/課題1)
*ロボットの説明 [#qc4939ee]
#ref(2016a/Member/funatsu/Mission1/IMG_2426.jpg,40%,ロボット)
#ref(2016a/Member/funatsu/Mission1/IMG_2957.jpg,40%,固定部分)
1枚目の写真がロボットの全体像である。モーターを前輪の前に固定した。

2枚目の写真は鉛筆の固定部分である。写真では少しわかりにくいが3点で強めに固定してある。

*ロボットの動作 [#j4579b23]
#ref(2016a/Member/funatsu/Mission1/IMG_7861.jpg,40%,書き方)
鉛筆の落とし方は写真のように紙と垂直になるようにできている。
鉛筆を紙に押さえつけるためにモーターを用いることにした。モーターの回転によって鉛筆の筆圧を調整をしているためモーターが強すぎると鉛筆が回りすぎてしまい、弱すぎると筆圧がなくなってしまう。

残りの二つのタイヤで移動をし、絵を描いていく。
*プログラムの説明 [#w49150e1]
・定義
 #define kaku Off(OUT_BC);OnRev(OUT_A,20);Wait(400);Off(OUT_A);//鉛筆を紙に押さえつける
 #define hanasu Off(OUT_A);OnFwd(OUT_A,30);Wait(300);Off(OUT_A);//鉛筆を紙から離す
 #define turn_left Off(OUT_C);OnFwd(OUT_B,50);Wait(1150);Off(OUT_B);//左回転
 #define turn_right Off(OUT_B); OnFwd(OUT_C,50); Wait(600); Off(OUT_C);//右回転
 #define go_forward(t,s) OnFwd(OUT_BC,s);Wait(t);Off(OUT_BC);//前進
 #define go_back(t,s) OnRev(OUT_BC,s);Wait(t);Off(OUT_BC);//後進
以上の定義を用いて組み立てていった。

私としてはturn_left、turn_rightの定義もgo_forwardやgo_backのように毎回動く時間とスピードを調節しておきたかったがnxcに転送することができなかった。これを解決できなかったのが残念である。
 

・プログラム
 最初に書いた時はペンと動力となるタイヤとの距離があまりに広いので線と線をつなげられるように移動するのに悩んだ。これが原因で似たようなプログラムがいくつも入っている。今考えたらこの一連の動きを定義したらよりまとまったプログラミングができたかもしれない。

また、日によってnxcの動きが微妙に違う。これは電力不足が原因と思われ、前後の動きに大きな違いは見られない。しかし、左回転、右回転の角度には大きな影響を及ぼし毎回調節しなくてはならなかった。
 task main()
 {
 repeat(4){//輪郭を書く
  kaku;
  go_forward(900,50);
  hanasu;
  go_forward(800,50);
  turn_left;
  go_back(1300,50);
 }
 go_forward(1500,50);//移動
 turn_left;
 go_back(1300,50);
 kaku;//髪を書く
 go_forward(900,50);
 hanasu;
 go_forward(800,50);//移動
 turn_left;
 go_back(1200,50);
 go_forward(750,50);
 turn_left;
 go_back(1300,50);
 repeat(2){//目を書く
  go_forward(180,50);
  kaku;
  go_forward(180,50);
  hanasu;
 }
 go_forward(680,50);//移動
 turn_right;
 go_back(1300,50);
 go_forward(900,50);
 turn_right;
 go_back(1300,50);
 go_forward(400,50);
 kaku;//鼻を書く
 go_forward(200,50);
 hanasu;
 go_forward(200,50);//移動
 kaku;//口を書く
 OnFwd(OUT_B,50);
 Wait(300);
 Off(OUT_B);
 }
 

*反省 [#fff3fc81]
 成功したものである。
#ref(2016a/Member/funatsu/Mission1/IMG_0135.jpg,20%, )
 みにくいのでマジックで線をなぞってみた。
#ref(2016a/Member/funatsu/Mission1/IMG_0876.jpg,40%, )
 鉛筆を押さえつけるプログラミングをしたが、やはり筆圧に差ができてしまった。全体的に線が薄く摩擦の影響を強く受けるので鉛筆はこの課題に向いていない。

 輪郭は正方形にする予定で組み立てていたが結局きれいにかけることはなかった。口もUの字にする予定だったが曲線をかけなかった。

 これらの原因は鉛筆と動力の距離が大きく開いていたことであると思われる。このせいで電力不足によって生じる誤差の影響を強く受けてしまう。
 これらの原因は鉛筆と動力の距離が大きく開いていたことであると思われる。このせいで電力不足によって生じる誤差の影響を強く受けてしまい、毎回書く絵に変化を与えてしまう。また、少しの角度変化で鉛筆は大きく変わるので調節が難しい。

 プログラムと鉛筆の距離を改善したい。

 
 

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