練習問題で作成したプログラム (11班)

メンバー: 柴田淳和、森山雄一郎、善田健二

version 1
Last modified: Thu Dec 26 13:44:18 JST 2002


[必須] ロボットに鉛筆またはペンを取り付け、 A3 用紙の上に ★型を描かせなさい (練習問題 3.3)。

task main()
{  
     repeat(4){ //これを四回繰り返す
   
       OnFwd(OUT_A+OUT_C); //モーターAとモーターC を正回転    
       Wait(75); //プログラムの実行を0.75秒待つ 
       
       OnFwd(OUT_A); //モーターAを正回転   
       OnRev(OUT_C); //モーターCを逆回転     
       Wait(133); //プログラムの実行を1.33秒待つ  
    
       OnFwd(OUT_A+OUT_C); //モーターAとモーターC を正回転   
       Wait(75); } //プログラムの実行を0.75秒待つ 
                         
       Off(OUT_A+OUT_C); //モーターAとモーターCを止める
}

工夫した点:
鉛筆(ボールペン)をなるべくロボットの中心にくるように作ったことが一番苦労した。このプログラムは規則正しすぎるので、プログラムの実行の時間を調節するとなお良いと思う。

[必須] 机の上で動き回るロボットを作成しなさい。 ただし方向変換は机の端に来たときに行うこと (練習問題 4.2)。

task main() 
{      SetSensor(SENSOR_1,SENSOR_TOUCH); // センサー端子1に接続されたセンサーが
                                         // タッチセンサーであると宣言 
       while(true)      {
           OnFwd(OUT_A+OUT_C); //モーターAとモーターC を正回転
           until(SENSOR_1 == 0); //押されているタッチセンサーが離れるまで待つ           
           OnRev(OUT_A+OUT_C); //モーターAとモーターC を逆回転
           Wait(100); //プログラムの実行を1秒待つ 
           OnFwd(OUT_A); //モーターAを正回転
           Wait(125); //プログラムの実行を1.25秒待つ
           //方向転換させている
           OnFwd(OUT_A+OUT_C); //モーターAとモーターC を正回転      }
}

工夫した点:
ロボットの先に上下に稼動可能なタッチセンサーを取り付けるアイディアを考えた。

[必須] 前向きに光センサーを取り付けたロボットを作成し、 そのロボットがもっとも明るい方向 (例えば照らした懐中電灯の方向) を向くようにしなさい。 さらにそのロボットが、 懐中電灯の光を追いかけて進むようにプログラムを改良しなさい (練習問題 4.5.1, 4.5.2)

#define RUN_TIME 50   // トレースする時間(単位 1/10 秒)
int lightmax;    
int timemax; 
   
task main ()
{
	SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー端子1に接続されたセンサーが
                                           //ライトセンサーであると宣言

	while (true)
	{
		lightmax = 0;
		timemax = 0;

		ClearTimer(0); // Timer(0) をリセット

		while (Timer(0) <= RUN_TIME)
		{
			OnFwd(OUT_A); //モーターAを正回転
			OnRev(OUT_C); //モーターCを逆回転
			if (SENSOR_1 >= lightmax)
			{
				lightmax = SENSOR_1 ;
				ClearTimer(1); // Timer(1) をリセット
			}
		}
		timemax = Timer(1);
		ClearTimer(0); //Timer(0) をリセット
		OnRev(OUT_A); //モーターAを逆回転
		OnFwd(OUT_C); //モーターCを正回転
		until(Timer(0) >= timemax); 
		OnFwd(OUT_A + OUT_C); //モーターAとモーターC を正回転 
		Wait(50); //プログラムの実行を0.50秒待つ
	}
}

工夫した点:
RCXが感知する光の値を読み取り、決めるのが難しかった。あと、RCXに内蔵されているタイマーについて理解するのがつらかった。

[必須] 明るいところでは、長調で、暗いところでは短調で、 曲を演奏するプログラムを作成しなさい (曲は何でもよい) (練習問題 5.2)。


工夫した点:

[自由課題] 黒い線に沿って速く走るロボットを作成せよ (例題の改良)。

#define THRESHOLD 40                              // 閾値

task main ()
{  SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー端子1に接続されたセンサーが
                                         // ライトセンサーであると宣言
	while (true)
	{
		if (SENSOR_1 > THRESHOLD) // 黒線上にいるとき
		{
			OnFwd(OUT_A); //モーターAを正回転
			Off  (OUT_C); //モーターCを停止
		} else {              // 黒線から外れたとき
			Off  (OUT_A); //モーターAを停止
			OnFwd(OUT_C); //モーターCを正回転
		}
	}
}

工夫した点:
このプログラムを示したが、この課題を満たすために他にも光センサーを二つ用いたりしてみたが、うまくいかなかった。しかし、センサーが二つになればより早く進むことができたと思う。