*目次 [#b25d0539]
#contents

*最初のプログラム [#ofa238ac]
**課題:三角形に動くロボット [#ic250380]
 task main()
 {
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(300);
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(88);
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(300);
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(88);
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(300);
    Off(OUT_A+OUT_C);
 }
 感想:これではちゃんとした三角形にならなかった。
      回転する長さを考慮する必要がある。

**課題:三角形に動くロボット(改) [#sb42391c]
 #define x 300
 #define y 88
 
 task main()
 {
     repeat(2){
       OnFwd(OUT_C);
       OnFwd(OUT_A);
       Wait(x);
       OnFwd(OUT_C);
       OnRev(OUT_A);
       Wait(y);  
       }
     OnFwd(OUT_A);
     OnFwd(OUT_C);
     Wait(x);
     Off(OUT_A+OUT_C);
 }
 感想:定義を使用。ちょっとだけ見やすくなったと思う。

*書道ロボット [#pf7fc2d4]
**課題:「左」を書く書道ロボット [#j7ad21aa]
 task main()
 {   
    OnRev(OUT_B);
    Wait(50);          
                        //ペンを下げる
    OnFwd(OUT_C);         
    OnFwd(OUT_A);
    Wait(75);
    Off(OUT_C+OUT_A);  
                        //1画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);       
                        //ペンを上げる
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(120);         
    Off(OUT_C+OUT_A);
    OnFwd(OUT_A);
    OnRev(OUT_C);
    Wait(115);
    Off(OUT_C+OUT_A);   
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(30);
    Off(OUT_C+OUT_A);   
                        //2画目へ移動 
    OnRev(OUT_B);
    Wait(50);           
                        //ペンを下げる
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(90);
    Off(OUT_A+OUT_C);   
                        //2画目
    OnFwd(OUT_B);
    Wait(50);           
    Off(OUT_B);         
                        //ペンを上げる
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(95);
    Off(OUT_C+OUT_A);
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(108);
    Off(OUT_C+OUT_A);   
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(75);
    Off(OUT_C+OUT_A);   
                        //3画目へ移動
    OnRev(OUT_B);
    Wait(50);          
                        //ペンを下げる
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(40);
    Off(OUT_C+OUT_A);   
                        //3画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);         
                        //ペンを上げる
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(85);
    Off(OUT_C+OUT_A);
    OnRev(OUT_C);
    OnFwd(OUT_A);
    Wait(107);
    Off(OUT_C+OUT_A);
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(61);
    Off(OUT_C+OUT_A);   
                        //4画目へ移動
    OnRev(OUT_B);
    Wait(50);           
                        //ペンを下げる 
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(35);
    Off(OUT_C+OUT_A);   
                        //4画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);         
                        //ペンを上げる   
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(65);
    Off(OUT_C+OUT_A); 
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(102);
    Off(OUT_C+OUT_A);
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(40);
    Off(OUT_C+OUT_A);   
                        //5画目へ移動
    OnRev(OUT_B);
    Wait(50);           
                        //ペンを下げる
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(60);
    Off(OUT_C+OUT_A);   
                        //5画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);         
                        //ペンを上げる
 }
 感想:1度はFloatを使おうとしたけど妥協。
     サブルーチンや変数、定数を使わなかったので、かなり長いプログラムに
     なってしまった。     
     紙に書いてみても、バランスの悪いものとなってしまった。

**課題:「左」を書く書道ロボット(改) [#wb02f990]
 #define b 50
 sub pen_down()
 {  
     OnRev(OUT_B);
     Wait(b);
 }
                        //ペンを下げるサブルーチン 
 sub pen_up()
 {
     OnFwd(OUT_B);
     Wait(b);
     Off(OUT_B);
 } 
                        //ペンを上げるサブルーチン 
 void go_straight(int t)
 {
     Onfwd(OUT_A+OUT_C); Wait(t);                                                 
     Off(OUT_A+OUT_C);
 }
                       //直進して止まる関数
 void turn_right(int t)
 {
     OnFwd(OUT_A); OnRev(OUT_C); Wait(t); 
     Off(OUT_A+OUT_C);   
 }
                       //右へ曲がって止まる関数
 void turn_left(int t)
 {  
    OnFwd(OUT_C); OnRev(OUT_A); Wait(t); 
    Off(OUT_A+OUT_C);
 }
                       //左へ曲がって止まる関数
 task main()
 {   
     pen_down();         
                       //ペンを下げる
     go_straight();   
                       //1画目
     pen_up();      
                       //ペンを上げる
     go_back(120);
     turn_right(115);  [回転] 
     go_straight(30);     
                       //2画目へ移動完了 
     pen_down();          
                       //ペンを下げる
     go_straight(90);
                       //2画目
     pen_up();         
                       //ペンを上げる
     go_back(95);
     turn_left(108);    [回転]
     go_straight(75);   
                        //3画目へ移動完了
     pen_down();          
                        //ペンを下げる
     go_straight(40); 
     Off();   
                        //3画目
     pen_up();         
                        //ペンを上げる
     go_back(85);
     Off();
     turn_right(107)
     Off();             [回転]
     go_straight(61);
     Off();   
                        //4画目へ移動完了
     pen_down();           
                        //ペンを下げる 
     go_straight(35);
     Off();   
                        //4画目
     pen_up();        
                        //ペンを上げる   
     go_back(65);
     Off(); 
     turn_left(102)
     off()
     go_straight(40);
     Off();   
                        //5画目へ移動完了
     pen_down();           
                        //ペンを下げる
     go_straight(60);
     Off();   
                        //5画目
     pen_up();         
                        //ペンを上げる
 }
 感想:定義と関数を使って改良してみた。
      プログラムを見るだけで、動きがなんとなくわかるプログラムに
      なったと思う。
*タッチセンサー [#qa6c36cc]
**課題:机の周りを沿って進むロボット~失敗編~ [#r625d3cb]
 task main()
    { 
        SetSensor(SENSOR_1,SENSOR_TOUCH);
        SetSensor(SENSOR_3,SENSOR_TOUCH);  
        while(true)
       {
        if (SENSOR_3 == 1 )
        {
            OnFwd(OUT_A+OUT_C);  
        }                       //センサー3が押されている間、直進
        if (SENSOR_3 == 0 )
        {
          while(true){
            OnFwd(OUT_A);
            OnRev(OUT_C);
            Wait(30);
            OnFwd(OUT_A+OUT_C);
            Wait(30);
         }                       //センサー3が離れると右へ
        if  ((SENSOR_1 == 1 )&&(SENSOR_3 == 0 ))
        {
            OnFwd(OUT_A);
            OnRev(OUT_C);
            Wait(90);  
        }                        //センサー1が押されると左へ
       }  
    }}
  感想:2つ目のifを繰り返してしまう。whileの使い方を間違ってるみたい。

**課題:机の周りを沿って進むロボット~成功編~ [#raa3e593]
 task main()
 { 
      SetSensor(SENSOR_1,SENSOR_TOUCH);
      SetSensor(SENSOR_3,SENSOR_TOUCH);
        while(true)
        { 
          if ( SENSOR_3 == 1 )
          {  
           OnFwd(OUT_A+OUT_C);
          }                     //センサー3が押されている間直進
          if(( SENSOR_3 == 0 )&&( SENSOR_1 == 0 )) 
          {
           OnFwd(OUT_A);
           Off(OUT_C);
          }                     //センサーが押されていないと右へ
          if ( SENSOR_1 == 1 )
          {
           OnFwd(OUT_C);
           OnRev(OUT_A);
           Wait(90);
          }                     //センサー1が押されると左へ
         }
 }
 感想:whileを使うと、シンプルなプログラムになったと思う。
      ロボットの形も変えた。今までで1番時間をかけた。

*光センサー [#y3481636]
**ライントレースするロボット~モーター2個、光センサー1個使用~ [#c6ba4b0e]
 #define T 40
 
 task main ()
 {
      SetSensor(SENSOR_2,SENSOR_LIGHT);
     
       while (true) {
        if (SENSOR_2 < T) {     //センサーが線の上にある条件             
            OnFwd(OUT_A);
            Off(OUT_C);
        } else {                //それ以外の条件
            Off(OUT_A);
            OnFwd(OUT_C);
        }
    }
 }
 感想:うまくライントレースしてくれた。モーターはタイヤ。

**ライントレースするロボット~モーター1個、光センサー2個使用~ [#zaba073c]
 #define T 40
 task main()
 {
      SetSensor(SENSOR_1, SENSOR_LIGHT);
      SetSensor(SENSOR_3, SENSOR_LIGHT);
       
       while(true) {
        if ((SENSOR_1 > T)&&(SENSOR_3 < T)) {  
            OnFwd(OUT_B);
        } 
        if ((SENSOR_3 > T)&&(SENSOR_1 < T)) {  
            OnRev(OUT_B);
        }
                   }
 }
 感想:モーター1個に苦戦した。作れた!と思ったら、
      ギアの構造が先生のヒントと同じような感じだったので、
      ちょっと残念だった。
      現在、動くか動かないかの瀬戸際です。
**ライントレースするロボット~モーター2個、光センサー2個使用(前後に設置)~ [#i482f782]
 #define T 40
 task main ()
 {
     SetSensor(SENSOR_1,SENSOR_LIGHT);
     SetSensor(SENSOR_3,SENSOR_LIGHT);
      while (true) {
       if ((SENSOR_1 < T) &&(SENSOR_3 < T)){ 
                              //前後のセンサーが線の上にある条件   
           OnFwd(OUT_A);
           OnFwd(OUT_C);
       } if (SENSOR_1 < T){   //前のセンサーのみ線の上にある条件                  
           OnFwd(OUT_A);
           Off(OUT_C);
       } if (SENSER_1 < T){   //後のセンサーのみ線の上にある条件
           Off(OUT_A);
           OnFwd(OUT_C);
   } 
 }
 }
 感想:うまくライントレースしなかった。
      両方のセンサーが線から離れないと曲がらないようにしたため、
      車体の長さの分、線からはみ出すまで進んだ。
      結果、ズルをしたり、線から離れるロボットとなった。

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