[[2009a]] 
*ロボットで似顔絵を描く [#s7847f00]
[目次]
#contents
*ロボットを制作する [#n7a1f6aa]
今回のロボットには、四輪のものを使用した。この基本となる部分は、ほぼ
解説書のまま制作した。
#ref(SH350097.JPG)

**試作1号機の解説 [#m2d8aa83]
まず、制作したものが下の写真の試作1号機だ。
#ref(SH350089.JPG) 

この試作機は、ペンの後ろの1点をブロックによって固定するようにした。
ペンの上げ下げは、ベルトドライブによって行うことにした。この場合、ペンを何度も上下させるとペンを固定しているパーツがモーターボックスから外れることがあったので、両側から棒で固定した。また、ペンが必要以上に下がらないようにストッパーを装着した。これは、同時に適度な筆圧を保つ役目も果たす。

**1号機の問題点 [#v098115a] 

・ペンを1点で支えているので横からの力に弱い。

・ペンの持ち手の強度が不十分 

・構造が複雑

・特定のペンしか持てない

**試作2号機の解説 [#x2776ce4]
 下の写真が1号機に改良を施した二号機
#ref(PAP_0095.JPG)

ペンの装着方法をブロックの箱組みから、3本のアームと2本の輪ゴムによる固定方法に変更した。これにより単純な構造でありながら、ペンの持ち手の強度及び、より安定した筆圧の確保に成功した。また、一定の太さのペンであれば保持することが可能となった。
 もう1点、二号機ではペンの上げ下げの機構も変更した。1号機のベルトドライブからアングルギアによる駆動に変更することで、より確実な可動が可能になった。
#ref(PAP_0094.JPG)

*プログラム [#u779d20c]
     プログラムver.1                                                         
 int turn_time                                
 int curve_time
 int re_time
  #define go_straight(T); OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
  #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(turn_time);
  #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(turn_time);
  #define curve_left OnFwd(OUT_C);Off(OUT_A);Wait(curve_tim);
  #define pen_up OnRev(OUT_B);Wait(20);Off(OUT_B);
  #define pen_down OnFwd(OUT_B);Wait(20);Off(OUT_B);
  #define re OnRe(OUT_A+OUT_C);Wait(re_time);
  #define st Off(OUT_A+OUT_C);Wait(100);
  
  task main()                                     
 {
  SetPower(OUT_A+OUT_C,1);
  SetPower(OUT_B,7);
  pen_down;
  turn_time=100;
  curve_time=60;
  re_time=40;
  turn_time+=520;
  turn_left;
  Off(OUT_A+OUT_C);
  turn_time-=600;
  turn_right;
  st;
  pen_up;
  re;
  st;
  pen_down;
  curve_left;
  pen_up;
  re_time+=10;
  re;
  turn_tme+=30;
  turn_left;
  st;
  pen_down;
  re_time-=10;
  re;
  st;
  pen_up;
  re;
  st;
  pen_down;
  re;
  pen_up;
  re;
  turn_time-=30;
  turn_left;
  go_straight(260);
  turn_right;
  st;
  pen_down;
  re_time+=210;
  re;
  st;
  pen_up;
  go_straight(170);
  turn_time+=70;
  turn_right;
  st;
  pen_down;
  go_straight(40);
  OnFwd(OUT_A);
  Wait(20);
  Off(OUT_A+OUT_C);
  }
  プログラムver.2
  
 int turn_time                                
 int curve_time
 int re_time
  #define go_straight(T); OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
  #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(turn_time);
  #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(turn_time);
  #define curve_left OnFwd(OUT_C);Off(OUT_A);Wait(curve_tim);
  #define re OnRe(OUT_A+OUT_C);Wait(re_time);
 sub pen_up()
   {
 OnRev(OUT_B);
 Wait(20);
 Off(OUT_B);
 }
   sub pen_down()
  {
   OnFwd(OUT_B);
   Wait(20);
   Off(OUT_B);
   }
   sub st()
  { 
    Off(OUT_A+OUT_C);
    Wait(100);
    task main()
   以下プログラムver.1と同様
*完成品 [#j698fbe0]
#ref(SH350096.JPG)
~少し横から見たような似顔絵が完成した。帽子が少し寸足らずな気もするが問題ない範囲と判断。 
~実際、動かす場所によって動きに多少の誤差が出ているのを確認している。 
*工夫点 [#c2ad87bf]
 先に作ったプログラムでは同じ動作を行うためにマクロのみを使用したが、そのためにプログラムの容が大きくなり転送に時間がかかった。そこで、改良したプログラムでは動作時間に変数を含まないプログラムをマクロからサブルーチンに変更した。
 また、本体の移動中に不要なところでペンが上がったり下がったりしたので、移動用のプログラムとペンの上げ下げのプログラムの間に行動をキャンセルするプログラムを挿入した。
*感想   [#f01914ef]
単純な似顔絵を描くだけでも色々工夫してより良いものを作ろうと思うと、なかなか大変なものだと思えた。まだ不満な部分も多々あるが、時間的猶予があまりないので留めておく。次の課題にはさらに力を入れたいと思う。
*コメント欄(ご自由にどうぞ) [#f176ed70]
- ロボットの説明はよく書けています!ただ、プログラムの工夫の説明は、プログラムソースの間に挟んでいただいた方が見やすいのではないかと思います。それと、「ひとりにつき一つ以上のプログラムを作成すること。」の条件がありますので、誰が書いたプログラムかも明記してください。 -- [[こさか]] &new{2009-05-21 (木) 22:14:17};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS