課題3-1 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す

060714_1711~01.jpg

ロボットについて

 形はある程度小回りできるぐらいの大きさがいいと思ったので、前から作ってあった車体にした。そこに光センサーを付けるだけで今回のロボットは完成した。所要時間5分なり。 命名:シンプル2号

プログラム  制作者 藤巻,坂口

#define turn_right OnFwd(OUT_A);OnRev(OUT_C);//右に旋回
#define turn_left OnRev(OUT_A);OnFwd(OUT_C);//左に旋回
#define stop_turning Off(OUT_A+OUT_C);//旋回終わり
#define TURN_TIME 400//旋回する時間は4秒
『かえるのうた』を定義
#define C2 523 //ど
#define CS2 554 //ど#
#define D2 587 //れ
#define DS2 622 //れ#
#define E2 659 //み
#define F2 698 //ふぁ
#define FS2 740 //ふぁ#
#define G2 784 //そ
#define GS2 831 //そ#
#define A2 880 //ら
#define AS2 932 //ら#
#define B2 988 //し
 
task play_music()//かえるの歌のメロディーを流す
{
  while(true)
   {  
     PlayTone(C2,40);
      Wait(50); 
     PlayTone(D2,40);
      Wait(50); 
     PlayTone(E2,40);
      Wait(50); 
     PlayTone(F2,40);
      Wait(50); 
     PlayTone(E2,40);
      Wait(50); 
     PlayTone(D2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(E2,40);
      Wait(70);
     PlayTone(F2,40);
      Wait(70);
     PlayTone(G2,40);
      Wait(70);
     PlayTone(A2,40);
      Wait(70);
     PlayTone(G2,40);
      Wait(50);
     PlayTone(F2,40);
      Wait(50);
     PlayTone(E2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
      Wait(100);
     PlayTone(C2,40);
      Wait(20);
     PlayTone(C2,40);
      Wait(20);
     PlayTone(D2,40);
      Wait(20);
     PlayTone(D2,40);
      Wait(20);
     PlayTone(E2,40);
      Wait(20);
     PlayTone(E2,40);
      Wait(20);
     PlayTone(F2,40);
      Wait(20);
     PlayTone(F2,40);
      Wait(20);
     PlayTone(E2,40);
      Wait(20);
     PlayTone(D2,40);
      Wait(20);
     PlayTone(C2,40);
      Wait(20);
      Wait(150);
   }
}
task main()
{
start  play_music;//演奏開始
int light_max = 0;//光の最大値のときを0に設定
int time_max;
SetSensor(SENSOR_2,SENSOR_LIGHT);//センサーを定義
turn_right;//まわれ右!
ClearTimer(0);Timer(0) をリセット
while(FastTimer(0)<TURN_TIME)//タイマー0がTURN_TIME以下の時繰り返す
{
  if(SENSOR_2>light_max)//光センサー一番明るいところを発見したとき
   {
     light_max=SENSOR_2;//センサーが光の最大値を発見
     time_max=FastTimer(0);
   }
}
   stop_turning;Wait(100);//旋回やめ
   turn_left;//左に旋回
   Wait(TURN_TIME-time_max);//右に旋回する時間−光を見つけるまでにかかった時間分左に旋回する
   stop_turning;
   stop play_music ;//演奏終了
   OnFwd(OUT_A+OUT_B);//光に向かって前進!!   
  Wait(300);}

 

課題3-2 3-1に『光源に近づき過ぎると停止する』という機能を追加する

プログラム  制作者 藤巻,坂口

#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define turn_left OnRev(OUT_A);OnFwd(OUT_C);
#define stop_turning Off(OUT_A+OUT_C);
#define TURN_TIME 400
 
#define C2 523 //ど
#define CS2 554 //ど#
#define D2 587 //れ
#define DS2 622 //れ#
#define E2 659 //み
#define F2 698 //ふぁ
#define FS2 740 //ふぁ#
#define G2 784 //そ
#define GS2 831 //そ#
#define A2 880 //ら
#define AS2 932 //ら#
#define B2 988 //し
 
 task play_music()//かえるの歌
{
  while(true)
   {  
     PlayTone(C2,40);
      Wait(50); 
     PlayTone(D2,40);
      Wait(50); 
     PlayTone(E2,40);
      Wait(50); 
     PlayTone(F2,40);
      Wait(50); 
     PlayTone(E2,40);
      Wait(50); 
     PlayTone(D2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(E2,40);
      Wait(70);
     PlayTone(F2,40);
      Wait(70);
     PlayTone(G2,40);
      Wait(70);
     PlayTone(A2,40);
      Wait(70);
     PlayTone(G2,40);
      Wait(50);
     PlayTone(F2,40);
      Wait(50);
     PlayTone(E2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
     PlayTone(C2,40);
      Wait(50);
      Wait(100);
     PlayTone(C2,40);
      Wait(20);
     PlayTone(C2,40);
      Wait(20);
     PlayTone(D2,40);
      Wait(20);
     PlayTone(D2,40);
      Wait(20);
     PlayTone(E2,40);
      Wait(20);
     PlayTone(E2,40);
      Wait(20);
     PlayTone(F2,40);
      Wait(20);
     PlayTone(F2,40);
      Wait(20);
     PlayTone(E2,40);
      Wait(20);
     PlayTone(D2,40);
      Wait(20);
     PlayTone(C2,40);
      Wait(20);
      Wait(150);
   }
}
task main()
{
start  play_music;//演奏開始
int light_max = 0;//光の最大値のときを0に設定
int time_max;
SetSensor(SENSOR_2,SENSOR_LIGHT);//センサーを定義
turn_right;//まわれ右!
ClearTimer(0);Timer(0) をリセット
while(FastTimer(0)<TURN_TIME)//タイマー0がTURN_TIME以下の時繰り返す
{
  if(SENSOR_2>light_max)//光センサー一番明るいところを発見したとき
   {
     light_max=SENSOR_2;//センサーが光の最大値を発見
     time_max=FastTimer(0);
   }
}
   stop_turning;Wait(100);//旋回やめ
   turn_left;//左に旋回
   Wait(TURN_TIME-time_max);//右に旋回する時間−光を見つけるまでにかかった時間分左に旋回する
   stop_turning;
   stop play_music ;//演奏終了
   OnFwd(OUT_A+OUT_B);//光に向かって前進!!   
  Wait(300); 
 until (SENSOR_2 >85) ;   // センサの値が85以上になったらストップ
 Off(OUT_A+OUT_C);
}

3-1,3-2のプログラムの反省点

二つのプログラムとも、先生のを参考にさせてもらった。しかし、プログラムの意味が分からず、とりあえず動かしてみることに。その動きからプログラムの意味を理解できました。今回の収穫は、今まであやふやだったプログラムをなんとか理解できたこと。 曲のプログラムは、みんなが知っていて和める曲として『かえるのうた』にしました。

完成までの経緯と反省・感想   

 最初は何をどうすれば、全くわからなかった。週何回か友人に教えてもらいながら、なんとか理解しようとした。結果・・・少しは進歩(したはず・・・)。わからないなりにプログラムをつくっていってみると『やはり、プログラムは実際につくらなければ、理解できない!』ということに気づいた。このようにプログラムを書けば、こうロボットは動くのかと、何となくイメージすることができるようになった。しかし、課題を見ると まだ??の状態。坂口クンのアイデアにより、以前、先生がホワイトボードに書いていらっしゃったプログラムを採用することになった。(すいません)このプログラムを課題用に修正。うまく作動!単純なものだがうれしかった。   次に取りかかったのは、音楽。これは『カエルの歌』に決定。楽譜はいっさいなし。幼い頃の記憶を頼りに坂口クンが作曲した。味のある曲が出来上がった。しかし、プログラムに組み込んでも鳴らない。どうして?わからなかったのでほかの班を見て修正。「わからなければ、どっかを参考にしろ!」今回学んだことの一つだ。

コメントをどうぞ

  • もう少しレポートとしての体裁を整えてください。また、プルグラムの日本語での説明(特に、光を追いかけるロジック)がほしいです。 -- ゆき(TA)? 2006-07-21 (金) 16:55:40


添付ファイル: file060714_1711~01.jpg 143件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-28 (金) 15:12:01 (4772d)