*目次 [#ma3222b3]
#contents
*課題 [#n706c9b6]
A3の紙に相棒の似顔絵を書くロボットを作成する。~
~ひとりにつき一つ以上のプログラムを作成する。
*ロボット [#f9a0c228]
#ref(2008a/A8/課題1左/DSC_0001.jpg,CENTER)~
CENTER:車体の右側にモーターを取り付け、ペンを持つ腕の部分が上下に動くようなパーツを作りました。~
**前面 [#b157d5a4]
#ref(2008a/A8/課題1左/DSC_02.jpg,CENTER)~
~
CENTER:前面の黄色いパーツにペンをはさみ、ゴムでペンを固定する。
CENTER:ペンは、細くてあまり凹凸のないものでないとうまくはさめませんでしたが、一度はさんでゴムで固定すればしっかりと取り付けられます。~
~
~
#ref(2008a/A8/課題1左/DSC_08.jpg,CENTER)~
~
CENTER:モーターの部分と本体がとれやすかったので、写真のように固定してあります。またパーツ自体も固定してあります。
**右側面 [#b7482281]
#ref(2008a/A8/課題1左/DSC_03.jpg,CENTER)~
~
CENTER:右面にモーターを置き、ペンを持つ腕が動くようにしてあります。~
CENTER:ゴムが1個だけだと、ペンの重みに負けて、腕が上がらないことがあったので、ゴムを2個使うことで、より安定して腕の部分を動かせるようにしました。~
~
#ref(2008a/A8/課題1左/DSC_0004.jpg,CENTER)~
~
CENTER:ゴムの部分は、最初はギアを使っていたが、ギアだと腕の上下が早すぎるのでゴムに変えて早さの調節をしました。
*プログラム [#u4f38237]
#ref(2008a/A8/課題1左/roboA.jpg,CENTER)
CENTER:プログラムAによる顔~
#ref(2008a/A8/課題1左/roboP.jpg,CENTER)
CENTER:プログラムBによる顔~
**A [#fd0a7968]
#ref(2008a/A8/課題1左/P-A.jpg)
 #define TURN_TIME 105 //右に曲がる時間
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C) //右に曲がる
 #define turn_left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C) //左に曲がる
 #define go_straight(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //直進
 #define UP OnRev(OUT_B);Wait(15);Off(OUT_B); //ペンを上げる
 #define DOWN OnFwd(OUT_B);Wait(15);Off(OUT_B); //ペンを下げる
 task main()
 {
 OnFwd(OUT_A); //輪郭を描く
 OnRev(OUT_C);
 Wait(420);
 Off(OUT_A+OUT_C);
 
 go_straight(230); //前髪の線を描く
 
 UP;
 turn_right;
 go_straight(5);
 turn_right;
 go_straight(230);
 DOWN;
 
 repeat(2){      //目の線を描く
  UP;
  go_straight(35);
  DOWN;
  go_straight(35)
  }
 
 UP;
 turn_left(113);
 go_straight(25)
 turn_left(65);
 go_straight(190)
 DOWN;
 
 go_straight(35)  //口を描く
 }

(作成者:三澤)
**B [#w57b29bb]
#ref(2008a/A8/課題1左/P-B.jpg)
 #define UPANDDOWN_TIME             20         // 鉛筆を上げるし下げる時間
 #define TURN_90                    110        // 90度曲がる時間 
 #define TURN_360                   415        //  360度曲がる時間
 #define ZIG_TIME                   5          // ジグザグする時間 
 #define WRITE                      1          // 描くか決める変数 
 #define NO_WRITE                   0          // 描くか決める変数
 
 int	iFlag = 0;                            // 鉛筆が上がっているか確認する変数
 
 // 鉛筆を上げる関数
 sub up ()
 {
     if ( iFlag == 1 )                         // 鉛筆が上がっているか確認した後で進む
     {
         OnRev ( OUT_B );                      // B モータを作動して鉛筆を上げる
         Wait ( UPANDDOWN_TIME );
         Off ( OUT_B );
         iFlag = 0;                            // 鉛筆が上がっていることをチェックする
     }	
 }
 
 // 鉛筆を下げる関数
 sub down()
 {
      if ( iFlag == 0 )                        // 鉛筆が下がっているか確認した後で進む
      {
          OnFwd ( OUT_B );                     // B モータを作動して鉛筆を下げる
          Wait ( UPANDDOWN_TIME );
          Off ( OUT_B );
          iFlag = 1;                           // 鉛筆が下がっていることをチェックする
      }
 }
 
 // ロボットを前進させる関数
 // iTime : 動く時間
 // iWriteFlag : 描くか決める変数
 void go ( int iTime, int iWriteFlag )
 {
     if ( iWriteFlag == 1 )                    // iWriteFlag=1のとき鉛筆を下げる
     {
         down ();
     }
     else
     {
         up ();
     }
     OnFwd ( OUT_A + OUT_C );                  // A モータとCモータを作動する
     Wait ( iTime );	
     Off ( OUT_A + OUT_C );
 }
 
 // ロボットを後進させる関数
 // iTime : 動く時間
 // iWriteFlag : 描くか決める変数
 void back ( int iTime, int iWriteFlag )
 {
     if ( iWriteFlag == 1 )                    // iWriteFlag=1のとき鉛筆を下げる
     {
          down ();
     }
     else
     {
         up ();
     }
     OnRev ( OUT_A + OUT_C );                  // A モータとCモータを作動する
     Wait ( iTime );
     Off ( OUT_A + OUT_C );
 }
 
 // ロボットを左に曲がらせる関数
 // iTime : 動く時間
 // iWriteFlag : 描くか決める変数
 void turn_left ( int iTime, int iWriteFlag )
 {
     if ( iWriteFlag == 1 )                    // iWriteFlag=1のとき鉛筆を下げる
     {
          down ();
     }
     else
     {
          up ();
     }
     OnRev ( OUT_A );                          // Aモータを作動する
     OnFwd ( OUT_C );                          // Cモータを作動する
     Wait ( iTime );
     Off ( OUT_A + OUT_C );
 }
 
 // ロボットを右に曲がらせる関数
 // iTime : 動く時間
 // iWriteFlag : 描くか決める変数
 void turn_right ( int iTime, int iWriteFlag )
 {
     if ( iWriteFlag == 1 )                    // iWriteFlag=1のとき鉛筆を下げる
     {
        down ();
     }
     else
     {
         up ();
     }
     OnFwd ( OUT_A );                          // Aモータを作動する
     OnRev ( OUT_C );                          // Cモータを作動する
     Wait ( iTime );
     Off ( OUT_A + OUT_C );
 }
 
 // ロボットをジグザグに線を描かせる関数
 // iTime : 動く時間
 // iStron : ジグザグする強さ
 void write_zig ( int iTime, int iStrong )
 {
     int	iCount = 0;
     int	iLoop;
	
     iCount = iTime / ZIG_TIME;
 	
     down ();
     for ( iLoop = 0 ; iLoop < iCount ; iLoop++ )  // ジグザグするために繰り返す部分
      
    {
         OnFwd ( OUT_A );                       // 右に少し動く
         Wait ( iStrong );
         Off ( OUT_A );
 		
         OnFwd ( OUT_A + OUT_C );               // 前に少し動く
         Wait ( ZIG_TIME / 2 );
         Off ( OUT_A + OUT_C );
 		
         OnFwd ( OUT_C );                       // 左に少し動く
         Wait ( iStrong ); 
         Off ( OUT_C );
 		
         OnFwd ( OUT_A + OUT_C );               // 前に少し動く
         Wait ( ZIG_TIME / 2 );
         Off ( OUT_A + OUT_C );
     }
     up ();
 }
 
 task main ( )
  {
 
     // 顔の輪郭を描く部分
     turn_right ( TURN_360, WRITE );
 	
     // 髪を描く部分
     go ( 50, NO_WRITE );
     turn_right ( TURN_90, NO_WRITE );
     back ( 190, NO_WRITE );
     go ( 190, WRITE );
   
     // 目を描く部分
     turn_right ( TURN_90, NO_WRITE );
     go ( 70, NO_WRITE );
     turn_right ( TURN_90, NO_WRITE );
     back ( 200, NO_WRITE );
     go ( 40, NO_WRITE );
     write_zig ( 40, 2 );
     go ( 40, NO_WRITE );
     write_zig ( 40, 2 );
 	
     // 鼻を描く部分
     back ( 15, NO_WRITE );
     turn_left ( TURN_90, NO_WRITE );
     back ( 70, NO_WRITE );
     go ( 30, WRITE );
 
     // 口を描く部分
     go ( 130, NO_WRITE );
     turn_left ( TURN_90, NO_WRITE );
     go ( 110, NO_WRITE );
     turn_right ( TURN_90 * 2, NO_WRITE );
     write_zig ( 25, 10 );	
 	
  }



(作成者:朴)
*難しかった、できなかったところ [#v0e16a1a]
・ペンを上げ下げする部分のパーツを作るのがとても大変だった。~
なんとかペンを上下に上げ下げ出来るパーツを作りたかったので、自分たちで作った。今現在ゴムだったところは、実は前はギアで出来ていて、上げ下げするスピードが速すぎたので、ゴムに替えました。ゴムにしてから、速さがちょうど良くなり、プログラムも楽になりました。しかしこのパーツはペンを挟みこんでいるのではなく、最終的にゴムで固定しているので、ペンを下ろしたときに若干ずれてしまったりするので、そこは課題が残りました。~
~
・毎回機械の動き方が微妙に違うので、距離の計算をするのが大変だった。~
同じプログラムでも、1回やる度に目や口の位置がずれてしまった。でも少しずれても違和感のないようにプログラムを組んで、なんとか顔になるようにした。
~
*コメントをどうぞ [#h80b6bd4]
- 工夫した点などをもっと具体的に書いてみましょう。例えば「ペンを上げ下げする部分のパーツを作るのがとても大変だった」ことについて、どのような試作を重ねたか、どのように変更すると問題がどのように解決できたか、あるいはさらにどのような新しい問題がでてきたか、など、より具体的な説明を記述しましょう。 -- [[松本]] &new{2008-05-23 (金) 09:20:51};

書くべきことは書けており、プログラムを工夫しています。気になる点が残るので、授業中に確認します。
#comment

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