1.全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。
2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。
3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。
(ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 )
※今回は1・2のプログラムを作った。
ロボットの外形
基本構造のロボットの前部に光センサ2個とキャスターをつける。
キャスターは前方高めにつけて、重心を後ろ側にした。
ブロックを飛ばす部分
ギアを全くかませない簡素なモノとした。
ディフェレンシャル・ギアの構造
ディフェレンシャル・ギアとは、一つのモーターでロボットを時計回りと反時計回りに回転させる様に工夫されたものである。
#define THRESHOLD 62 //光の閾値を定義
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサー
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー3を光センサー
while ( true ) {
if ( ( SENSOR_1 < THRESHOLD ) || ( SENSOR_3 < THRESHOLD ) ) { //センサー1またはセンサー3が光閾値より低いならば
SetPower(OUT_C,5);//モーターCの出力を5とする。 OnFwd ( OUT_C ) ; //モーターCを正回転=回転
Off ( OUT_A ) ; //投げない
} else { //両方のセンサーが光閾値を超えるなら
Off ( OUT_C ) ; //モーターC停止=回転停止 SetPower(OUT_A,1);
OnFwd ( OUT_A ) ; //投げ始める
Wait ( 45 ) ;
OnRev ( OUT_A ) ; //おろす
Wait ( 40) ;
Off ( OUT_A ) ; //停止
}
} }
#define THRESHOLD 60//光閾値1を定義
#define THRESHOLD2 68//光り閾値2を定義
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);//センサー1を光センサー SetSensor(SENSOR_3, SENSOR_LIGHT);//センサー2を光センサー while(true){ if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD)) //センサー1が光閾値1より低く、センサー3が光閾値1より低いならば
{
OnRev(OUT_C);//回転 Wait(10); Off(OUT_C);//停止 } else { if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 < THRESHOLD))//センサー1が光閾値1より高く、センサー3が光閾値1より低いならば
{
OnFwd(OUT_C);//回転 Wait(10); Off(OUT_C);//停止 }else{ if((THRESHOLD<SENSOR_1<THRESHOLD2)&&(THRESHOLD<SENSOR_3<THRESHOLD2))//センサー1と3が光閾値1より高く、2より低いならば repeat(5){OnFwd(OUT_C); Wait(35); OnRev(OUT_C); Wait(35); Off(OUT_C); }//左右に曲がる×5
else{
if((SENSOR_1>THRESHOLD2)&&(SENSOR_3>THRESHOLD2))//センサー1とセンサー3が光閾値2より高いならば
{
OnFwd(OUT_A); Wait(40); OnRev(OUT_A); Wait(40); Off(OUT_A); }//ブロック投げる }}}}}
・光センサをとりつける幅
・よく使うプログラムは、定義を用いる。
・プログラムの微調整が面倒。
・まっすぐに進む時ガタガタになる。
→モーターを増やす(今回は無理)
・不快音がする。
→タイヤを小さくして、本体とタイヤの摩擦をなくした。
・強度が弱い。
→補強する。特に投げる構造。
・難しかった。最初はディフェレンシャル・ギアの組み立てがわからなくて、ものすごい騒音を出しながら走るロボットができた。
組み立て直したら、普通に走ったからほっとした。
プログラムは3つ作ってください。I