[[2015a/Member]]

#contents

*ボールを転がして空き缶に当てるロボット [#w8bdd8ff]
**はじめに [#i3d85ab2]
今回は半径1m以内にある空き缶を探して、25cmの距離からボールを転がしてその空き缶に当てるロボットを作った。超音波センサーを使ってボールを当てる対象物である缶を発見する。一周目の回転で缶のある場所を覚えて、二週目の回転でその位置まで回転し、15�僂里箸海蹐泙廼瓩鼎い董▲�タパルトから缶に向かって、ボールを発射する。
**ロボット本体構造 [#n052a679]
モーターA,Bに左右のタイヤをつけ、モーターCにアームを取り付けた
***機体の外観 [#if2cdaf5]
カタパルトがついている
&ref(./IMG_2417.JPG,30%);




***ボールを投げる構造 [#y537e8d5]
***ボールを投げる構造(カタパルト) [#y537e8d5]
投石器の様にアームを使って投げることが出来る様になっている。
&ref(./IMG_2413.JPG,30%); 
&ref(./IMG_2415.JPG,30%);
&ref(./IMG_2416.JPG,30%);
&ref(./IMG_2420.JPG,30%);
&ref(./IMG_2419.JPG,30%);

***超音波センサー [#n8ac9ef0]
&ref(./IMG_2417.JPG,30%);


***プログラム定義 [#p7a5fe39]
    #define turn_left OnFwd(OUT_A,25);OnRev(OUT_B,25);
    #define turn_right OnFwd(OUT_B,25);OnRev(OUT_A,25);
    #define go_forward OnFwd(OUT_AB,25);
    #define TURN_TIME_10=147; //10°回転するのにかかる時間
    #define TURN_TIME_10=147; //10°回転する時間
***空き缶の位置を超音波センサーで探すプログラム [#b5ac2004]
10°ずつ回転して超音波センサーで測定する。測定した値が保持している最小値よりも小さかった場合、測定した最小値を更新していく。
        int scan_angle(int a){ //0<=a<=36で指定 a*10°の範囲をスキャンする
	PlaySound(SOUND_CLICK);
	Wait(500);
	int min_temp=0; //仮の最小値
	int min=100; //最小値
	int angle=0; //最小値を記録した角度[°]
	int min_temp=0; //仮の最小
	int min=100; //最小
	int angle=0; //最小を記録した角度[°]
	int i=0; //i*10[°]ごと記録する
	int turn_time=TURN_TIME_10;
	repeat(a){
		min_temp=SensorUS(S4);
		if(min>=min_temp){ //最小値比較
			min=min_temp; //最小値更新
			angle=i*10; //最小値
			PlaySound(SOUND_LOW_BEEP);
			Wait(500);
		}
		turn_right;
		Wait(turn_time);
		i++;
	}
	return angle;
***空き缶の位置まで回転するプログラム[#xbba25f7]
        task main(){
	int machine_turn_time=0; //ロボットの回転時間
	int machine_turn_time=0; //ロボット回転時間
	SetSensorLowspeed(S4);
	int angle=scan_angle(36); //360°スキャン
	if(angle<=180){
		machine_turn_time=TURN_TIME_10*angle;
		go_forward;
		Wait(machine_turn_time);
		Off(OUT_AB);
	}else{
		machine_turn_time=TURN_TIME_10*angle;
		go_forward;
		Wait(machine_turn_time);
		Off(OUT_AB);
                }
***缶まで前進するプログラム[#pe7be673]
        int flg=0;
	while(flg==0){
        go_forward;
        if(SensorUS(S4)<=15){
	flg=1;
		}
	}
        Off(OUT_AB);
***ボールを投げるプログラム [#h8782832]
 OnFwd(OUT_C,100); //ボール射出
 Wait(500);
 }

**問題点 [#l566bee9]
電池の消耗で回転に要する時間が変わって正確な角度まで回転できない。
ボールの射出方式が悪く、ボールを遠くに飛ばせなかった。
**感想 [#ob488019]
超音波センサーが反応して素直に感動した。ボールを缶に当てるつもりだったがなかなか難しかった。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS