課題3:懐中電灯に向かってブロックを投げるロボットの制作

以下の動きをするプログラムを作る。

その1、全方向から懐中電灯の方向を探しだし、懐中電灯に向かってブロックを投げる。(懐中電灯は動かさない。)

その2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めるとブロックを投げる。

その3、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めると50cmの距離まで近づいてブロックを投げる。

メンバー紹介

今回は、コリンとあやこで制作することになりました。女子2人でとっても不安でした・・・。

使用するロボットについて

<条件> 使用できるモータは2つまで!

全体像

↑改良前の全体像

光センサの着き方がもろく、すぐ取れてしまいます。

全体像その2

↑改良前の全体像その2

折角、写真を撮ったので載せてみました。

全体像その3

↑改良後の全体像

光センサが着くところを強化しました。これで、大丈夫!!

補助輪

↑補助輪

あえて、タイヤのゴムを付けないことでスムーズな動きが実現しました!!あと、なるべく小さくすることを心がけて作りました。付け根の部分は、自由に回転するようにしました。

ギアのストッパー

↑ギアのストッパー

モータの回転を逆にした時に、反対のタイヤが動くようにするためにつけました。

プログラムについて

その1

その1のその1

#define IKICHI 50    // 閾値を50に設定
task main()
{
SetSensor(SENSOR_1 , SENSOR_LIGHT);    // センサ端子1に接続したセンサを光センサに設定
SetSensor(SENSOR_3 , SENSOR_LIGHT);    // センサ端子3に接続したセンサを光センサに設定
SetPower(OUT_A+OUT_C,3);    // モータの出力を3に設定

while((SENSOR_1 > IKICHI) || (SENSOR_3 < IKICHI))   // センサ端子1の光センサが閾値より大きく
{            // かつ、センサ端子3の光センサが閾値より小さい時
OnFwd(OUT_A);     // 時計周りに回って、懐中電灯の光を探す
}
Off(OUT_A);       // whileが成り立たなくなった時、A出力のモータを止める
Wait(100);       // 1秒間停止した後、
OnRev(OUT_B);     // アームを動かしてブロックを投げる
Wait(30);        // アームを動かす時間は0,3秒に設定
Off(OUT_B);      // B出力のモータを止める
}

その1のその2

その2

#define IKICHI 60   // 閾値を60に設定
task main()
{
SetSensor(SENSOR_1 , SENSOR_LIGHT);   // センサ端子1に接続したセンサを光センサに設定
SetSensor(SENSOR_3 , SENSOR_LIGHT);   // センサ端子3に接続したセンサを光センサに設定
SetPower(OUT_A+OUT_C,2);   // モータの出力を2に設定
while(true){   
if((SENSOR_1 >= IKICHI) && (SENSOR_3 >= IKICHI))   // センサ端子1の光センサが閾値以上、
{          // または、センサ端子3に光センサが閾値以上の時、
repeat(2)      // 前進する行動(1回0,4秒)を2回繰り返す
{          
OnFwd(OUT_A);   
Wait(20);      
OnRev(OUT_A);   
Wait(20);      
}
Off(OUT_A);     // 繰り返した後、A出力のモータを止める
OnFwd(OUT_B);   // アームを動かしてブロックを投げる
Wait(100);      // アームを動かす時間は1秒
Off(OUT_B);     // B出力のモータを止める
} 
if((SENSOR_1 < IKICHI)  && (SENSOR_3 > IKICHI))   // センサ端子1の光センサが閾値より小さい、
{           // または、センサ端子3の光センサが閾値より大きいとき
OnFwd(OUT_A);    // 時計回りに回って懐中電灯の光に向かって進む
}
if((SENSOR_1 > IKICHI)  && (SENSOR_3 < IKICHI))   // センサ端子1の光センサが閾値より大きい、
{           // または、センサ端子3の光センサが閾値より小さいとき
OnRev(OUT_A);    // 反時計回りに回って懐中電灯の光に向かって進む
}
}
}

その3

#define IKICHI 60   // 閾値を60に設定
task main()
{
SetSensor(SENSOR_1 , SENSOR_LIGHT);   // センサ端子1に接続したセンサを光センサに設定
SetSensor(SENSOR_3 , SENSOR_LIGHT);   // センサ端子3に接続したセンサを光センサに設定
SetPower(OUT_A+OUT_C,2);   // モータの出力を2に設定
while(true){   
if((SENSOR_1 >= IKICHI) && (SENSOR_3 >= IKICHI))   // センサ端子1の光センサが閾値以上、
{          // または、センサ端子3に光センサが閾値以上の時、
repeat(2)      // 前進する行動(1回0,4秒)を2回繰り返す
{          
OnFwd(OUT_A);   
Wait(20);      
OnRev(OUT_A);   
Wait(20);      
}
repeat(8)      // 前進する行動(1回0,4秒)を8回繰り返して
{          // 懐中電灯に近づく
OnFwd(OUT_A);   
Wait(20);      
OnRev(OUT_A);   
Wait(20);   
}
Off(OUT_A);     // 繰り返した後、A出力のモータを止める
OnFwd(OUT_B);   // アームを動かしてブロックを投げる
Wait(100);      // アームを動かす時間は1秒
Off(OUT_B);     // B出力のモータを止める
} 
if((SENSOR_1 < IKICHI)  && (SENSOR_3 > IKICHI))   // センサ端子1の光センサが閾値より小さい、
{           // または、センサ端子3の光センサが閾値より大きいとき
OnFwd(OUT_A);    // 時計回りに回って懐中電灯の光に向かって進む
}
if((SENSOR_1 > IKICHI)  && (SENSOR_3 < IKICHI))   // センサ端子1の光センサが閾値より大きい、
{           // または、センサ端子3の光センサが閾値より小さいとき
OnRev(OUT_A);    // 反時計回りに回って懐中電灯の光に向かって進む
}
}
} 

制作してみての感想

<苦労した点>

 全体的にプログラムを作るのが難しかった。特に、懐中電灯を追いかけるプログラムでは、光センサの感度が悪く、調整がうまくできなかったので大変だった。他にも、前進するときに、タイヤの着いてるモータを交互に少しずつ動かさなければいけないが、モータを動かす時間を調節することが難しかった。

<工夫した点>

 ロボットを支える補助輪がスムーズに動くように、あえてタイヤにゴムを付けなかったところ。  ロボット全体をコンパクトにするように心がけた。  ブロックを投げるときに、遠くに飛ぶように、アームが動く途中にストッパーをつけた。また、アームが動く前の待機位置にもストッパーを付けた。

コメントお願いします


課題1では相対的に最も明るい方向を探せるプログラムにしてください。I


添付ファイル: filerobo-right-kai.JPG 281件 [詳細] filerobo-right2.jpg 276件 [詳細] filetaiya-right.jpg 333件 [詳細] filerobo-right.jpg 305件 [詳細] filestop-right.jpg 303件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-09 (土) 16:23:28