2015a/Member

目標

半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作した。

ロボットの説明

基本的には課題2で製作したロボットを流用した。(以下前回レポートへのリンク)

http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMember%2Fstudent-R5%2FMission2

しかしながら光源を探知するセンサーを前向きに置き換えた。

unnamed.jpg

プログラムの説明

プログラム紹介

       #define spinone OnFwd(OUT_A); OnRev(OUT_C);
       #define spintwo OnFwd(OUT_C); OnRev(OUT_A);
       sub shoot(){	
       OnFwd(OUT_A+OUT_C);
       Wait(100);
       OnRev(OUT_A+OUT_B+OUT_C);
	Wait(50);
	Off(OUT_A+OUT_B+OUT_C);
       }
       task main(){
	int runtime = 345;
	int lightmax = 10;
	int zikan;
	SetSensor(SENSOR_1, SENSOR_LIGHT);
	ClearTimer(0);
	while(Timer(0) < runtime){
		spinone;
		if(SENSOR_1 < lightmax){
			zikan = Timer(0);
			lightmax = SENSOR_1;
		}
	}
	spintwo;
	Wait(345 - zikan);
	Off(OUT_A+OUT_C);
	shoot();
       }

プログラム解説

      #define spinone OnFwd(OUT_A); OnRev(OUT_C);
      #define spintwo OnFwd(OUT_C); OnRev(OUT_A);

右回り及び左回りのプログラム

      sub shoot(){	
      OnFwd(OUT_A+OUT_C);
      Wait(100);
      OnRev(OUT_A+OUT_B+OUT_C);
	Wait(50);
	Off(OUT_A+OUT_B+OUT_C);
      }

シュートのプログラム。前進の勢いでボールを打ち出す仕組み

      task main(){
	int runtime = 345;
	int lightmax = 10;
	int zikan;

まず一周開店するのにかかる時間と基準となる明るさを設定する

	SetSensor(SENSOR_1, SENSOR_LIGHT);
	ClearTimer(0);
	while(Timer(0) < runtime){
		spinone;
		if(SENSOR_1 < lightmax){
			zikan = Timer(0);
			lightmax = SENSOR_1;
		}
	}

一周回転し、最も明るい場所に到達するまでの時間を記録する。

	spintwo;
	Wait(345 - zikan);
	Off(OUT_A+OUT_C);

逆回転して懐中電灯の方向を向く。

	shoot();
      }

シュートを行う

感想

タイマーの応用だった事に加え、ロボットを大きく組み替える必要が無かったので比較的早く終わった。


添付ファイル: fileunnamed.jpg 248件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-07-30 (木) 17:35:28