2006a/A5/課題3左 もくじ

課題3 光を追いかけるロボット

制作者 ヤマヒロ トラ 和知 サット

ロボットの外観

ロボット名;ロボコンキラー
特徴;無意味についた左右のはさみ

060705_1955~01.jpg

経緯

今回のロボットの製作に関して、まず何の音楽 にするかという 点で少しもめました。単純な曲にするか、複雑な曲にするか で意見が分かれました。しかし最終的にはみんなが親しみを持てる音楽にする という方向できまり、[カエルの歌][チャルメラ]に決まりました。どちらもみんなが 子供の頃に聞いたであろう懐かしい曲です。しかし!曲がなって欲しい時に鳴ってく れないという事態も発生し、そのせいで僕たちはかなり苦しめられました。それで、今度は曲が上手に鳴ると今度は光を追いかけないという問題が発生してまたプログラムの改良の繰り返し、ようやくちゃんと光を追いかけかつ曲が鳴るべき時に鳴るちゃんとしたプログラムが完成した。 そして、なんとか無事に今日を迎えることができました!

プログラム

1.光源を見失ったときはには曲を演奏しながら旋回して光源を探す。(作成者;トラ、ヤマヒロ)

#define  DO   523                    // 音階の周波数の定義
#define  RE    587
#define  MI    659
#define  FA   698 
#define  SOL  784
#define  LA    880
task play_music(){while (true){      // かえる歌開始
 PlayTone(DO,25); Wait(30);          // ド    
 PlayTone(RE, 25); Wait(30);         // レ
 PlayTone(MI,25); Wait(30);          // ミ
 PlayTone(FA,25); Wait(30);          // ファ
 PlayTone(MI,25); Wait(30);          // ミ
 PlayTone(RE,25); Wait(30);          // レ
 PlayTone(DO,35); Wait(50);          // ドー+休符
 PlayTone(MI,25); Wait(30);          // ミ
 PlayTone(FA,25); Wait(30);          // ファ
 PlayTone(SOL,25); Wait(30);         // ソ
 PlayTone(LA,25); Wait(30);          // ラ
 PlayTone(SOL,25); Wait(30);         // ソ
 PlayTone(FA,25); Wait(30);          // ファ
 PlayTone(MI,30); Wait(50);          // ミー+休符
 PlayTone(DO,50); Wait(55);          // ドー
 PlayTone(DO,50); Wait(55);          // ドー
 PlayTone(DO,50); Wait(55);          // ドー
 PlayTone(DO,50); Wait(70);          // ドーー
 PlayTone(DO,25); Wait(30);          // ド
 PlayTone(DO,25); Wait(30);          // ド  
 PlayTone(RE,25); Wait(30);          // レ
 PlayTone(RE,25); Wait(30);          // レ
 PlayTone(MI,25); Wait(30);          // ミ
 PlayTone(MI,25); Wait(30);          // ミ
 PlayTone(FA,25); Wait(30);          // ファ
 PlayTone(FA,25); Wait(30);          // ファ
 PlayTone(MI,50); Wait(55);          // ミ
 PlayTone(RE,50); Wait(55);          // レ
 PlayTone(DO,50); Wait(55);          // ドー
 }}               
task main()          
 {SetSensor(SENSOR_1,SENSOR_LIGHT);  
  while (true){start play_music;     // 音楽を開始
  while(SENSOR_1>40){                // 光源を見失う
  OnRev(OUT_C);OnFwd(OUT_A);}        // 旋回中
  while(SENSOR_1<40){                // 光源を発見する
  stop play_music;                   // 音楽を止める
  OnFwd(OUT_A+OUT_C);}}}        // その方向に前進

2.光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す (作成者 サット&和知)

