2010a

目次

課題3

黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。ただし1は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにすること。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。 (重複しないように一人一つ以上のプログラムを作成すること。)

  1. 全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。
  2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
  

懐中電灯の代わりに携帯のライトなどを利用してもよい。

メンバー

スズキ
ミズイ

ロボットについて

ロボット本体

ロボットの全体像です。ホイールを投げる部分が重いため補強していったら不格好になってしまいました。

投げる部分

今回は遠心力を使って投げるようにしました。重くなってしまったため取り付けが難しかった。

投げる部分(ホイール有り)

ホイールを入れるとこんなかんじになります。見えにくいですが奥まで入っています。

光センサー

光センサーの部分は幅を広めにしてみました。高さが低い気がするがぎりぎり大丈夫だと思う。

工夫したこと

今後改善すべき点

プログラム

スズキのプログラム

1. 全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。

#define turn_time 400		//一回転する時間
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);	//右に回転する
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);  	//左に回転する
#define throw OnFwd(OUT_B);Wait(30);Off(OUT_B);		//投げる動作
int l_max1=0;		//1番光が強いところ
int l_max2=0;		//2番目に光が強いところ
int t_max1=0;		//l_max1までの時間
int t_max2=0;		//l_max2までの時間

task main(){
  SetSensor(SENSOR_1,SENSOR_LIGHT);		//センサー1を光センサーとする
  SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);	//センサー1を好感度モードにする
  ClearTimer(0);
	while(FastTimer(0)<turn_time){		//回転している間
		if(SENSOR_1>l_max1){ 		//光の最大値を見つけたら
			l_max2=l_max1;		//今までの最大値を2番目にする
			t_max2=t_max1;		//今までの最大値のタイムを2番目にする
			l_max1=SENSOR_1;		//光の最大値と設定する
			t_max1=FastTimer(0);	//タイマーを入れる
		}
		if(SENSOR_1<l_max1&&SENSOR_1>l_max2){ //2番目に強い光を見つけたら
			l_max2=SENSOR_1;		//光の2番目に大きい値と設定する
			t_max2=FastTimer(0);	//タイマーを入れる
		}
		turn_right;			//回転する
	}        
	turn_left;Wait(turntime-t_max2);Off(OUT_A+OUT_C);	//光源まで回転する
	throw;						//投げる
	turn_right(turntime-t_max2);Off(OUT_A+OUT_C);			//元の位置まで戻る
	turn_left(turntime-t_max1);Off(OUT_A+OUT_C);		//光源まで回転する
	throw;						//投げる
}

ミズイのプログラム

2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。

#define LIGHT 60						//光を追うための閾値
#define LMAX 80						//光に近づいたときの数値
sub throw() {OnFwd(OUT_B);Wait(30);Off(OUT_B);}		//投げる

task main(){
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
	while(SENSOR_1<LMAX||SENSOR_3<LMAX)
		while(SENSOR_1<LMAX||SENSOR_3<LMAX){
			if(SENSOR_1>LIGHT&&SENSOR_3>LIGHT){		//両センサが明るいとき前進
				OnFwd(OUT_A+OUT_C);
			}else if(SENSOR_3>LIGHT){			//センサ3だけ明るいとき右回転
				OnFwd(OUT_A);OnRev(OUT_C);
			}else{						//センサ1だけ明るいとき左回転
				OnFwd(OUT_C);OnRev(OUT_A);
			}
		}
		Wait(300);						//懐中電灯が止まったか確認
	}
	throw();							//投げる
}

感想

スズキ

今回は製作時間が短かったためシンプルなロボットになってしまったので少し残念。

ミズイ

時間がなくて大変だったけど、なんとか動くものができたのでよかった。

コメント

コメントをどうぞ



添付ファイル: filea4.jpg 352件 [詳細] filea3.jpg 342件 [詳細] filea1.jpg 340件 [詳細] filea.jpg 347件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-15 (日) 20:45:03