インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)
1. 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。
2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。
懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。
しっぽが可愛いvV
参考ページを見ながら作成しました。
タイヤは黄色×黒で決定!
安定のために黄色い足を付けてみました。
問題点:黄色い足が絨毯に引っかかる。。。
↓
足を取り外し、摩擦を減らすために黒くて丸いものを装着!
光センサーは一つだけ使うことに決定!
今回はこれ↑を投げることに決定!
黄色い足を進化させて投げる手にしました!!
ちょっとがたがた言うのが欠点、、、
投げる前
↓
投げた後
#define THRESHOLD 42 //光の明るさを定義 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサーを定義 while(true) { if(SENSOR_1 < THRESHOLD) //定義した光よりも暗い場合 { OnFwd(OUT_A); //時計周りに回転する } else if(SENSOR_1 < THRESHOLD && SENSOR_1 < 45) { OnFwd(OUT_A); //光の方向に進む Wait(10); OnRev(OUT_A); Wait(10); } else { if(SENSOR_1 > 45) //定義した光よりも明るい場合 { //止まってブロックを投げる OnFwd(OUT_C); Wait(5); Off(OUT_A+OUT_C); } } } }
(制作者:A子)
光を探して・・・
↓
投げたァー!!
光の閾値を決めるのが大変でした。懐中電灯から50cmという規定が特に難しかったです。
//2つのしきい値を決定 #define BORDER_1 40 //光を検知するしきい値 #define BORDER_2 50 //50cmまで近づいたことを検知するしきい値 // ループから抜け出すためのフラグ用変数 int flag = 0; task main (){ SetSensor ( SENSOR_1, SENSOR_LIGHT ); //センサー1は光センサーですよ while ( flag == 0 ){ //投げるまで(合図があるまで)ループする if ( SENSOR_1 < BORDER_1 ){ //正面が暗かったら、 OnFwd(OUT_A); //モーターを正回転 }else{ //正面が明るければ、 OnRev(OUT_A); //モーターを逆回転 } //end if if ( SENSOR_1 > BORDER_2 ){ //じゅうぶん近づいたら、 Off(OUT_A); //前進するのを止めて、 OnFwd(OUT_C); //投げつける。 Wait(15); OnRev(OUT_C); //腕を元の位置にもどす。 Wait(10); Off(OUT_C); flag++; //ループ終了の合図。 } //end if } //end while } //end task main
(制作者:スアマ)
光を探し中
↓
投げたッ!!
タイヤを回すための特殊な機構をうまく動かすのはとても難しかった。
プログラムをよくがんばっていると思います。
一つ目に関して:真ん中あたりの
SENSOR_1 < THRESHOLD && SENSOR_1 < 45よりも
SENSOR_1 > THRESHOLD && SENSOR_1 < 45の方が
適切ではないでしょうか。
二つ目に関して:二つ光センサを使うとより正確にどちらに曲がればいいかを
判断できると思います。 FI