#define Do 523                   // 音階の周波数の定義
#define Le 587
#define Mi 659 
#define Fa 698
#define So 784
#define Ra 880 
#define Si 988
task move_music()                // チャルメラ♪
{
	while (true)
	{
		PlayTone(So,20); Wait(22);     // ソ  
		PlayTone(Ra,20); Wait(22);     // ラ
		PlayTone(Si,60); Wait(62);     // シ
		PlayTone(Ra,20); Wait(22);     // ラ
		PlayTone(So,20); Wait(42);     // ソ
	 	
		PlayTone(So,20); Wait(22);     // ソ
		PlayTone(Ra,20); Wait(22);     // ラ
		PlayTone(Si,20); Wait(22);     // シ
		PlayTone(Ra,20); Wait(22);     // ラ 
		PlayTone(So,20); Wait(22);     // ソ
		PlayTone(Ra,60); Wait(62);     // ラ
		Wait(40);
	}
}
task search_music()              // 音階 ドミレファ…
{
	while (true)
	{
		PlayTone(Do,10); Wait(12);     // ド  
		PlayTone(Mi,10); Wait(12);     // ミ
		PlayTone(Le,10); Wait(12);     // レ
		PlayTone(Fa,10); Wait(12);     // ファ
		PlayTone(Mi,10); Wait(12);     // ミ
		PlayTone(So,10); Wait(12);     // ソ
		PlayTone(Fa,10); Wait(12);     // ファ
		PlayTone(Ra,10); Wait(12);     // ラ
		Wait(20);
	}
	
}
task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);         // センサー1がセ光センサーであることを宣言
	SetSensor(SENSOR_3,SENSOR_LIGHT);         // センサー3がセ光センサーであることを宣言
	
	while (true)
	{	  
		if(SENSOR_1>34 || SENSOR_3>34)           // 光源を認識したら
		{ 
			start move_music;                       // 動いているときの音楽をならす
	 
			while (SENSOR_1>34 ||  SENSOR_3>34)     // どちらかのセンサーが光源を認識してる限り
			{		
			 if(SENSOR_1>=SENSOR_3)                 // 左が明るかったら左へ
				{
					OnFwd (OUT_C);Off(OUT_A);
				}
  if(SENSOR_1<=SENSOR_3)                  // 右が明るかったら右へ
				{
				  OnFwd(OUT_A);Off(OUT_C);
				}
			}
			
			stop move_music;                        // 認識できなかったら動いているときの音楽を止める
		}
	 else                                     // 認識できていないと
	 {
		 start search_music;                     // 探しているときの音楽をならす
		
		 while (SENSOR_1<=34 && SENSOR_3<=34)    // どちらのセンサーも光源を認識できない限り
		 {                                          音楽をならし旋回する
			 Wait(1);
		 }
		
		 stop search_music;                      // 光源を認識できたら探しているときの音楽を止める
	 }
}

工夫した点

最初はタイマーを使っていたが、何故かうまくいかなかったので(多分タイマーの設定がうまくいかなかったのだろう)、光センサーを1 or2個使って光を覆うようにしたのが工夫したところです。これによりタイマーを使わず、光の明るさだけですべてを判断して動くことが可能になりました!

難しかった点

  • プログラミングが全く思いつかなかったのが一番難しかった点です!最初はタイマーを使っていましたが、全くうまくいきませんでした。他の班のプログラムを参考にしたがそれでも上手くいかなかった、僕らの技術不足でプログラムの解読が不可能だった。
  • 曲をループ再生にするプログラムを組むと、曲の出だしの音しか流れないという難点がありました。この原因を考察すると、多分ループが何個も重なったので、音楽を開始するプログラムの位置がおかしかったのだろう。
  • 曲を作ること自体が相当難しかったです。微妙な間隔などをプログラミングすることが非常に難しく骨が折れそうでした。しかし最後にはなんとか動くようになり、問題も解決しました。

感想&反省

今回は今までと違いロボットには手こずらなかったが、プログラミングはすごく難しくて、時間がものすごくかかった。一応完成はしたが自分では気づいていない不完全な部分があるかもしれない。しかしみんなで頑張って作った最高の作品だと僕たちは思っています。そして今までやってきた知識を総動員してロボコン制覇に向けて頑張っていきたいと思っております。

コメント

  • この課題でのプログラミングの経験を活かしてロボコン頑張ってください。 -- 松本(教員)? 2006-07-14 (金) 19:55:53


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

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