目次

課題の確認

懐中電灯に向かってブロックを投げるロボット

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

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

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

ロボット

ロボットの全体図

戦車のような外観になりました。

前1.JPG
前2.JPG
前3.JPG























工夫したところ

装填2.JPG










ホイールを打ち出すことができるようにしつつ、ホイールが下に落ちないように、
,覇鹵別椶離曠ぁ璽襪髻↓△念貳峅爾離曠ぁ璽襪髻共に半分だけ押さえました。
実際ロボが動いていると、ホイールが軽いため、振動ですぐ下に落ちてしまうので、
押さえないわけにはいかなかったのですが、これで解決できました。
そしてをモーターで回転させて一番下のホイールを打ちます。









センサー部.JPG








先輩のページを見ていたところ、左の写真のようにして、センサーの間を仕切り、
より正確に懐中電灯の方向を向くようにしていたグループがあり、
自分たちのグループでもそれを使うことにしました。
実際これでかなり正確な方向にホイールを発射できるようになりました。












苦労したところ

何と言っても、『発射』と『装填』をどうするか悩みました。

銃身.JPG








まず『発射』について
この写真ではわかりづらいですが、赤く囲った部分の右と左で高さを変えることで、
銃身の部分に傾斜をつけています。(左から右に向かって高くなっています)
これにより、ホイールを一ヶ所に集め、安定した連射を可能としました。

そして、赤く囲った部分のパーツは、
一見むやみやたらとつけられたように見えますが、
ホイール装填部と、ホイールを打ち出す装置とがうまくかみ合うように
微調整を重ねていった結果、こうなりました。







装填1.JPG








次に『装填』について
今回は、一つホイールを発射したら次のホイールが上から落ちてくるようにしましたが、
実際、打った後に次のホイールがうまく落ちてくれなかったので、苦労しました。
そこで、赤く囲った部分に、傾斜の部品をつけることで、例えホイールがずれていたとしても、
発射部には、ちょうど真ん中に落ちるようにしました。










プログラム

としぞうのプログラム

課題の1のプログラムです。

#define turn_R(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);    //右回転を定義
#define shot OnFwd(OUT_B);Wait(20);Off(OUT_B);    //ホイールの発射を定義
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);    //センサー1を光センサーと定義
SetSensor(SENSOR_3, SENSOR_LIGHT);    //センサー3を光センサーと定義
SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);    //センサー1を高感度モードにする
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);    //センサー3を高感度モードにする
int s=0;    //ホイールの発射回数をsとし初期値を0にする
while (s<2){    //ホイールを2発発射するまで以下の動作を実行する
if((SENSOR_1>700)&&(SENSOR_3>700))    //懐中電灯の光を感知した時
   {
       shot;    //ホイールを発射する
       s++;    //発射回数に1を足す
       turn_R(30);
   }
  else    //懐中電灯の光を感知していない時
   {
       turn_R(300);    //右に回転する
   }
   }
Off(OUT_A+OUT_B+OUT_C);    //停止
}

光の明るさの最大値を求めて、そこにホイールを発射するプログラムを作りたかったのですが、
懐中電灯が二つあるため、最大値と、その次に明るい部分を検出するプログラムを構成する必要があると思い、
いろいろ考えたのですが、良いプログラムが思い浮かばず、
結局、一定基準より明るくなったらホイールを発射するプログラムにしました。

オレンジのプログラム

#define eye_L SENSOR_1                   //eye_Lを定義
#define eye_R SENSOR_3                   //eye_Rを定義
#define cont 45                          //contを45と定義
#define time 50                          //timeを50と定義
task main ()
{
SetSensor(eye_L, SENSOR_LIGHT);                 //左の光センサー
	SetSensor(eye_R, SENSOR_LIGHT);                 //右の光センサー
	int i=0;                                        //変数を使用 0から
	Wait(100);                                      //一秒待ってからスタート
while(FastTimer(0)<time)
      {right_turn
         if(SENSOR_1>light_max)
           {light_max=SENSOR_1;}
right_turn 
sub search_light()                  //右回りし続けて光を探すプログラム
{
	OnFwd(OUT_C); Wait(50);
	Off(OUT_C); Wait(20);
	PlayTone(330,50) ;
	ClearTimer(0);               //search_lightを実行するたびにタイマーをリセット&スタートする
until(SENSOR_1>=light_max);
Float(OUT_C);
arm Wait(100);
	{
	if ((eye_L >= cont ) && (eye_R >= cont ))       //センサーが両方反応したとき
		{
		if (FastTimer(0) <  700){               
		OnFwd(OUT_C); Wait(time); Off(OUT_C); Wait(10);
		OnRev(OUT_C); Wait(time); Off(OUT_C); Wait(10);
			if (FastTimer(0) >=  700){    //七秒経っているなら、ブロックを投げるプログラム
			OnFwd(OUT_A); Wait(20);
			Off(OUT_A);
			Wait(100);
			i++;                          //変数に1を足してプログラムは上に戻る
			}
		}
	else if ((eye_L >= cont ) && (eye_R  <= cont ))      //左のセンサーが反応しているとき、左に曲がる
		{
		PlayTone(349,50) ;
		OnRev(OUT_C); Wait(time); Off(OUT_C); Wait(10);}    
	else if ((eye_L <= cont ) && (eye_R >= cont ))       //右のセンサーが反応しているとき、右に曲がる
		{
		PlayTone(440,50) ;
		OnFwd(OUT_C); Wait(time); Off(OUT_C); Wait(10);}
	else {                                                //センサーが反応していないとき、  search_lightをスタート
		search_light();}
	}
 }
 }

まとめ・反省

としぞう

今回は、課題1,2と比べるとかなり制作期間が短く、シビアな回となりました。
しかしそれでも、ロボットの制作に関しては、オレンジの"ぴらめき"にかなり救われました。
プログラムも、もう一工夫したかったのですが、期末試験との兼ね合いが…
まあとりあえず完成して良かったです。

オレンジ

時間が短い上にロボットの構造が分かりづらいという鬼のような課題だった。としぞうにホームページの作成を大部分任せてしまったのが心苦しい。

コメント

コメントをどうぞ!

  • ロボットのほうは工夫しているみたいなので、プログラムおよびその説明を充実させてください。今回の課題は授業中にあったとおり、変数を用いて最大値を探し出すことです。一人目に関しては、例えば、最大値と2番目の値を記録する2つの変数を用いて、観測した光量の大きさは3つの場合に分けられるので、それぞれの場合に対して記録値を変更するという方法があります。二人目に関しては、まずどの課題を選んだか書いてください。変数を定義したことはわかるのでその意味や、どうしてその命令を実行させるかがはっきりとした、つまりロボットにどのように懐中電灯の状態を判断させるかがはっきりとわかる説明をお願いします。 -- FI? 2010-07-30 (金) 17:38:44
  • ロボットの説明はよくできています -- TAKA? 2010-07-30 (金) 17:49:50


添付ファイル: file装填2.JPG 171件 [詳細] file装填1.JPG 177件 [詳細] file前3.JPG 182件 [詳細] file前2.JPG 223件 [詳細] file前1.JPG 184件 [詳細] file銃身.JPG 185件 [詳細] fileセンサー部.JPG 186件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-30 (金) 17:50:28